xfs: Fix oops on IO error during xlog_recover_process_iunlinks()
authorJan Kara <jack@suse.cz>
Thu, 15 Mar 2012 09:34:02 +0000 (09:34 +0000)
committerBen Myers <bpm@sgi.com>
Tue, 27 Mar 2012 21:34:10 +0000 (16:34 -0500)
commitd97d32edcd732110758799ae60af725e5110b3dc
treeb49bc097b289d123003695dcd1301cda5f091f4b
parenta66d636385d621e98a915233250356c394a437de
xfs: Fix oops on IO error during xlog_recover_process_iunlinks()

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: Jan Kara <jack@suse.cz>
Reviewed-by: Dave Chinner <dchinner@redhat.com>
Signed-off-by: Ben Myers <bpm@sgi.com>
fs/xfs/xfs_log_recover.c