2020-02-21 00:42:56

by Ira Weiny

[permalink] [raw]
Subject: [PATCH V4 10/13] fs/xfs: Clean up locking in dax invalidate

From: Ira Weiny <[email protected]>

Define a variable to hold the lock flags to ensure that the correct
locks are returned or released on error.

Signed-off-by: Ira Weiny <[email protected]>
---
fs/xfs/xfs_ioctl.c | 10 ++++++----
1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/fs/xfs/xfs_ioctl.c b/fs/xfs/xfs_ioctl.c
index 498fae2ef9f6..321f7789b667 100644
--- a/fs/xfs/xfs_ioctl.c
+++ b/fs/xfs/xfs_ioctl.c
@@ -1190,7 +1190,7 @@ xfs_ioctl_setattr_dax_invalidate(
int *join_flags)
{
struct inode *inode = VFS_I(ip);
- int error;
+ int error, flags;

*join_flags = 0;

@@ -1205,8 +1205,10 @@ xfs_ioctl_setattr_dax_invalidate(
if (S_ISDIR(inode->i_mode))
return 0;

+ flags = XFS_MMAPLOCK_EXCL | XFS_IOLOCK_EXCL;
+
/* lock, flush and invalidate mapping in preparation for flag change */
- xfs_ilock(ip, XFS_MMAPLOCK_EXCL | XFS_IOLOCK_EXCL);
+ xfs_ilock(ip, flags);

/*
* If there is a mapping in place we must remain in our current state.
@@ -1223,11 +1225,11 @@ xfs_ioctl_setattr_dax_invalidate(
if (error)
goto out_unlock;

- *join_flags = XFS_MMAPLOCK_EXCL | XFS_IOLOCK_EXCL;
+ *join_flags = flags;
return 0;

out_unlock:
- xfs_iunlock(ip, XFS_MMAPLOCK_EXCL | XFS_IOLOCK_EXCL);
+ xfs_iunlock(ip, flags);
return error;

}
--
2.21.0


2020-02-21 17:46:38

by Christoph Hellwig

[permalink] [raw]
Subject: Re: [PATCH V4 10/13] fs/xfs: Clean up locking in dax invalidate

On Thu, Feb 20, 2020 at 04:41:31PM -0800, [email protected] wrote:
> From: Ira Weiny <[email protected]>
>
> Define a variable to hold the lock flags to ensure that the correct
> locks are returned or released on error.

I don't see how this cleans up anything..

2020-02-21 18:06:30

by Ira Weiny

[permalink] [raw]
Subject: Re: [PATCH V4 10/13] fs/xfs: Clean up locking in dax invalidate

On Fri, Feb 21, 2020 at 06:45:22PM +0100, Christoph Hellwig wrote:
> On Thu, Feb 20, 2020 at 04:41:31PM -0800, [email protected] wrote:
> > From: Ira Weiny <[email protected]>
> >
> > Define a variable to hold the lock flags to ensure that the correct
> > locks are returned or released on error.
>
> I don't see how this cleans up anything..

It ensures the correct flags are released in the error path without having to
add the flag in the next patch in 2 places.

Ira