From: Shaohua Li Date: Fri, 24 Mar 2017 22:20:47 +0000 (-0700) Subject: md/raid1: skip data copy for behind io for discard request X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=41743c1f046a14c6749fd1808bb3793c08e47a3e;p=GitHub%2Fmoto-9609%2Fandroid_kernel_motorola_exynos9610.git 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 Signed-off-by: Shaohua Li --- diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c index c6a671f13bc0..b7d9651286d4 100644 --- a/drivers/md/raid1.c +++ b/drivers/md/raid1.c @@ -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);