• Dave Chinner's avatar
    xfs: log head and tail aren't reliable during shutdown · 2562c322
    Dave Chinner authored
    I'm seeing assert failures from xlog_space_left() after a shutdown
    has begun that look like:
    
    XFS (dm-0): log I/O error -5
    XFS (dm-0): xfs_do_force_shutdown(0x2) called from line 1338 of file fs/xfs/xfs_log.c. Return address = xlog_ioend_work+0x64/0xc0
    XFS (dm-0): Log I/O Error Detected.
    XFS (dm-0): Shutting down filesystem. Please unmount the filesystem and rectify the problem(s)
    XFS (dm-0): xlog_space_left: head behind tail
    XFS (dm-0):   tail_cycle = 6, tail_bytes = 2706944
    XFS (dm-0):   GH   cycle = 6, GH   bytes = 1633867
    XFS: Assertion failed: 0, file: fs/xfs/xfs_log.c, line: 1310
    ------------[ cut here ]------------
    Call Trace:
     xlog_space_left+0xc3/0x110
     xlog_grant_push_threshold+0x3f/0xf0
     xlog_grant_push_ail+0x12/0x40
     xfs_log_reserve+0xd2/0x270
     ? __might_sleep+0x4b/0x80
     xfs_trans_reserve+0x18b/0x260
    .....
    
    There are two things here. Firstly, after a shutdown, the log head
    and tail can be out of whack as things abort and release (or don't
    release) resources, so checking them for sanity doesn't make much
    sense. Secondly, xfs_log_reserve() can race with shutdown and so it
    can still fail like this even though it has already checked for a
    log shutdown before calling xlog_grant_push_ail().
    
    So, before ASSERT failing in xlog_space_left(), make sure we haven't
    already shut down....
    Signed-off-by: default avatarDave Chinner <dchinner@redhat.com>
    Reviewed-by: default avatarChristoph Hellwig <hch@lst.de>
    Reviewed-by: default avatarDarrick J. Wong <djwong@kernel.org>
    Signed-off-by: default avatarDarrick J. Wong <djwong@kernel.org>
    2562c322
xfs_log.c 112 KB