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: Sage Weil <sage@newdream.net>
This commit is contained in:
parent
3612abbd5d
commit
a77d9f7dce
@ -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,
|
||||||
|
Loading…
Reference in New Issue
Block a user