xfs: return locked status of inode buffer on xfsaild push
authorBrian Foster <bfoster@redhat.com>
Fri, 27 Mar 2020 15:29:55 +0000 (08:29 -0700)
committerDarrick J. Wong <darrick.wong@oracle.com>
Sat, 28 Mar 2020 16:40:12 +0000 (09:40 -0700)
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>
fs/xfs/xfs_inode_item.c

index a627cb951dc61b12517e61c8b1eba4d07d0e084e..f779cca2346f393f8f7d075abf17e41faf6b92d6 100644 (file)
@@ -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: