Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 188701
b: refs/heads/master
c: 29065a5
h: refs/heads/master
i:
  188699: 12f9856
v: v3
  • Loading branch information
Yehuda Sadeh authored and Sage Weil committed Feb 11, 2010
1 parent 3050dad commit 0de70cc
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3d497d858ae6e5f23a28783030aecc69074e102d
refs/heads/master: 29065a513aa4c7e4b46b77cbcd25f814a4ca0bfe
18 changes: 16 additions & 2 deletions trunk/fs/ceph/file.c
Original file line number Diff line number Diff line change
Expand Up @@ -409,7 +409,7 @@ static void zero_page_vector_range(int off, int len, struct page **pages)
i++;
}
while (len >= PAGE_CACHE_SIZE) {
dout("zeroing %d %p\n", i, pages[i]);
dout("zeroing %d %p len=%d\n", i, pages[i], len);
zero_user_segment(pages[i], 0, PAGE_CACHE_SIZE);
len -= PAGE_CACHE_SIZE;
i++;
Expand Down Expand Up @@ -542,20 +542,24 @@ static ssize_t ceph_sync_read(struct file *file, char __user *data,
* but it will at least behave sensibly when they are
* in sequence.
*/
filemap_write_and_wait(inode->i_mapping);
} else {
pages = alloc_page_vector(num_pages);
}
if (IS_ERR(pages))
return PTR_ERR(pages);

ret = filemap_write_and_wait(inode->i_mapping);
if (ret < 0)
goto done;

ret = striped_read(inode, off, len, pages, num_pages);

if (ret >= 0 && (file->f_flags & O_DIRECT) == 0)
ret = copy_page_vector_to_user(pages, data, off, ret);
if (ret >= 0)
*poff = off + ret;

done:
if (file->f_flags & O_DIRECT)
put_page_vector(pages, num_pages);
else
Expand Down Expand Up @@ -617,6 +621,16 @@ static ssize_t ceph_sync_write(struct file *file, const char __user *data,
else
pos = *offset;

ret = filemap_write_and_wait_range(inode->i_mapping, pos, pos + left);
if (ret < 0)
return ret;

ret = invalidate_inode_pages2_range(inode->i_mapping,
pos >> PAGE_CACHE_SHIFT,
(pos + left) >> PAGE_CACHE_SHIFT);
if (ret < 0)
dout("invalidate_inode_pages2_range returned %d\n", ret);

flags = CEPH_OSD_FLAG_ORDERSNAP |
CEPH_OSD_FLAG_ONDISK |
CEPH_OSD_FLAG_WRITE;
Expand Down

0 comments on commit 0de70cc

Please sign in to comment.