summaryrefslogtreecommitdiffstats
path: root/drivers/md/raid1.c
diff options
context:
space:
mode:
authorShaohua Li <shli@fb.com>2017-03-24 15:20:47 -0700
committerShaohua Li <shli@fb.com>2017-03-25 09:38:06 -0700
commit41743c1f046a14c6749fd1808bb3793c08e47a3e (patch)
tree2e4c01da3f7cda8e5903dcc9e786e0bbc284261f /drivers/md/raid1.c
parentf45958756fef552436e4a63029a168495920026e (diff)
downloadop-kernel-dev-41743c1f046a14c6749fd1808bb3793c08e47a3e.zip
op-kernel-dev-41743c1f046a14c6749fd1808bb3793c08e47a3e.tar.gz
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>
Diffstat (limited to 'drivers/md/raid1.c')
-rw-r--r--drivers/md/raid1.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/drivers/md/raid1.c b/drivers/md/raid1.c
index c6a671f..b7d9651 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);
OpenPOWER on IntegriCloud