Commit 41743c1f authored by Shaohua Li's avatar Shaohua Li

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: default avatarMing Lei <tom.leiming@gmail.com>
Signed-off-by: default avatarShaohua Li <shli@fb.com>
parent f4595875
...@@ -1102,6 +1102,10 @@ static struct bio *alloc_behind_master_bio(struct r1bio *r1_bio, ...@@ -1102,6 +1102,10 @@ static struct bio *alloc_behind_master_bio(struct r1bio *r1_bio,
if (!behind_bio) if (!behind_bio)
goto fail; goto fail;
/* discard op, we don't support writezero/writesame yet */
if (!bio_has_data(bio))
goto skip_copy;
while (i < vcnt && size) { while (i < vcnt && size) {
struct page *page; struct page *page;
int len = min_t(int, PAGE_SIZE, size); int len = min_t(int, PAGE_SIZE, size);
...@@ -1118,7 +1122,7 @@ static struct bio *alloc_behind_master_bio(struct r1bio *r1_bio, ...@@ -1118,7 +1122,7 @@ static struct bio *alloc_behind_master_bio(struct r1bio *r1_bio,
bio_copy_data_partial(behind_bio, bio, offset, bio_copy_data_partial(behind_bio, bio, offset,
behind_bio->bi_iter.bi_size); behind_bio->bi_iter.bi_size);
skip_copy:
r1_bio->behind_master_bio = behind_bio;; r1_bio->behind_master_bio = behind_bio;;
set_bit(R1BIO_BehindIO, &r1_bio->state); set_bit(R1BIO_BehindIO, &r1_bio->state);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment