summaryrefslogtreecommitdiffstats
path: root/fs/nfs/blocklayout
diff options
context:
space:
mode:
authorBenjamin Coddington <bcodding@redhat.com>2016-10-11 15:53:21 -0400
committerAnna Schumaker <Anna.Schumaker@Netapp.com>2016-10-13 16:42:53 -0400
commita3f9d1b58a9ffce011ef4f074bfa36ae30eade28 (patch)
tree3b835438b0bee423b97c5129de3d82da296aa25c /fs/nfs/blocklayout
parent3f807e5ae5597bd65a6fff684083e8eaa21f3fa7 (diff)
downloadlinux-stable-a3f9d1b58a9ffce011ef4f074bfa36ae30eade28.tar.gz
linux-stable-a3f9d1b58a9ffce011ef4f074bfa36ae30eade28.tar.bz2
linux-stable-a3f9d1b58a9ffce011ef4f074bfa36ae30eade28.zip
pnfs/blocklayout: fix last_write_offset incorrectly set to page boundary
Commit 41963c10c47a35185e68cb9049f7a3493c94d2d7 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: 41963c10c47a ("pnfs/blocklayout: update last_write_offset atomically with extents") Signed-off-by: Benjamin Coddington <bcodding@redhat.com> Reviewed-by: Christoph Hellwig <hch@lst.de> Tested-by: Christoph Hellwig <hch@lst.de> Cc: stable@vger.kernel.org # 4.8+ Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
Diffstat (limited to 'fs/nfs/blocklayout')
-rw-r--r--fs/nfs/blocklayout/blocklayout.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/nfs/blocklayout/blocklayout.c b/fs/nfs/blocklayout/blocklayout.c
index 217847679f0e..2905479f214a 100644
--- a/fs/nfs/blocklayout/blocklayout.c
+++ b/fs/nfs/blocklayout/blocklayout.c
@@ -344,9 +344,10 @@ static void bl_write_cleanup(struct work_struct *work)
u64 start = hdr->args.offset & (loff_t)PAGE_MASK;
u64 end = (hdr->args.offset + hdr->args.count +
PAGE_SIZE - 1) & (loff_t)PAGE_MASK;
+ u64 lwb = hdr->args.offset + hdr->args.count;
ext_tree_mark_written(bl, start >> SECTOR_SHIFT,
- (end - start) >> SECTOR_SHIFT, end);
+ (end - start) >> SECTOR_SHIFT, lwb);
}
pnfs_ld_write_done(hdr);