From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-17.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_CR_TRAILER,INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6F58DC432BE for ; Tue, 17 Aug 2021 20:30:23 +0000 (UTC) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [216.205.24.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 1BF3161042 for ; Tue, 17 Aug 2021 20:30:22 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.1 mail.kernel.org 1BF3161042 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=tempfail smtp.mailfrom=redhat.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1629232222; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=4RnaQV9Uh9xYqEqYd3Vjn3bsWFVL3i7SIpl3N46ojxI=; b=f/mLZ7R+piJP8c3aWgHMjLibVW7Ca0Ic6Ldb7qPmpGt2Mzs2zHGCPh3txND4CZHQY7omX5 HutUFffYYhdnJK2btzzj3GLpCy30VrW36P6z61hszMh1lY7bB17+WNRWwZYjFAkH/Mzjy5 /9+Xmo6a5WEH5VYo/aXLljphQgqI+d0= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-263-p0cX5C_SNzKUiDwuCTRL3g-1; Tue, 17 Aug 2021 16:30:20 -0400 X-MC-Unique: p0cX5C_SNzKUiDwuCTRL3g-1 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 758F1801AC0; Tue, 17 Aug 2021 20:30:15 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.20]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 96B205C1D5; Tue, 17 Aug 2021 20:30:14 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 31530181A6E2; Tue, 17 Aug 2021 20:30:12 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id 17HKU9bL015906 for ; Tue, 17 Aug 2021 16:30:09 -0400 Received: by smtp.corp.redhat.com (Postfix) id 34BEB18032; Tue, 17 Aug 2021 20:30:09 +0000 (UTC) Received: from file01.intranet.prod.int.rdu2.redhat.com (file01.intranet.prod.int.rdu2.redhat.com [10.11.5.7]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 70BBB5C1D5; Tue, 17 Aug 2021 20:29:59 +0000 (UTC) Received: from file01.intranet.prod.int.rdu2.redhat.com (localhost [127.0.0.1]) by file01.intranet.prod.int.rdu2.redhat.com (8.14.4/8.14.4) with ESMTP id 17HKTwMF031021; Tue, 17 Aug 2021 16:29:58 -0400 Received: from localhost (mpatocka@localhost) by file01.intranet.prod.int.rdu2.redhat.com (8.14.4/8.14.4/Submit) with ESMTP id 17HKTtxE031017; Tue, 17 Aug 2021 16:29:55 -0400 X-Authentication-Warning: file01.intranet.prod.int.rdu2.redhat.com: mpatocka owned process doing -bs Date: Tue, 17 Aug 2021 16:29:55 -0400 (EDT) From: Mikulas Patocka X-X-Sender: mpatocka@file01.intranet.prod.int.rdu2.redhat.com To: SelvaKumar S In-Reply-To: <20210817101423.12367-8-selvakuma.s1@samsung.com> Message-ID: References: <20210817101423.12367-1-selvakuma.s1@samsung.com> <20210817101423.12367-8-selvakuma.s1@samsung.com> User-Agent: Alpine 2.02 (LRH 1266 2009-07-14) MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-loop: dm-devel@redhat.com Cc: snitzer@redhat.com, djwong@kernel.org, linux-nvme@lists.infradead.org, dm-devel@redhat.com, hch@lst.de, agk@redhat.com, bvanassche@acm.org, linux-scsi@vger.kernel.org, nitheshshetty@gmail.com, willy@infradead.org, nj.shetty@samsung.com, kch@kernel.org, selvajove@gmail.com, linux-block@vger.kernel.org, joshiiitr@gmail.com, kbusch@kernel.org, axboe@kernel.dk, damien.lemoal@wdc.com, joshi.k@samsung.com, martin.petersen@oracle.com, johannes.thumshirn@wdc.com, linux-api@vger.kernel.org, linux-fsdevel@vger.kernel.org, javier.gonz@samsung.com, asml.silence@gmail.com Subject: Re: [dm-devel] [PATCH 7/7] dm kcopyd: add simple copy offload support X-BeenThere: dm-devel@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: device-mapper development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dm-devel-bounces@redhat.com Errors-To: dm-devel-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=dm-devel-bounces@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit On Tue, 17 Aug 2021, SelvaKumar S wrote: > Introduce copy_jobs to use copy-offload, if supported by underlying devices > otherwise fall back to existing method. dm-kcopyd is usually used on the dm-linear target. And this patchset doesn't support passing copy requests through the linear target - so this patch doesn't seem useful. Mikulas > run_copy_jobs() calls block layer copy offload API, if both source and > destination request queue are same and support copy offload. > On successful completion, destination regions copied count is made zero, > failed regions are processed via existing method. > > Signed-off-by: SelvaKumar S > Signed-off-by: Nitesh Shetty > --- > drivers/md/dm-kcopyd.c | 56 +++++++++++++++++++++++++++++++++++++----- > 1 file changed, 50 insertions(+), 6 deletions(-) > > diff --git a/drivers/md/dm-kcopyd.c b/drivers/md/dm-kcopyd.c > index 37b03ab7e5c9..d9ee105a6127 100644 > --- a/drivers/md/dm-kcopyd.c > +++ b/drivers/md/dm-kcopyd.c > @@ -74,18 +74,20 @@ struct dm_kcopyd_client { > atomic_t nr_jobs; > > /* > - * We maintain four lists of jobs: > + * We maintain five lists of jobs: > * > - * i) jobs waiting for pages > - * ii) jobs that have pages, and are waiting for the io to be issued. > - * iii) jobs that don't need to do any IO and just run a callback > - * iv) jobs that have completed. > + * i) jobs waiting to try copy offload > + * ii) jobs waiting for pages > + * iii) jobs that have pages, and are waiting for the io to be issued. > + * iv) jobs that don't need to do any IO and just run a callback > + * v) jobs that have completed. > * > - * All four of these are protected by job_lock. > + * All five of these are protected by job_lock. > */ > spinlock_t job_lock; > struct list_head callback_jobs; > struct list_head complete_jobs; > + struct list_head copy_jobs; > struct list_head io_jobs; > struct list_head pages_jobs; > }; > @@ -579,6 +581,43 @@ static int run_io_job(struct kcopyd_job *job) > return r; > } > > +static int run_copy_job(struct kcopyd_job *job) > +{ > + int r, i, count = 0; > + unsigned long flags = 0; > + struct range_entry srange; > + > + struct request_queue *src_q, *dest_q; > + > + for (i = 0; i < job->num_dests; i++) { > + srange.src = job->source.sector; > + srange.len = job->source.count; > + > + src_q = bdev_get_queue(job->source.bdev); > + dest_q = bdev_get_queue(job->dests[i].bdev); > + > + if (src_q != dest_q && !src_q->limits.copy_offload) > + break; > + > + r = blkdev_issue_copy(job->source.bdev, 1, &srange, > + job->dests[i].bdev, job->dests[i].sector, GFP_KERNEL, flags); > + if (r) > + break; > + > + job->dests[i].count = 0; > + count++; > + } > + > + if (count == job->num_dests) { > + push(&job->kc->complete_jobs, job); > + } else { > + push(&job->kc->pages_jobs, job); > + r = 0; > + } > + > + return r; > +} > + > static int run_pages_job(struct kcopyd_job *job) > { > int r; > @@ -659,6 +698,7 @@ static void do_work(struct work_struct *work) > spin_unlock_irq(&kc->job_lock); > > blk_start_plug(&plug); > + process_jobs(&kc->copy_jobs, kc, run_copy_job); > process_jobs(&kc->complete_jobs, kc, run_complete_job); > process_jobs(&kc->pages_jobs, kc, run_pages_job); > process_jobs(&kc->io_jobs, kc, run_io_job); > @@ -676,6 +716,8 @@ static void dispatch_job(struct kcopyd_job *job) > atomic_inc(&kc->nr_jobs); > if (unlikely(!job->source.count)) > push(&kc->callback_jobs, job); > + else if (job->source.bdev->bd_disk == job->dests[0].bdev->bd_disk) > + push(&kc->copy_jobs, job); > else if (job->pages == &zero_page_list) > push(&kc->io_jobs, job); > else > @@ -916,6 +958,7 @@ struct dm_kcopyd_client *dm_kcopyd_client_create(struct dm_kcopyd_throttle *thro > spin_lock_init(&kc->job_lock); > INIT_LIST_HEAD(&kc->callback_jobs); > INIT_LIST_HEAD(&kc->complete_jobs); > + INIT_LIST_HEAD(&kc->copy_jobs); > INIT_LIST_HEAD(&kc->io_jobs); > INIT_LIST_HEAD(&kc->pages_jobs); > kc->throttle = throttle; > @@ -971,6 +1014,7 @@ void dm_kcopyd_client_destroy(struct dm_kcopyd_client *kc) > > BUG_ON(!list_empty(&kc->callback_jobs)); > BUG_ON(!list_empty(&kc->complete_jobs)); > + WARN_ON(!list_empty(&kc->copy_jobs)); > BUG_ON(!list_empty(&kc->io_jobs)); > BUG_ON(!list_empty(&kc->pages_jobs)); > destroy_workqueue(kc->kcopyd_wq); > -- > 2.25.1 > > > -- > dm-devel mailing list > dm-devel@redhat.com > https://listman.redhat.com/mailman/listinfo/dm-devel > -- dm-devel mailing list dm-devel@redhat.com https://listman.redhat.com/mailman/listinfo/dm-devel