diff options
| -rw-r--r-- | block/bio.c | 2 | ||||
| -rw-r--r-- | block/blk-throttle.c | 8 | ||||
| -rw-r--r-- | include/linux/bio.h | 2 | ||||
| -rw-r--r-- | include/linux/blk_types.h | 9 |
4 files changed, 9 insertions, 12 deletions
diff --git a/block/bio.c b/block/bio.c index 8bfdea58159b..9ef6cf3addb3 100644 --- a/block/bio.c +++ b/block/bio.c | |||
| @@ -599,6 +599,8 @@ void __bio_clone_fast(struct bio *bio, struct bio *bio_src) | |||
| 599 | bio->bi_disk = bio_src->bi_disk; | 599 | bio->bi_disk = bio_src->bi_disk; |
| 600 | bio->bi_partno = bio_src->bi_partno; | 600 | bio->bi_partno = bio_src->bi_partno; |
| 601 | bio_set_flag(bio, BIO_CLONED); | 601 | bio_set_flag(bio, BIO_CLONED); |
| 602 | if (bio_flagged(bio_src, BIO_THROTTLED)) | ||
| 603 | bio_set_flag(bio, BIO_THROTTLED); | ||
| 602 | bio->bi_opf = bio_src->bi_opf; | 604 | bio->bi_opf = bio_src->bi_opf; |
| 603 | bio->bi_write_hint = bio_src->bi_write_hint; | 605 | bio->bi_write_hint = bio_src->bi_write_hint; |
| 604 | bio->bi_iter = bio_src->bi_iter; | 606 | bio->bi_iter = bio_src->bi_iter; |
diff --git a/block/blk-throttle.c b/block/blk-throttle.c index 825bc29767e6..d19f416d6101 100644 --- a/block/blk-throttle.c +++ b/block/blk-throttle.c | |||
| @@ -2226,13 +2226,7 @@ again: | |||
| 2226 | out_unlock: | 2226 | out_unlock: |
| 2227 | spin_unlock_irq(q->queue_lock); | 2227 | spin_unlock_irq(q->queue_lock); |
| 2228 | out: | 2228 | out: |
| 2229 | /* | 2229 | bio_set_flag(bio, BIO_THROTTLED); |
| 2230 | * As multiple blk-throtls may stack in the same issue path, we | ||
| 2231 | * don't want bios to leave with the flag set. Clear the flag if | ||
| 2232 | * being issued. | ||
| 2233 | */ | ||
| 2234 | if (!throttled) | ||
| 2235 | bio_clear_flag(bio, BIO_THROTTLED); | ||
| 2236 | 2230 | ||
| 2237 | #ifdef CONFIG_BLK_DEV_THROTTLING_LOW | 2231 | #ifdef CONFIG_BLK_DEV_THROTTLING_LOW |
| 2238 | if (throttled || !td->track_bio_latency) | 2232 | if (throttled || !td->track_bio_latency) |
diff --git a/include/linux/bio.h b/include/linux/bio.h index 82f0c8fd7be8..23d29b39f71e 100644 --- a/include/linux/bio.h +++ b/include/linux/bio.h | |||
| @@ -492,6 +492,8 @@ extern unsigned int bvec_nr_vecs(unsigned short idx); | |||
| 492 | 492 | ||
| 493 | #define bio_set_dev(bio, bdev) \ | 493 | #define bio_set_dev(bio, bdev) \ |
| 494 | do { \ | 494 | do { \ |
| 495 | if ((bio)->bi_disk != (bdev)->bd_disk) \ | ||
| 496 | bio_clear_flag(bio, BIO_THROTTLED);\ | ||
| 495 | (bio)->bi_disk = (bdev)->bd_disk; \ | 497 | (bio)->bi_disk = (bdev)->bd_disk; \ |
| 496 | (bio)->bi_partno = (bdev)->bd_partno; \ | 498 | (bio)->bi_partno = (bdev)->bd_partno; \ |
| 497 | } while (0) | 499 | } while (0) |
diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index a1e628e032da..9e7d8bd776d2 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h | |||
| @@ -50,8 +50,6 @@ struct blk_issue_stat { | |||
| 50 | struct bio { | 50 | struct bio { |
| 51 | struct bio *bi_next; /* request queue link */ | 51 | struct bio *bi_next; /* request queue link */ |
| 52 | struct gendisk *bi_disk; | 52 | struct gendisk *bi_disk; |
| 53 | u8 bi_partno; | ||
| 54 | blk_status_t bi_status; | ||
| 55 | unsigned int bi_opf; /* bottom bits req flags, | 53 | unsigned int bi_opf; /* bottom bits req flags, |
| 56 | * top bits REQ_OP. Use | 54 | * top bits REQ_OP. Use |
| 57 | * accessors. | 55 | * accessors. |
| @@ -59,8 +57,8 @@ struct bio { | |||
| 59 | unsigned short bi_flags; /* status, etc and bvec pool number */ | 57 | unsigned short bi_flags; /* status, etc and bvec pool number */ |
| 60 | unsigned short bi_ioprio; | 58 | unsigned short bi_ioprio; |
| 61 | unsigned short bi_write_hint; | 59 | unsigned short bi_write_hint; |
| 62 | 60 | blk_status_t bi_status; | |
| 63 | struct bvec_iter bi_iter; | 61 | u8 bi_partno; |
| 64 | 62 | ||
| 65 | /* Number of segments in this BIO after | 63 | /* Number of segments in this BIO after |
| 66 | * physical address coalescing is performed. | 64 | * physical address coalescing is performed. |
| @@ -74,8 +72,9 @@ struct bio { | |||
| 74 | unsigned int bi_seg_front_size; | 72 | unsigned int bi_seg_front_size; |
| 75 | unsigned int bi_seg_back_size; | 73 | unsigned int bi_seg_back_size; |
| 76 | 74 | ||
| 77 | atomic_t __bi_remaining; | 75 | struct bvec_iter bi_iter; |
| 78 | 76 | ||
| 77 | atomic_t __bi_remaining; | ||
| 79 | bio_end_io_t *bi_end_io; | 78 | bio_end_io_t *bi_end_io; |
| 80 | 79 | ||
| 81 | void *bi_private; | 80 | void *bi_private; |
