On Thu, Jan 28, 2021 at 09:53:45AM +0000, Christoph Hellwig wrote: > On Wed, Jan 27, 2021 at 10:01:55PM -0800, Darrick J. Wong wrote: > > From: Darrick J. Wong <djwong@xxxxxxxxxx> > > > > The two remaining callers of xfs_trans_reserve_quota_nblks are in the > > reflink code. These conversions aren't as uniform as the previous > > conversions, so call that out in a separate patch. > > > > Signed-off-by: Darrick J. Wong <djwong@xxxxxxxxxx> > > --- > > fs/xfs/xfs_reflink.c | 58 +++++++++++++++++++++----------------------------- > > 1 file changed, 24 insertions(+), 34 deletions(-) > > > > > > diff --git a/fs/xfs/xfs_reflink.c b/fs/xfs/xfs_reflink.c > > index 0778b5810c26..ded86cc4764c 100644 > > --- a/fs/xfs/xfs_reflink.c > > +++ b/fs/xfs/xfs_reflink.c > > @@ -376,16 +376,15 @@ xfs_reflink_allocate_cow( > > resblks = XFS_DIOSTRAT_SPACE_RES(mp, resaligned); > > > > xfs_iunlock(ip, *lockmode); > > > > + error = xfs_trans_alloc_inode(ip, &M_RES(mp)->tr_write, resblks, 0, > > + false, &tp); > > + if (error) { > > + /* This function must return with ILOCK_EXCL held. */ > > + *lockmode = XFS_ILOCK_EXCL; > > + xfs_ilock(ip, *lockmode); > > return error; > > + } > > The only thing that the only caller of xfs_reflink_allocate_cow does > on error is to immediately release the lock. So I think we are better > off changing the calling convention instead of relocking here. Ok, will do. --D