xfs: unlock inode when xfs_ioctl_setattr_get_trans can't get transaction
authorDarrick J. Wong <darrick.wong@oracle.com>
Mon, 22 Apr 2019 23:28:34 +0000 (16:28 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Tue, 23 Apr 2019 15:36:23 +0000 (08:36 -0700)
We passed an inode into xfs_ioctl_setattr_get_trans with join_flags
indicating which locks are held on that inode.  If we can't allocate a
transaction then we need to unlock the inode before we bail out, like
all the other error paths do.

Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Brian Foster <bfoster@redhat.com>
fs/xfs/xfs_ioctl.c

index ae615a7..21d6f43 100644 (file)
@@ -1153,7 +1153,7 @@ xfs_ioctl_setattr_get_trans(
 
        error = xfs_trans_alloc(mp, &M_RES(mp)->tr_ichange, 0, 0, 0, &tp);
        if (error)
-               return ERR_PTR(error);
+               goto out_unlock;
 
        xfs_ilock(ip, XFS_ILOCK_EXCL);
        xfs_trans_ijoin(tp, ip, XFS_ILOCK_EXCL | join_flags);