• Jan Kara's avatar
    xfs: Fix oops on IO error during xlog_recover_process_iunlinks() · d97d32ed
    Jan Kara authored
    When an IO error happens during inode deletion run from
    xlog_recover_process_iunlinks() filesystem gets shutdown. Thus any subsequent
    attempt to read buffers fails. Code in xlog_recover_process_iunlinks() does not
    count with the fact that read of a buffer which was read a while ago can
    really fail which results in the oops on
      agi = XFS_BUF_TO_AGI(agibp);
    
    Fix the problem by cleaning up the buffer handling in
    xlog_recover_process_iunlinks() as suggested by Dave Chinner. We release buffer
    lock but keep buffer reference to AG buffer. That is enough for buffer to stay
    pinned in memory and we don't have to call xfs_read_agi() all the time.
    
    CC: stable@kernel.org
    Signed-off-by: default avatarJan Kara <jack@suse.cz>
    Reviewed-by: default avatarDave Chinner <dchinner@redhat.com>
    Signed-off-by: default avatarBen Myers <bpm@sgi.com>
    d97d32ed
xfs_log_recover.c 104 KB