summaryrefslogtreecommitdiffstats
path: root/fs/btrfs/inode.c
diff options
context:
space:
mode:
authorLiu Bo <bo.li.liu@oracle.com>2018-01-10 02:36:25 +0100
committerDavid Sterba <dsterba@suse.com>2018-01-22 16:08:21 +0100
commit7583d8d088ff2c323b1d4f15b191ca2c23d32558 (patch)
treeb43cabc0e98d36504ae3a786202491c48881f1f9 /fs/btrfs/inode.c
parentBtrfs: do not cache rbio pages if using raid6 recover (diff)
downloadlinux-7583d8d088ff2c323b1d4f15b191ca2c23d32558.tar.xz
linux-7583d8d088ff2c323b1d4f15b191ca2c23d32558.zip
Btrfs: raid56: fix race between merge_bio and rbio_orig_end_io
Before rbio_orig_end_io() goes to free rbio, rbio may get merged with more bios from other rbios and rbio->bio_list becomes non-empty, in that case, these newly merged bios don't end properly. Once unlock_stripe() is done, rbio->bio_list will not be updated any more and we can call bio_endio() on all queued bios. It should only happen in error-out cases, the normal path of recover and full stripe write have already set RBIO_RMW_LOCKED_BIT to disable merge before doing IO, so rbio_orig_end_io() called by them doesn't have the above issue. Reported-by: Jérôme Carretero <cJ-ko@zougloub.eu> Signed-off-by: Liu Bo <bo.li.liu@oracle.com> Signed-off-by: David Sterba <dsterba@suse.com>
Diffstat (limited to '')
0 files changed, 0 insertions, 0 deletions