diff options
author | Brian Foster <bfoster@redhat.com> | 2020-03-27 16:29:55 +0100 |
---|---|---|
committer | Darrick J. Wong <darrick.wong@oracle.com> | 2020-03-28 17:40:12 +0100 |
commit | d4bc4c5fd177066b38e3a39ac751399e8dff80cf (patch) | |
tree | 268e7ca4a4531b5039856df51b7d97fef325e2ba /fs/xfs/xfs_inode_item.c | |
parent | xfs: trylock underlying buffer on dquot flush (diff) | |
download | linux-d4bc4c5fd177066b38e3a39ac751399e8dff80cf.tar.xz linux-d4bc4c5fd177066b38e3a39ac751399e8dff80cf.zip |
xfs: return locked status of inode buffer on xfsaild push
If the inode buffer backing a particular inode is locked,
xfs_iflush() returns -EAGAIN and xfs_inode_item_push() skips the
inode. It still returns success to xfsaild, however, which bypasses
the xfsaild backoff heuristic. Update xfs_inode_item_push() to
return locked status if the inode buffer couldn't be locked.
Signed-off-by: Brian Foster <bfoster@redhat.com>
Reviewed-by: Christoph Hellwig <hch@lst.de>
Reviewed-by: Darrick J. Wong <darrick.wong@oracle.com>
Signed-off-by: Darrick J. Wong <darrick.wong@oracle.com>
Diffstat (limited to 'fs/xfs/xfs_inode_item.c')
-rw-r--r-- | fs/xfs/xfs_inode_item.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/fs/xfs/xfs_inode_item.c b/fs/xfs/xfs_inode_item.c index a627cb951dc6..f779cca2346f 100644 --- a/fs/xfs/xfs_inode_item.c +++ b/fs/xfs/xfs_inode_item.c @@ -552,7 +552,8 @@ xfs_inode_item_push( if (!xfs_buf_delwri_queue(bp, buffer_list)) rval = XFS_ITEM_FLUSHING; xfs_buf_relse(bp); - } + } else if (error == -EAGAIN) + rval = XFS_ITEM_LOCKED; spin_lock(&lip->li_ailp->ail_lock); out_unlock: |