1
0
Fork 0

md/raid1: skip data copy for behind io for discard request

discard request doesn't have data attached, so it's meaningless to
allocate memory and copy from original bio for behind IO. And the copy
is bogus because bio_copy_data_partial can't handle discard request.

We don't support writesame/writezeros request so far.

Reviewed-by: Ming Lei <tom.leiming@gmail.com>
Signed-off-by: Shaohua Li <shli@fb.com>
hifive-unleashed-5.1
Shaohua Li 2017-03-24 15:20:47 -07:00
parent f45958756f
commit 41743c1f04
1 changed files with 5 additions and 1 deletions

View File

@ -1102,6 +1102,10 @@ static struct bio *alloc_behind_master_bio(struct r1bio *r1_bio,
if (!behind_bio)
goto fail;
/* discard op, we don't support writezero/writesame yet */
if (!bio_has_data(bio))
goto skip_copy;
while (i < vcnt && size) {
struct page *page;
int len = min_t(int, PAGE_SIZE, size);
@ -1118,7 +1122,7 @@ static struct bio *alloc_behind_master_bio(struct r1bio *r1_bio,
bio_copy_data_partial(behind_bio, bio, offset,
behind_bio->bi_iter.bi_size);
skip_copy:
r1_bio->behind_master_bio = behind_bio;;
set_bit(R1BIO_BehindIO, &r1_bio->state);