[pnfs] [PATCH 1/1] SQUASHME: pnfsblock: fixup blksize alignment in bl_setup_layoutcommit
Benny Halevy
bhalevy at panasas.com
Tue Aug 25 14:20:17 EDT 2009
lseg.offset adjustment needs to be added to lseg.length
before rounding it up to the next blksize.
For example:
pnfs_blksize = 4096;
lseg.offset = 2048;
lseg.length = 4096;
To adjust this range to pnfs_blksize boundaries we want
to set lseg.offset = 0 and lseg.length = 8192.
but, before this fix:
arg->lseg.offset &= ~mask; => lseg.offset = 0;
arg->lseg.length += mask; => lseg.length = 8191;
arg->lseg.length &= ~mask; => lseg.length = 4096;
with this fix:
offset = arg->lseg.offset & mask; => offset = 2048;
arg->lseg.offset -= offset; => lseg.offset = 0;
arg->lseg.length += offset + mask; => lseg.length = 10239;
arg->lseg.length &= ~mask; => lseg.length = 8192;
Signed-off-by: Benny Halevy <bhalevy at panasas.com>
---
fs/nfs/blocklayout/blocklayout.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
index 68aabc4..10199a9 100644
--- a/fs/nfs/blocklayout/blocklayout.c
+++ b/fs/nfs/blocklayout/blocklayout.c
@@ -628,8 +628,10 @@ bl_setup_layoutcommit(struct pnfs_layout_type *lo,
/* Need to ensure commit is block-size aligned */
if (nfss->pnfs_blksize) {
u64 mask = nfss->pnfs_blksize - 1;
- arg->lseg.offset &= ~mask;
- arg->lseg.length += mask;
+ u64 offset = arg->lseg.offset & mask;
+
+ arg->lseg.offset -= offset;
+ arg->lseg.length += offset + mask;
arg->lseg.length &= ~mask;
}
return encode_pnfs_block_layoutupdate4(BLK_LO2EXT(lo), arg);
--
1.6.4
More information about the pNFS
mailing list