mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 12:44:11 +08:00
md: raid-1/10: fix RW bits manipulation
Recently Jens has changed bio_rw_flagged() logic by following
commit 1f98a13f62
. Now it returns
bool instead of int. This broke raid1/raid10 RW bits manipulation logic.
One of visible result is BUG_ON triggering due to empty barrier
here scsi_lib.c:1108 scsi_setup_fs_cmnd()
Signed-off-by: Dmitry Monakhov <dmonakhov@openvz.org>
Signed-off-by: NeilBrown <neilb@suse.de>
This commit is contained in:
parent
f28f4e2728
commit
1ef04fefe2
@ -854,7 +854,7 @@ static int make_request(struct request_queue *q, struct bio * bio)
|
||||
read_bio->bi_sector = r1_bio->sector + mirror->rdev->data_offset;
|
||||
read_bio->bi_bdev = mirror->rdev->bdev;
|
||||
read_bio->bi_end_io = raid1_end_read_request;
|
||||
read_bio->bi_rw = READ | do_sync;
|
||||
read_bio->bi_rw = READ | (do_sync << BIO_RW_SYNCIO);
|
||||
read_bio->bi_private = r1_bio;
|
||||
|
||||
generic_make_request(read_bio);
|
||||
@ -946,7 +946,8 @@ static int make_request(struct request_queue *q, struct bio * bio)
|
||||
mbio->bi_sector = r1_bio->sector + conf->mirrors[i].rdev->data_offset;
|
||||
mbio->bi_bdev = conf->mirrors[i].rdev->bdev;
|
||||
mbio->bi_end_io = raid1_end_write_request;
|
||||
mbio->bi_rw = WRITE | do_barriers | do_sync;
|
||||
mbio->bi_rw = WRITE | (do_barriers << BIO_RW_BARRIER) |
|
||||
(do_sync << BIO_RW_SYNCIO);
|
||||
mbio->bi_private = r1_bio;
|
||||
|
||||
if (behind_pages) {
|
||||
@ -1626,7 +1627,8 @@ static void raid1d(mddev_t *mddev)
|
||||
conf->mirrors[i].rdev->data_offset;
|
||||
bio->bi_bdev = conf->mirrors[i].rdev->bdev;
|
||||
bio->bi_end_io = raid1_end_write_request;
|
||||
bio->bi_rw = WRITE | do_sync;
|
||||
bio->bi_rw = WRITE |
|
||||
(do_sync << BIO_RW_SYNCIO);
|
||||
bio->bi_private = r1_bio;
|
||||
r1_bio->bios[i] = bio;
|
||||
generic_make_request(bio);
|
||||
@ -1675,7 +1677,7 @@ static void raid1d(mddev_t *mddev)
|
||||
bio->bi_sector = r1_bio->sector + rdev->data_offset;
|
||||
bio->bi_bdev = rdev->bdev;
|
||||
bio->bi_end_io = raid1_end_read_request;
|
||||
bio->bi_rw = READ | do_sync;
|
||||
bio->bi_rw = READ | (do_sync << BIO_RW_SYNCIO);
|
||||
bio->bi_private = r1_bio;
|
||||
unplug = 1;
|
||||
generic_make_request(bio);
|
||||
|
@ -884,7 +884,7 @@ static int make_request(struct request_queue *q, struct bio * bio)
|
||||
mirror->rdev->data_offset;
|
||||
read_bio->bi_bdev = mirror->rdev->bdev;
|
||||
read_bio->bi_end_io = raid10_end_read_request;
|
||||
read_bio->bi_rw = READ | do_sync;
|
||||
read_bio->bi_rw = READ | (do_sync << BIO_RW_SYNCIO);
|
||||
read_bio->bi_private = r10_bio;
|
||||
|
||||
generic_make_request(read_bio);
|
||||
@ -952,7 +952,7 @@ static int make_request(struct request_queue *q, struct bio * bio)
|
||||
conf->mirrors[d].rdev->data_offset;
|
||||
mbio->bi_bdev = conf->mirrors[d].rdev->bdev;
|
||||
mbio->bi_end_io = raid10_end_write_request;
|
||||
mbio->bi_rw = WRITE | do_sync;
|
||||
mbio->bi_rw = WRITE | (do_sync << BIO_RW_SYNCIO);
|
||||
mbio->bi_private = r10_bio;
|
||||
|
||||
atomic_inc(&r10_bio->remaining);
|
||||
@ -1625,7 +1625,7 @@ static void raid10d(mddev_t *mddev)
|
||||
bio->bi_sector = r10_bio->devs[r10_bio->read_slot].addr
|
||||
+ rdev->data_offset;
|
||||
bio->bi_bdev = rdev->bdev;
|
||||
bio->bi_rw = READ | do_sync;
|
||||
bio->bi_rw = READ | (do_sync << BIO_RW_SYNCIO);
|
||||
bio->bi_private = r10_bio;
|
||||
bio->bi_end_io = raid10_end_read_request;
|
||||
unplug = 1;
|
||||
|
Loading…
Reference in New Issue
Block a user