xfs: flush for older, xfs specific ioctls
837a6e7f5c
("fs: add generic UNRESVSP and ZERO_RANGE ioctl handlers") changed ioctls XFS_IOC_UNRESVSP XFS_IOC_UNRESVSP64 and XFS_IOC_ZERO_RANGE to be generic instead of xfs specific. Because of this change,36f11775da
("xfs: properly serialise fallocate against AIO+DIO") needed adaptation, as 5.4 still uses the xfs specific ioctls. Without this, xfstests xfs/242 and xfs/290 fail. Both of these tests test XFS_IOC_ZERO_RANGE. Fixes:36f11775da
("xfs: properly serialise fallocate against AIO+DIO") Tested-by: Andy Strohman <astroh@amazon.com> Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com> Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
258d01b157
commit
21ab13af8c
|
@ -622,7 +622,6 @@ xfs_ioc_space(
|
|||
error = xfs_break_layouts(inode, &iolock, BREAK_UNMAP);
|
||||
if (error)
|
||||
goto out_unlock;
|
||||
inode_dio_wait(inode);
|
||||
|
||||
switch (bf->l_whence) {
|
||||
case 0: /*SEEK_SET*/
|
||||
|
@ -668,6 +667,31 @@ xfs_ioc_space(
|
|||
goto out_unlock;
|
||||
}
|
||||
|
||||
/*
|
||||
* Must wait for all AIO to complete before we continue as AIO can
|
||||
* change the file size on completion without holding any locks we
|
||||
* currently hold. We must do this first because AIO can update both
|
||||
* the on disk and in memory inode sizes, and the operations that follow
|
||||
* require the in-memory size to be fully up-to-date.
|
||||
*/
|
||||
inode_dio_wait(inode);
|
||||
|
||||
/*
|
||||
* Now that AIO and DIO has drained we can flush and (if necessary)
|
||||
* invalidate the cached range over the first operation we are about to
|
||||
* run. We include zero range here because it starts with a hole punch
|
||||
* over the target range.
|
||||
*/
|
||||
switch (cmd) {
|
||||
case XFS_IOC_ZERO_RANGE:
|
||||
case XFS_IOC_UNRESVSP:
|
||||
case XFS_IOC_UNRESVSP64:
|
||||
error = xfs_flush_unmap_range(ip, bf->l_start, bf->l_len);
|
||||
if (error)
|
||||
goto out_unlock;
|
||||
break;
|
||||
}
|
||||
|
||||
switch (cmd) {
|
||||
case XFS_IOC_ZERO_RANGE:
|
||||
flags |= XFS_PREALLOC_SET;
|
||||
|
|
Loading…
Reference in New Issue