aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2016-06-20 19:56:26 -0400
committerDave Chinner <david@fromorbit.com>2016-06-20 19:56:26 -0400
commit7bb41db3ea160ea55cc46af07e45f7cb1e2968ba (patch)
tree8e3879d8be2d25ff3d70246d0ae866d46f2ccd08
parent459f0fbc2a827da37bbfaf3cae8da4ad8884da12 (diff)
xfs: handle 64-bit length in xfs_iozero
We'll want to use this code for large offsets now that we're skipping holes and unwritten extents efficiently. Also rename it to xfs_zero_range to be a bit more descriptive, and tell the caller if we actually did any zeroing. Signed-off-by: Christoph Hellwig <hch@lst.de> Reviewed-by: Dave Chinner <dchinner@redhat.com> Signed-off-by: Dave Chinner <david@fromorbit.com>
-rw-r--r--fs/xfs/xfs_file.c11
-rw-r--r--fs/xfs/xfs_inode.h3
2 files changed, 8 insertions, 6 deletions
diff --git a/fs/xfs/xfs_file.c b/fs/xfs/xfs_file.c
index 090a90f0d02c..294e5f423028 100644
--- a/fs/xfs/xfs_file.c
+++ b/fs/xfs/xfs_file.c
@@ -85,10 +85,11 @@ xfs_rw_ilock_demote(
85 * Holes and unwritten extents will be left as-is as they already are zeroed. 85 * Holes and unwritten extents will be left as-is as they already are zeroed.
86 */ 86 */
87int 87int
88xfs_iozero( 88xfs_zero_range(
89 struct xfs_inode *ip, 89 struct xfs_inode *ip,
90 loff_t pos, 90 xfs_off_t pos,
91 size_t count) 91 xfs_off_t count,
92 bool *did_zero)
92{ 93{
93 return iomap_zero_range(VFS_I(ip), pos, count, NULL, &xfs_iomap_ops); 94 return iomap_zero_range(VFS_I(ip), pos, count, NULL, &xfs_iomap_ops);
94} 95}
@@ -419,7 +420,7 @@ xfs_zero_last_block(
419 if (isize + zero_len > offset) 420 if (isize + zero_len > offset)
420 zero_len = offset - isize; 421 zero_len = offset - isize;
421 *did_zeroing = true; 422 *did_zeroing = true;
422 return xfs_iozero(ip, isize, zero_len); 423 return xfs_zero_range(ip, isize, zero_len, NULL);
423} 424}
424 425
425/* 426/*
@@ -518,7 +519,7 @@ xfs_zero_eof(
518 if ((zero_off + zero_len) > offset) 519 if ((zero_off + zero_len) > offset)
519 zero_len = offset - zero_off; 520 zero_len = offset - zero_off;
520 521
521 error = xfs_iozero(ip, zero_off, zero_len); 522 error = xfs_zero_range(ip, zero_off, zero_len, NULL);
522 if (error) 523 if (error)
523 return error; 524 return error;
524 525
diff --git a/fs/xfs/xfs_inode.h b/fs/xfs/xfs_inode.h
index e52d7c7aeb5b..dbb0bcfc7d8f 100644
--- a/fs/xfs/xfs_inode.h
+++ b/fs/xfs/xfs_inode.h
@@ -434,7 +434,8 @@ int xfs_update_prealloc_flags(struct xfs_inode *ip,
434 enum xfs_prealloc_flags flags); 434 enum xfs_prealloc_flags flags);
435int xfs_zero_eof(struct xfs_inode *ip, xfs_off_t offset, 435int xfs_zero_eof(struct xfs_inode *ip, xfs_off_t offset,
436 xfs_fsize_t isize, bool *did_zeroing); 436 xfs_fsize_t isize, bool *did_zeroing);
437int xfs_iozero(struct xfs_inode *ip, loff_t pos, size_t count); 437int xfs_zero_range(struct xfs_inode *ip, xfs_off_t pos, xfs_off_t count,
438 bool *did_zero);
438loff_t __xfs_seek_hole_data(struct inode *inode, loff_t start, 439loff_t __xfs_seek_hole_data(struct inode *inode, loff_t start,
439 loff_t eof, int whence); 440 loff_t eof, int whence);
440 441