diff options
author | Sage Weil <sage@newdream.net> | 2010-11-09 12:43:12 -0800 |
---|---|---|
committer | Sage Weil <sage@newdream.net> | 2010-11-09 12:43:12 -0800 |
commit | b7495fc2ff941db6a118a93ab8d61149e3f4cef8 (patch) | |
tree | 231c339d74760e2fa13e5e6f41c10bc28cea51b3 /fs/ceph/addr.c | |
parent | e98b6fed84d0f0155d7b398e0dfeac74c792f2d0 (diff) | |
download | op-kernel-dev-b7495fc2ff941db6a118a93ab8d61149e3f4cef8.zip op-kernel-dev-b7495fc2ff941db6a118a93ab8d61149e3f4cef8.tar.gz |
ceph: make page alignment explicit in osd interface
We used to infer alignment of IOs within a page based on the file offset,
which assumed they matched. This broke with direct IO that was not aligned
to pages (e.g., 512-byte aligned IO). We were also trusting the alignment
specified in the OSD reply, which could have been adjusted by the server.
Explicitly specify the page alignment when setting up OSD IO requests.
Signed-off-by: Sage Weil <sage@newdream.net>
Diffstat (limited to 'fs/ceph/addr.c')
-rw-r--r-- | fs/ceph/addr.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 51bcc5c..4aa85776 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -204,7 +204,7 @@ static int readpage_nounlock(struct file *filp, struct page *page) err = ceph_osdc_readpages(osdc, ceph_vino(inode), &ci->i_layout, page->index << PAGE_CACHE_SHIFT, &len, ci->i_truncate_seq, ci->i_truncate_size, - &page, 1); + &page, 1, 0); if (err == -ENOENT) err = 0; if (err < 0) { @@ -287,7 +287,7 @@ static int ceph_readpages(struct file *file, struct address_space *mapping, rc = ceph_osdc_readpages(osdc, ceph_vino(inode), &ci->i_layout, offset, &len, ci->i_truncate_seq, ci->i_truncate_size, - pages, nr_pages); + pages, nr_pages, 0); if (rc == -ENOENT) rc = 0; if (rc < 0) @@ -782,7 +782,7 @@ get_more_pages: snapc, do_sync, ci->i_truncate_seq, ci->i_truncate_size, - &inode->i_mtime, true, 1); + &inode->i_mtime, true, 1, 0); max_pages = req->r_num_pages; alloc_page_vec(fsc, req); |