• Brian Foster's avatar
    xfs: drain the buf delwri queue before xfsaild idles · f376b45e
    Brian Foster authored
    xfsaild is racy with respect to transaction abort and shutdown in
    that the task can idle or exit with an empty AIL but buffers still
    on the delwri queue. This was partly addressed by cancelling the
    delwri queue before the task exits to prevent memory leaks, but it's
    also possible for xfsaild to empty and idle with buffers on the
    delwri queue. For example, a transaction that pins a buffer that
    also happens to sit on the AIL delwri queue will explicitly remove
    the associated log item from the AIL if the transaction aborts. The
    side effect of this is an unmount hang in xfs_wait_buftarg() as the
    associated buffers remain held by the delwri queue indefinitely.
    This is reproduced on repeated runs of generic/531 with an fs format
    (-mrmapbt=1 -bsize=1k) that happens to also reproduce transaction
    aborts.
    
    Update xfsaild to not idle until both the AIL and associated delwri
    queue are empty and update the push code to continue delwri queue
    submission attempts even when the AIL is empty. This allows the AIL
    to eventually release aborted buffers stranded on the delwri queue
    when they are unlocked by the associated transaction. This should
    have no significant effect on normal runtime behavior because the
    xfsaild currently idles only when the AIL is empty and in practice
    the AIL is rarely empty with a populated delwri queue. The items
    must be AIL resident to land in the queue in the first place and
    generally aren't removed until writeback completes.
    
    Note that the pre-existing delwri queue cancel logic in the exit
    path is retained because task stop is external, could technically
    come at any point, and xfsaild is still responsible to release its
    buffer references before it exits.
    Signed-off-by: default avatarBrian Foster <bfoster@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    Signed-off-by: default avatarDarrick J. Wong <darrick.wong@oracle.com>
    f376b45e
xfs_trans_ail.c 23.9 KB