Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp2344347imm; Tue, 4 Sep 2018 02:51:17 -0700 (PDT) X-Google-Smtp-Source: ANB0VdZSAToe8anaHgfcrD9SQZpAWfhVQYQ5n59f8JCUeZ70G9fCnA73ALNlfxbePDkNlWGSG0C0 X-Received: by 2002:a62:5d03:: with SMTP id r3-v6mr34092828pfb.150.1536054677066; Tue, 04 Sep 2018 02:51:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1536054676; cv=none; d=google.com; s=arc-20160816; b=nLb3KNEDfn2jpplqwqlIRqqNPiTLCE3uNb7qJcjXyStyjvsv6duRuUTkOX9VJXGlb1 uOSlbol6IcwYYqW44k0VIrhzHd2+ewNpnGg7SoEMqySiFHkrPzlYrlMD7aFTPol4r1XT NXPn51CuV9Kc8HUWn5zimJk4lUemikFQ1LT2KzMmNr2oURhKojBbuXWyLARYrVaZcjGN 2VTFavVyemhwq6bRXhLTjylZv4NNdHJEPOLiU2KfAmDHo+DiYn149faI7izfeJAYKTvG fqf0X5AvRqJFPkv+9nee/8l9KWQDtkhnO9uqQKvQY8mvQYv5uU+Rl1WFOyBvdetyIW/7 k2gQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature :arc-authentication-results; bh=DjKjK+Fly6EhlOT8+2jMTxCJartGn+5jLWcznTfTPMg=; b=Boe4cgc2CpC18UzUm16H4vOGhZOBJW1uZONld23iemVHcMMd9UfzMXZtWhc6C+mRVJ z4dLFE07Hm99gz8v0JczeDWwHXlJU/+/2Df2fx7OU9Mk3QDcINgIG3rr0BRIfmfwV1nj nUnMMai3OJ7E/eqz/W0WnwfXqvyABHKeQMMOxM6wgPLobL33ZdiZtlZBq6AsV9BVrEpr hggOOP/VIvWeDakQPhmA/9Yl9V2uKgNcN3kaVlvj8XTMlNktUJuhhM3lXLKv4JI8izvF fivsfYrASsAzHzLkfkHcb+By7g0vRhLG1ICFrPmZpT6gR1ABWhbMuJ0CZOmQYOMMxuA7 xS+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lightnvm-io.20150623.gappssmtp.com header.s=20150623 header.b=E+t6NoDX; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bi12-v6si20544937plb.311.2018.09.04.02.51.01; Tue, 04 Sep 2018 02:51:16 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@lightnvm-io.20150623.gappssmtp.com header.s=20150623 header.b=E+t6NoDX; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727397AbeIDONf (ORCPT + 99 others); Tue, 4 Sep 2018 10:13:35 -0400 Received: from mail-lf1-f66.google.com ([209.85.167.66]:35360 "EHLO mail-lf1-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727290AbeIDONf (ORCPT ); Tue, 4 Sep 2018 10:13:35 -0400 Received: by mail-lf1-f66.google.com with SMTP id q13-v6so2441601lfc.2 for ; Tue, 04 Sep 2018 02:49:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lightnvm-io.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=DjKjK+Fly6EhlOT8+2jMTxCJartGn+5jLWcznTfTPMg=; b=E+t6NoDXL58dId4xZMfmJ0bLXzRU0ICcFFX7Ltt0+o7akflJs4FkiCUHoHBCWbhOpG 01H5bTrBK8AO6PC6ZPh/n3hdYBlUiVWtg7+2FeE4NYUIwNoH3KcE5QDkVlB0BO9gxNVW cqWDfLMrEbz/WzQEi9IIzIELOPeD3zURDvLe3SatuyEz8fJzXFctJq3ZBsde/7dKPycu rtnUbmM4lkYpPIz7nJSdpeQRRPjXc6jY60jRizJtWl6emQdqvXMfEfsJry1+ODeeA90j mfmLzV4Srs76neVHbsk3Vy4VIOF/k/1jiM6aHw9istWsmmgVTuGkUwJ8eG1X9mMKWWkH MebQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=DjKjK+Fly6EhlOT8+2jMTxCJartGn+5jLWcznTfTPMg=; b=SgEjkn5grnLl5+N7iAgCcVGYLCA75fCgX01ljRstj4p+XA7SsOxLKR/ffMU+J5uAmY QXBOxoTOVLazN76taStiMEiwT2fVyly4nWzY7+DoPO+OKukmZcqQJazNiyx0MDWIIc3l b9UZGRac3Lv5Ap9Sa3nafUgAiGKIuITfjgPeGjZ7Gs3A3H/4CQbmtEwTmt4W4Lj1xKN2 vcyrnSfooquyPakZdC95SNcZrdvbTRRPUsSXtL16ydAERPy3457w7Pmh8TxCjIjakc/J kjHnQaLcMp0FfxroH5kbNT44A5zMG/5l40Nc2ifpYfMBGa7OJOvy+y9WrE9SJXAocyJa ZcWw== X-Gm-Message-State: APzg51CstKYA0HE0VwPu+9YlSqboKeD3ssn/qA+yhyCLuih4DBx3ALFB t1rA2O4GeDfO8xUiPyjja8fsaU8BoU41nw== X-Received: by 2002:a19:264a:: with SMTP id m71-v6mr14749842lfm.112.1536054551122; Tue, 04 Sep 2018 02:49:11 -0700 (PDT) Received: from [192.168.0.10] (95-166-82-66-cable.dk.customer.tdc.net. [95.166.82.66]) by smtp.googlemail.com with ESMTPSA id 36-v6sm4161487lja.65.2018.09.04.02.49.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Sep 2018 02:49:10 -0700 (PDT) Subject: Re: [PATCH] lightnvm: pblk: remove debug from pblk_[down/up]_page To: javier@cnexlabs.com Cc: igor.j.konopko@intel.com, marcin.dziegielewski@intel.com, hans.holmberg@cnexlabs.com, hlitz@ucsc.edu, youngtack.jin@circuitblvd.com, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org References: <20180829140832.29341-1-mb@lightnvm.io> From: =?UTF-8?Q?Matias_Bj=c3=b8rling?= Message-ID: Date: Tue, 4 Sep 2018 11:49:08 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.5.0 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-GB Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 09/03/2018 11:12 AM, Javier Gonzalez wrote: >> On 31 Aug 2018, at 16.22, Matias Bjørling wrote: >> >> On 08/31/2018 02:11 PM, Javier Gonzalez wrote: >>>> On 29 Aug 2018, at 16.08, Matias Bjørling wrote: >>>> >>>> Remove the debug only iteration within __pblk_down_page, which >>>> then allows us to reduce the number of arguments down to pblk and >>>> the parallel unit from the functions that calls it. Simplifying the >>>> callers logic considerably. >>>> >>>> Also, rename the functions pblk_[down/up]_page to pblk_[down/up]_pu, >>>> to communicate that it takes a lock on the parallel unit. >>>> >>>> Signed-off-by: Matias Bjørling >>>> --- >>>> drivers/lightnvm/pblk-core.c | 34 +++++++++------------------------- >>>> drivers/lightnvm/pblk-map.c | 2 +- >>>> drivers/lightnvm/pblk-recovery.c | 6 +++--- >>>> drivers/lightnvm/pblk-write.c | 6 +++--- >>>> drivers/lightnvm/pblk.h | 6 +++--- >>>> 5 files changed, 19 insertions(+), 35 deletions(-) >>>> >>>> diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c >>>> index bb1a7cc24cbb..08df6bcd2f81 100644 >>>> --- a/drivers/lightnvm/pblk-core.c >>>> +++ b/drivers/lightnvm/pblk-core.c >>>> @@ -1861,8 +1861,7 @@ void pblk_gen_run_ws(struct pblk *pblk, struct pblk_line *line, void *priv, >>>> queue_work(wq, &line_ws->ws); >>>> } >>>> >>>> -static void __pblk_down_page(struct pblk *pblk, struct ppa_addr *ppa_list, >>>> - int nr_ppas, int pos) >>>> +static void __pblk_down_pu(struct pblk *pblk, int pos) >>>> { >>>> struct pblk_lun *rlun = &pblk->luns[pos]; >>>> int ret; >>>> @@ -1871,13 +1870,6 @@ static void __pblk_down_page(struct pblk *pblk, struct ppa_addr *ppa_list, >>>> * Only send one inflight I/O per LUN. Since we map at a page >>>> * granurality, all ppas in the I/O will map to the same LUN >>>> */ >>>> -#ifdef CONFIG_NVM_PBLK_DEBUG >>>> - int i; >>>> - >>>> - for (i = 1; i < nr_ppas; i++) >>>> - WARN_ON(ppa_list[0].a.lun != ppa_list[i].a.lun || >>>> - ppa_list[0].a.ch != ppa_list[i].a.ch); >>>> -#endif >>>> >>>> ret = down_timeout(&rlun->wr_sem, msecs_to_jiffies(30000)); >>>> if (ret == -ETIME || ret == -EINTR) >>>> @@ -1885,21 +1877,21 @@ static void __pblk_down_page(struct pblk *pblk, struct ppa_addr *ppa_list, >>>> -ret); >>>> } >>>> >>>> -void pblk_down_page(struct pblk *pblk, struct ppa_addr *ppa_list, int nr_ppas) >>>> +void pblk_down_pu(struct pblk *pblk, struct ppa_addr ppa) >>>> { >>>> struct nvm_tgt_dev *dev = pblk->dev; >>>> struct nvm_geo *geo = &dev->geo; >>>> - int pos = pblk_ppa_to_pos(geo, ppa_list[0]); >>>> + int pos = pblk_ppa_to_pos(geo, ppa); >>>> >>>> - __pblk_down_page(pblk, ppa_list, nr_ppas, pos); >>>> + __pblk_down_pu(pblk, pos); >>>> } >>>> >>>> -void pblk_down_rq(struct pblk *pblk, struct ppa_addr *ppa_list, int nr_ppas, >>>> +void pblk_down_rq(struct pblk *pblk, struct ppa_addr ppa, >>>> unsigned long *lun_bitmap) >>>> { >>>> struct nvm_tgt_dev *dev = pblk->dev; >>>> struct nvm_geo *geo = &dev->geo; >>>> - int pos = pblk_ppa_to_pos(geo, ppa_list[0]); >>>> + int pos = pblk_ppa_to_pos(geo, ppa); >>>> >>>> /* If the LUN has been locked for this same request, do no attempt to >>>> * lock it again >>>> @@ -1907,23 +1899,15 @@ void pblk_down_rq(struct pblk *pblk, struct ppa_addr *ppa_list, int nr_ppas, >>>> if (test_and_set_bit(pos, lun_bitmap)) >>>> return; >>>> >>>> - __pblk_down_page(pblk, ppa_list, nr_ppas, pos); >>>> + __pblk_down_pu(pblk, pos); >>>> } >>>> >>>> -void pblk_up_page(struct pblk *pblk, struct ppa_addr *ppa_list, int nr_ppas) >>>> +void pblk_up_pu(struct pblk *pblk, struct ppa_addr ppa) >>>> { >>>> struct nvm_tgt_dev *dev = pblk->dev; >>>> struct nvm_geo *geo = &dev->geo; >>>> struct pblk_lun *rlun; >>>> - int pos = pblk_ppa_to_pos(geo, ppa_list[0]); >>>> - >>>> -#ifdef CONFIG_NVM_PBLK_DEBUG >>>> - int i; >>>> - >>>> - for (i = 1; i < nr_ppas; i++) >>>> - WARN_ON(ppa_list[0].a.lun != ppa_list[i].a.lun || >>>> - ppa_list[0].a.ch != ppa_list[i].a.ch); >>>> -#endif >>>> + int pos = pblk_ppa_to_pos(geo, ppa); >>>> >>>> rlun = &pblk->luns[pos]; >>>> up(&rlun->wr_sem); >>>> diff --git a/drivers/lightnvm/pblk-map.c b/drivers/lightnvm/pblk-map.c >>>> index dc0efb852475..ff677ca6e4e1 100644 >>>> --- a/drivers/lightnvm/pblk-map.c >>>> +++ b/drivers/lightnvm/pblk-map.c >>>> @@ -79,7 +79,7 @@ static int pblk_map_page_data(struct pblk *pblk, unsigned int sentry, >>>> } >>>> } >>>> >>>> - pblk_down_rq(pblk, ppa_list, nr_secs, lun_bitmap); >>>> + pblk_down_rq(pblk, ppa_list[0], lun_bitmap); >>>> return 0; >>>> } >>>> >>>> diff --git a/drivers/lightnvm/pblk-recovery.c b/drivers/lightnvm/pblk-recovery.c >>>> index eea901d7cebc..df624d504d24 100644 >>>> --- a/drivers/lightnvm/pblk-recovery.c >>>> +++ b/drivers/lightnvm/pblk-recovery.c >>>> @@ -227,7 +227,7 @@ static void pblk_end_io_recov(struct nvm_rq *rqd) >>>> struct pblk_pad_rq *pad_rq = rqd->private; >>>> struct pblk *pblk = pad_rq->pblk; >>>> >>>> - pblk_up_page(pblk, ppa_list, rqd->nr_ppas); >>>> + pblk_up_pu(pblk, ppa_list[0]); >>>> >>>> pblk_free_rqd(pblk, rqd, PBLK_WRITE_INT); >>>> >>>> @@ -339,12 +339,12 @@ static int pblk_recov_pad_oob(struct pblk *pblk, struct pblk_line *line, >>>> } >>>> >>>> kref_get(&pad_rq->ref); >>>> - pblk_down_page(pblk, rqd->ppa_list, rqd->nr_ppas); >>>> + pblk_down_pu(pblk, rqd->ppa_list[0]); >>>> >>>> ret = pblk_submit_io(pblk, rqd); >>>> if (ret) { >>>> pblk_err(pblk, "I/O submission failed: %d\n", ret); >>>> - pblk_up_page(pblk, rqd->ppa_list, rqd->nr_ppas); >>>> + pblk_up_pu(pblk, rqd->ppa_list[0]); >>>> goto fail_free_bio; >>>> } >>>> >>>> diff --git a/drivers/lightnvm/pblk-write.c b/drivers/lightnvm/pblk-write.c >>>> index cd579b440b56..55d198edd70a 100644 >>>> --- a/drivers/lightnvm/pblk-write.c >>>> +++ b/drivers/lightnvm/pblk-write.c >>>> @@ -270,7 +270,7 @@ static void pblk_end_io_write_meta(struct nvm_rq *rqd) >>>> struct ppa_addr *ppa_list = nvm_rq_to_ppa_list(rqd); >>>> int sync; >>>> >>>> - pblk_up_page(pblk, ppa_list, rqd->nr_ppas); >>>> + pblk_up_pu(pblk, ppa_list[0]); >>>> >>>> if (rqd->error) { >>>> pblk_log_write_err(pblk, rqd); >>>> @@ -420,7 +420,7 @@ int pblk_submit_meta_io(struct pblk *pblk, struct pblk_line *meta_line) >>>> list_del(&meta_line->list); >>>> spin_unlock(&l_mg->close_lock); >>>> >>>> - pblk_down_page(pblk, ppa_list, rqd->nr_ppas); >>>> + pblk_down_pu(pblk, ppa_list[0]); >>>> >>>> ret = pblk_submit_io(pblk, rqd); >>>> if (ret) { >>>> @@ -431,7 +431,7 @@ int pblk_submit_meta_io(struct pblk *pblk, struct pblk_line *meta_line) >>>> return NVM_IO_OK; >>>> >>>> fail_rollback: >>>> - pblk_up_page(pblk, ppa_list, rqd->nr_ppas); >>>> + pblk_up_pu(pblk, ppa_list[0]); >>>> spin_lock(&l_mg->close_lock); >>>> pblk_dealloc_page(pblk, meta_line, rq_ppas); >>>> list_add(&meta_line->list, &meta_line->list); >>>> diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h >>>> index 2f61f4428fcb..390855375b1e 100644 >>>> --- a/drivers/lightnvm/pblk.h >>>> +++ b/drivers/lightnvm/pblk.h >>>> @@ -823,10 +823,10 @@ u64 pblk_alloc_page(struct pblk *pblk, struct pblk_line *line, int nr_secs); >>>> u64 __pblk_alloc_page(struct pblk *pblk, struct pblk_line *line, int nr_secs); >>>> int pblk_calc_secs(struct pblk *pblk, unsigned long secs_avail, >>>> unsigned long secs_to_flush); >>>> -void pblk_up_page(struct pblk *pblk, struct ppa_addr *ppa_list, int nr_ppas); >>>> -void pblk_down_rq(struct pblk *pblk, struct ppa_addr *ppa_list, int nr_ppas, >>>> +void pblk_up_pu(struct pblk *pblk, struct ppa_addr ppa); >>>> +void pblk_down_rq(struct pblk *pblk, struct ppa_addr ppa, >>>> unsigned long *lun_bitmap); >>>> -void pblk_down_page(struct pblk *pblk, struct ppa_addr *ppa_list, int nr_ppas); >>>> +void pblk_down_pu(struct pblk *pblk, struct ppa_addr ppa); >>>> void pblk_up_rq(struct pblk *pblk, unsigned long *lun_bitmap); >>>> int pblk_bio_add_pages(struct pblk *pblk, struct bio *bio, gfp_t flags, >>>> int nr_pages); >>>> -- >>>> 2.11.0 >>> The patch looks good to me. The renaming to PU though is confusing. The >>> underlying reason to take the semaphore is to avoid write pointer >>> violations. At the moment, we only have an open line in pblk, which >>> makes that the semaphore effectively protects a PU, but when we have >>> several open lines this is no longer true. >> >> I don't understand this, how will it change when multiple lines are active? >> >> My guess is that one has to keep track of the number of outstanding >> I/Os for each PU. > > The confusion comes from the current semaphore having 2 purposes: (i) > guaranteeing the write pointer at a chunk level, and (ii) being the > mechanism used by the scheduler to minimize internal write collisions. > When we have several open lines this semaphore will still be used for > (i), however, we will need a separate mechanism for (ii). > >> Regarding naming, pblk_[down/up]_line doesn't quite cut it, and _page >> doesn't mean anything to me. Can we find a better name? > > Give the above, what do you say pblk_[down/up]_chunk? > Ok, works for me. I'll update the patch and push. If getting to multiple chunks per PU, then this can be flushed out to remove the rest of the confusion. Thanks.