md_make_request: don't touch the bio after calling make_request
authorChris Mason <chris.mason@oracle.com>
Tue, 8 Feb 2011 00:21:48 +0000 (19:21 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Thu, 17 Feb 2011 23:14:55 +0000 (15:14 -0800)
commitc4a0895efdcbc8eb1799c6f749f1b6ae16159fdc
tree4a995ee2ff980945ecc93ac0609acfbd69e72e12
parent2fd59c6a20ef52c2e59b22a1fa7303ea4dfdc464
md_make_request: don't touch the bio after calling make_request

commit e91ece5590b3c728624ab57043fc7a05069c604a upstream.

md_make_request was calling bio_sectors() for part_stat_add
after it was calling the make_request function.  This is
bad because the make_request function can free the bio and
because the bi_size field can change around.

The fix here was suggested by Jens Axboe.  It saves the
sector count before the make_request call.  I hit this
with CONFIG_DEBUG_PAGEALLOC turned on while trying to break
his pretty fusionio card.

Signed-off-by: Chris Mason <chris.mason@oracle.com>
Signed-off-by: NeilBrown <neilb@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/md/md.c