diff options
author | Jan Kara <jack@suse.cz> | 2012-03-15 09:34:02 +0000 |
---|---|---|
committer | Ben Myers <bpm@sgi.com> | 2012-03-27 16:34:10 -0500 |
commit | d97d32edcd732110758799ae60af725e5110b3dc (patch) | |
tree | b49bc097b289d123003695dcd1301cda5f091f4b /mm/memory.c | |
parent | a66d636385d621e98a915233250356c394a437de (diff) | |
download | op-kernel-dev-d97d32edcd732110758799ae60af725e5110b3dc.zip op-kernel-dev-d97d32edcd732110758799ae60af725e5110b3dc.tar.gz |
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>
Diffstat (limited to 'mm/memory.c')
0 files changed, 0 insertions, 0 deletions