mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
md: multipath: don't hardcopy bio in .make_request path
Inside multipath_make_request(), multipath maps the incoming bio into low level device's bio, but it is totally wrong to copy the bio into mapped bio via '*mapped_bio = *bio'. For example, .__bi_remaining is kept in the copy, especially if the incoming bio is chained to via bio splitting, so .bi_end_io can't be called for the mapped bio at all in the completing path in this kind of situation. This patch fixes the issue by using clone style. Cc: [email protected] (v3.14+) Reported-and-tested-by: Andrea Righi <[email protected]> Signed-off-by: Ming Lei <[email protected]> Signed-off-by: Shaohua Li <[email protected]>
This commit is contained in:
parent
fb3229d5cd
commit
fafcde3ac1
1 changed files with 3 additions and 1 deletions
|
|
@ -129,7 +129,9 @@ static void multipath_make_request(struct mddev *mddev, struct bio * bio)
|
|||
}
|
||||
multipath = conf->multipaths + mp_bh->path;
|
||||
|
||||
mp_bh->bio = *bio;
|
||||
bio_init(&mp_bh->bio);
|
||||
__bio_clone_fast(&mp_bh->bio, bio);
|
||||
|
||||
mp_bh->bio.bi_iter.bi_sector += multipath->rdev->data_offset;
|
||||
mp_bh->bio.bi_bdev = multipath->rdev->bdev;
|
||||
mp_bh->bio.bi_rw |= REQ_FAILFAST_TRANSPORT;
|
||||
|
|
|
|||
Loading…
Reference in a new issue