Commit a77d9f7d authored by Sage Weil's avatar Sage Weil

ceph: fix file offset wrapping at 4GB on 32-bit archs

Cast the value before shifting so that we don't run out of bits with a
32-bit unsigned long.  This fixes wrapping of high file offsets into the
low 4GB of a file on disk, and the subsequent data corruption for large
files.
Signed-off-by: default avatarSage Weil <sage@newdream.net>
parent 3612abbd
...@@ -766,7 +766,8 @@ static int ceph_writepages_start(struct address_space *mapping, ...@@ -766,7 +766,8 @@ static int ceph_writepages_start(struct address_space *mapping,
/* ok */ /* ok */
if (locked_pages == 0) { if (locked_pages == 0) {
/* prepare async write request */ /* prepare async write request */
offset = page->index << PAGE_CACHE_SHIFT; offset = (unsigned long long)page->index
<< PAGE_CACHE_SHIFT;
len = wsize; len = wsize;
req = ceph_osdc_new_request(&client->osdc, req = ceph_osdc_new_request(&client->osdc,
&ci->i_layout, &ci->i_layout,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment