git.openpandora.org
/
pandora-kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ceph: mark user pages dirty on direct-io reads
[pandora-kernel.git]
/
net
/
ceph
/
pagevec.c
diff --git
a/net/ceph/pagevec.c
b/net/ceph/pagevec.c
index
54caf06
..
01947a5
100644
(file)
--- a/
net/ceph/pagevec.c
+++ b/
net/ceph/pagevec.c
@@
-13,8
+13,7
@@
* build a vector of user pages
*/
struct page **ceph_get_direct_page_vector(const char __user *data,
* build a vector of user pages
*/
struct page **ceph_get_direct_page_vector(const char __user *data,
- int num_pages,
- loff_t off, size_t len)
+ int num_pages, bool write_page)
{
struct page **pages;
int rc;
{
struct page **pages;
int rc;
@@
-25,7
+24,7
@@
struct page **ceph_get_direct_page_vector(const char __user *data,
down_read(¤t->mm->mmap_sem);
rc = get_user_pages(current, current->mm, (unsigned long)data,
down_read(¤t->mm->mmap_sem);
rc = get_user_pages(current, current->mm, (unsigned long)data,
- num_pages,
0
, 0, pages, NULL);
+ num_pages,
write_page
, 0, pages, NULL);
up_read(¤t->mm->mmap_sem);
if (rc < 0)
goto fail;
up_read(¤t->mm->mmap_sem);
if (rc < 0)
goto fail;
@@
-37,12
+36,15
@@
fail:
}
EXPORT_SYMBOL(ceph_get_direct_page_vector);
}
EXPORT_SYMBOL(ceph_get_direct_page_vector);
-void ceph_put_page_vector(struct page **pages, int num_pages)
+void ceph_put_page_vector(struct page **pages, int num_pages
, bool dirty
)
{
int i;
{
int i;
- for (i = 0; i < num_pages; i++)
+ for (i = 0; i < num_pages; i++) {
+ if (dirty)
+ set_page_dirty_lock(pages[i]);
put_page(pages[i]);
put_page(pages[i]);
+ }
kfree(pages);
}
EXPORT_SYMBOL(ceph_put_page_vector);
kfree(pages);
}
EXPORT_SYMBOL(ceph_put_page_vector);