Commit a3f9d1b5 authored by Benjamin Coddington's avatar Benjamin Coddington Committed by Anna Schumaker

pnfs/blocklayout: fix last_write_offset incorrectly set to page boundary

Commit 41963c10 sets the block layout's
last written byte to the offset of the end of the extent rather than the
end of the write which incorrectly updates the inode's size for
partial-page writes.

Fixes: 41963c10 ("pnfs/blocklayout: update last_write_offset atomically with extents")
Signed-off-by: default avatarBenjamin Coddington <bcodding@redhat.com>
Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
Tested-by: default avatarChristoph Hellwig <hch@lst.de>
Cc: stable@vger.kernel.org # 4.8+
Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
parent 3f807e5a
...@@ -344,9 +344,10 @@ static void bl_write_cleanup(struct work_struct *work) ...@@ -344,9 +344,10 @@ static void bl_write_cleanup(struct work_struct *work)
u64 start = hdr->args.offset & (loff_t)PAGE_MASK; u64 start = hdr->args.offset & (loff_t)PAGE_MASK;
u64 end = (hdr->args.offset + hdr->args.count + u64 end = (hdr->args.offset + hdr->args.count +
PAGE_SIZE - 1) & (loff_t)PAGE_MASK; PAGE_SIZE - 1) & (loff_t)PAGE_MASK;
u64 lwb = hdr->args.offset + hdr->args.count;
ext_tree_mark_written(bl, start >> SECTOR_SHIFT, ext_tree_mark_written(bl, start >> SECTOR_SHIFT,
(end - start) >> SECTOR_SHIFT, end); (end - start) >> SECTOR_SHIFT, lwb);
} }
pnfs_ld_write_done(hdr); pnfs_ld_write_done(hdr);
......
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