From: Sage Weil Date: Sat, 11 Sep 2010 17:55:25 +0000 (-0700) Subject: ceph: fix file offset wrapping at 4GB on 32-bit archs X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=a77d9f7dce7600058d56f0670ed29d77abffcde2;p=openwrt%2Fstaging%2Fblogic.git 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 --- diff --git a/fs/ceph/addr.c b/fs/ceph/addr.c index 4cfce1ee31fa..50461b8c23a4 100644 --- a/fs/ceph/addr.c +++ b/fs/ceph/addr.c @@ -766,7 +766,8 @@ get_more_pages: /* ok */ if (locked_pages == 0) { /* prepare async write request */ - offset = page->index << PAGE_CACHE_SHIFT; + offset = (unsigned long long)page->index + << PAGE_CACHE_SHIFT; len = wsize; req = ceph_osdc_new_request(&client->osdc, &ci->i_layout,