diff options
author | NeilBrown <neilb@cse.unsw.edu.au> | 2005-09-09 19:23:41 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-09-09 19:39:09 -0400 |
commit | e5dcdd80a60627371f40797426273048630dc8ca (patch) | |
tree | 1621f68394ceaa4da86d89c6da3b93fd306415fc | |
parent | 3ec67ac1a399d576d48b0736096bcce7721fe3cf (diff) |
[PATCH] md: fail IO request to md that require a barrier.
md does not yet support BIO_RW_BARRIER, so be honest about it and fail
(-EOPNOTSUPP) any such requests.
Signed-off-by: Neil Brown <neilb@cse.unsw.edu.au>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
-rw-r--r-- | drivers/md/linear.c | 5 | ||||
-rw-r--r-- | drivers/md/multipath.c | 5 | ||||
-rw-r--r-- | drivers/md/raid0.c | 5 | ||||
-rw-r--r-- | drivers/md/raid1.c | 4 | ||||
-rw-r--r-- | drivers/md/raid10.c | 5 | ||||
-rw-r--r-- | drivers/md/raid5.c | 5 | ||||
-rw-r--r-- | drivers/md/raid6main.c | 5 |
7 files changed, 34 insertions, 0 deletions
diff --git a/drivers/md/linear.c b/drivers/md/linear.c index 8d740013d74d..4991ba543368 100644 --- a/drivers/md/linear.c +++ b/drivers/md/linear.c | |||
@@ -238,6 +238,11 @@ static int linear_make_request (request_queue_t *q, struct bio *bio) | |||
238 | dev_info_t *tmp_dev; | 238 | dev_info_t *tmp_dev; |
239 | sector_t block; | 239 | sector_t block; |
240 | 240 | ||
241 | if (unlikely(bio_barrier(bio))) { | ||
242 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); | ||
243 | return 0; | ||
244 | } | ||
245 | |||
241 | if (bio_data_dir(bio)==WRITE) { | 246 | if (bio_data_dir(bio)==WRITE) { |
242 | disk_stat_inc(mddev->gendisk, writes); | 247 | disk_stat_inc(mddev->gendisk, writes); |
243 | disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); | 248 | disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); |
diff --git a/drivers/md/multipath.c b/drivers/md/multipath.c index 2d2ca7fa0265..286342375fb7 100644 --- a/drivers/md/multipath.c +++ b/drivers/md/multipath.c | |||
@@ -169,6 +169,11 @@ static int multipath_make_request (request_queue_t *q, struct bio * bio) | |||
169 | struct multipath_bh * mp_bh; | 169 | struct multipath_bh * mp_bh; |
170 | struct multipath_info *multipath; | 170 | struct multipath_info *multipath; |
171 | 171 | ||
172 | if (unlikely(bio_barrier(bio))) { | ||
173 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); | ||
174 | return 0; | ||
175 | } | ||
176 | |||
172 | mp_bh = mempool_alloc(conf->pool, GFP_NOIO); | 177 | mp_bh = mempool_alloc(conf->pool, GFP_NOIO); |
173 | 178 | ||
174 | mp_bh->master_bio = bio; | 179 | mp_bh->master_bio = bio; |
diff --git a/drivers/md/raid0.c b/drivers/md/raid0.c index 2120710172c5..f6757259ce7f 100644 --- a/drivers/md/raid0.c +++ b/drivers/md/raid0.c | |||
@@ -404,6 +404,11 @@ static int raid0_make_request (request_queue_t *q, struct bio *bio) | |||
404 | unsigned long chunk; | 404 | unsigned long chunk; |
405 | sector_t block, rsect; | 405 | sector_t block, rsect; |
406 | 406 | ||
407 | if (unlikely(bio_barrier(bio))) { | ||
408 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); | ||
409 | return 0; | ||
410 | } | ||
411 | |||
407 | if (bio_data_dir(bio)==WRITE) { | 412 | if (bio_data_dir(bio)==WRITE) { |
408 | disk_stat_inc(mddev->gendisk, writes); | 413 | disk_stat_inc(mddev->gendisk, writes); |
409 | disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); | 414 | disk_stat_add(mddev->gendisk, write_sectors, bio_sectors(bio)); |
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index 51d9645ed09c..ace41c571aeb 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c | |||
@@ -555,6 +555,10 @@ static int make_request(request_queue_t *q, struct bio * bio) | |||
555 | unsigned long flags; | 555 | unsigned long flags; |
556 | struct bio_list bl; | 556 | struct bio_list bl; |
557 | 557 | ||
558 | if (unlikely(bio_barrier(bio))) { | ||
559 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); | ||
560 | return 0; | ||
561 | } | ||
558 | 562 | ||
559 | /* | 563 | /* |
560 | * Register the new request and wait if the reconstruction | 564 | * Register the new request and wait if the reconstruction |
diff --git a/drivers/md/raid10.c b/drivers/md/raid10.c index 7239079203ec..5e0b333793d5 100644 --- a/drivers/md/raid10.c +++ b/drivers/md/raid10.c | |||
@@ -669,6 +669,11 @@ static int make_request(request_queue_t *q, struct bio * bio) | |||
669 | int i; | 669 | int i; |
670 | int chunk_sects = conf->chunk_mask + 1; | 670 | int chunk_sects = conf->chunk_mask + 1; |
671 | 671 | ||
672 | if (unlikely(bio_barrier(bio))) { | ||
673 | bio_endio(bio, bio->bi_size, -EOPNOTSUPP); | ||
674 | return 0; | ||
675 | } | ||
676 | |||
672 | /* If this request crosses a chunk boundary, we need to | 677 | /* If this request crosses a chunk boundary, we need to |
673 | * split it. This will only happen for 1 PAGE (or less) requests. | 678 | * split it. This will only happen for 1 PAGE (or less) requests. |
674 | */ | 679 | */ |
diff --git a/drivers/md/raid5.c b/drivers/md/raid5.c index 43f231a467d5..ed859e08d600 100644 --- a/drivers/md/raid5.c +++ b/drivers/md/raid5.c | |||
@@ -1411,6 +1411,11 @@ static int make_request (request_queue_t *q, struct bio * bi) | |||
1411 | sector_t logical_sector, last_sector; | 1411 | sector_t logical_sector, last_sector; |
1412 | struct stripe_head *sh; | 1412 | struct stripe_head *sh; |
1413 | 1413 | ||
1414 | if (unlikely(bio_barrier(bi))) { | ||
1415 | bio_endio(bi, bi->bi_size, -EOPNOTSUPP); | ||
1416 | return 0; | ||
1417 | } | ||
1418 | |||
1414 | md_write_start(mddev, bi); | 1419 | md_write_start(mddev, bi); |
1415 | 1420 | ||
1416 | if (bio_data_dir(bi)==WRITE) { | 1421 | if (bio_data_dir(bi)==WRITE) { |
diff --git a/drivers/md/raid6main.c b/drivers/md/raid6main.c index 495dee1d1e83..09cb7272c09f 100644 --- a/drivers/md/raid6main.c +++ b/drivers/md/raid6main.c | |||
@@ -1570,6 +1570,11 @@ static int make_request (request_queue_t *q, struct bio * bi) | |||
1570 | sector_t logical_sector, last_sector; | 1570 | sector_t logical_sector, last_sector; |
1571 | struct stripe_head *sh; | 1571 | struct stripe_head *sh; |
1572 | 1572 | ||
1573 | if (unlikely(bio_barrier(bi))) { | ||
1574 | bio_endio(bi, bi->bi_size, -EOPNOTSUPP); | ||
1575 | return 0; | ||
1576 | } | ||
1577 | |||
1573 | md_write_start(mddev, bi); | 1578 | md_write_start(mddev, bi); |
1574 | 1579 | ||
1575 | if (bio_data_dir(bi)==WRITE) { | 1580 | if (bio_data_dir(bi)==WRITE) { |