lkml.org 
[lkml]   [2020]   [Jan]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH V2 11/12] fs/xfs: Clean up locking in dax invalidate
    Date
    From: Ira Weiny <ira.weiny@intel.com>

    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 <ira.weiny@intel.com>
    ---
    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 1ab0906c6c7f..9a35bf83eaa1 100644
    --- a/fs/xfs/xfs_ioctl.c
    +++ b/fs/xfs/xfs_ioctl.c
    @@ -1176,7 +1176,7 @@ xfs_ioctl_setattr_dax_invalidate(
    int *join_flags)
    {
    struct inode *inode = VFS_I(ip);
    - int error;
    + int error, flags;

    *join_flags = 0;

    @@ -1191,8 +1191,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 ((fa->fsx_xflags & FS_XFLAG_DAX) == FS_XFLAG_DAX &&
    !xfs_inode_supports_dax(ip)) {
    @@ -1215,11 +1217,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
    \
     
     \ /
      Last update: 2020-01-10 20:30    [W:4.394 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site