diff options
Diffstat (limited to 'block/bio.c')
-rw-r--r-- | block/bio.c | 21 |
1 files changed, 11 insertions, 10 deletions
diff --git a/block/bio.c b/block/bio.c index f39477538fef..aa7354088008 100644 --- a/block/bio.c +++ b/block/bio.c | |||
@@ -667,18 +667,19 @@ struct bio *bio_clone_bioset(struct bio *bio_src, gfp_t gfp_mask, | |||
667 | bio->bi_iter.bi_sector = bio_src->bi_iter.bi_sector; | 667 | bio->bi_iter.bi_sector = bio_src->bi_iter.bi_sector; |
668 | bio->bi_iter.bi_size = bio_src->bi_iter.bi_size; | 668 | bio->bi_iter.bi_size = bio_src->bi_iter.bi_size; |
669 | 669 | ||
670 | if (bio_op(bio) == REQ_OP_DISCARD) | 670 | switch (bio_op(bio)) { |
671 | goto integrity_clone; | 671 | case REQ_OP_DISCARD: |
672 | 672 | case REQ_OP_SECURE_ERASE: | |
673 | if (bio_op(bio) == REQ_OP_WRITE_SAME) { | 673 | break; |
674 | case REQ_OP_WRITE_SAME: | ||
674 | bio->bi_io_vec[bio->bi_vcnt++] = bio_src->bi_io_vec[0]; | 675 | bio->bi_io_vec[bio->bi_vcnt++] = bio_src->bi_io_vec[0]; |
675 | goto integrity_clone; | 676 | break; |
677 | default: | ||
678 | bio_for_each_segment(bv, bio_src, iter) | ||
679 | bio->bi_io_vec[bio->bi_vcnt++] = bv; | ||
680 | break; | ||
676 | } | 681 | } |
677 | 682 | ||
678 | bio_for_each_segment(bv, bio_src, iter) | ||
679 | bio->bi_io_vec[bio->bi_vcnt++] = bv; | ||
680 | |||
681 | integrity_clone: | ||
682 | if (bio_integrity(bio_src)) { | 683 | if (bio_integrity(bio_src)) { |
683 | int ret; | 684 | int ret; |
684 | 685 | ||
@@ -1788,7 +1789,7 @@ struct bio *bio_split(struct bio *bio, int sectors, | |||
1788 | * Discards need a mutable bio_vec to accommodate the payload | 1789 | * Discards need a mutable bio_vec to accommodate the payload |
1789 | * required by the DSM TRIM and UNMAP commands. | 1790 | * required by the DSM TRIM and UNMAP commands. |
1790 | */ | 1791 | */ |
1791 | if (bio_op(bio) == REQ_OP_DISCARD) | 1792 | if (bio_op(bio) == REQ_OP_DISCARD || bio_op(bio) == REQ_OP_SECURE_ERASE) |
1792 | split = bio_clone_bioset(bio, gfp, bs); | 1793 | split = bio_clone_bioset(bio, gfp, bs); |
1793 | else | 1794 | else |
1794 | split = bio_clone_fast(bio, gfp, bs); | 1795 | split = bio_clone_fast(bio, gfp, bs); |