From patchwork Mon Sep 17 05:29:35 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Heiner Litz X-Patchwork-Id: 10602079 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id DCDC8112B for ; Mon, 17 Sep 2018 05:29:56 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CD86629585 for ; Mon, 17 Sep 2018 05:29:56 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C22262958D; Mon, 17 Sep 2018 05:29:56 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.0 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 5D2F529585 for ; Mon, 17 Sep 2018 05:29:56 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726073AbeIQKzl (ORCPT ); Mon, 17 Sep 2018 06:55:41 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:36161 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727835AbeIQKzl (ORCPT ); Mon, 17 Sep 2018 06:55:41 -0400 Received: by mail-pf1-f195.google.com with SMTP id b11-v6so7001762pfo.3 for ; Sun, 16 Sep 2018 22:29:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ucsc.edu; s=ucsc-google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=hpmWOpWwCRFvxA7Ic9DYW9Srabix9GqnpgXvi125Y6U=; b=cJmwGpzoqCbNqy1FnL1f+1HH0YnyMocsZjPTP1tDUMUb27IawrCOLm0o4TAsKF3xOM eLtRf3iOJiIab+9pEtrtv6kiZJ9eSODm+N9AkKbcvFk/n84rH9SZLrhrudBixf2paXu8 Dxyw3KZmVA7Z0brvEPmAHFt+Yyn1C3NwIitOo= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=hpmWOpWwCRFvxA7Ic9DYW9Srabix9GqnpgXvi125Y6U=; b=XccFsDoyOEkPrE1zDLRRYWv+4URAq+OaG5PSLCzHrtQDTi2NSmfaDFKbQj3LPcb1hH eWyRZCPND6XY2gKTWfiLfjRMwGebIxsxwWufHCoFXftc1iFcCguPHRMJXH8UCwjN56zY k5H13eGvq7//4TZKXDeeco167HSZSNNDK/Ruz2cRdyJdKLIR+KDCis/NwFPy1Kq3uxEG CWVwNBqbpn1eT/thvWKrFvLxKjI2QOh7Jv2Alpb2Ug3680+d7pnbrJ2IuQ6TjaP8++Zr SaqrTyvDT7y7IfgZNgU0XJZq06L+zeOt0LiO4q9/S2dnnSBCzuoqXfKDyakfFpyikXH2 Di+w== X-Gm-Message-State: APzg51DU7MAGFM1LQ7WFRuOR6M7O1EHJE36wnRggImHxCLa52CIiYvJU 5gOrv2hy0w9qIeCRvOyEcgskyiPrFS6gGg== X-Google-Smtp-Source: ANB0Vdaiq5+rdkFeRpgEUXNQ6+jOgDy402ZsjEXnY8s+VLBZkY98C4OnMG9nzwJFQKumqA6m8HHGmA== X-Received: by 2002:a62:5cc1:: with SMTP id q184-v6mr24518864pfb.241.1537162194359; Sun, 16 Sep 2018 22:29:54 -0700 (PDT) Received: from bohr1.soe.ucsc.edu (bohr1.soe.ucsc.edu. [128.114.52.184]) by smtp.gmail.com with ESMTPSA id u11-v6sm22197795pfd.117.2018.09.16.22.29.53 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 16 Sep 2018 22:29:53 -0700 (PDT) From: Heiner Litz To: linux-block@vger.kernel.org, hlitz@ucsc.edu Cc: javier@cnexlabs.com, mb@lightnvm.io, igor.j.konopko@intel.com, marcin.dziegielewski@intel.com Subject: [RFC PATCH 2/6] lightnvm: pblk: Add configurable mapping function Date: Sun, 16 Sep 2018 22:29:35 -0700 Message-Id: <20180917052939.4776-3-hlitz@ucsc.edu> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20180917052939.4776-1-hlitz@ucsc.edu> References: <20180917052939.4776-1-hlitz@ucsc.edu> Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In prepartion of supporting RAIL, introduce a new function pointer so that different mapping functions can be used to determine sector placement. Signed-off-by: Heiner Litz --- drivers/lightnvm/pblk-init.c | 2 ++ drivers/lightnvm/pblk-map.c | 18 +++++++++--------- drivers/lightnvm/pblk.h | 13 +++++++++++++ 3 files changed, 24 insertions(+), 9 deletions(-) diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c index fb66bc84d5ca..2b9c6ebd9fac 100644 --- a/drivers/lightnvm/pblk-init.c +++ b/drivers/lightnvm/pblk-init.c @@ -411,6 +411,8 @@ static int pblk_core_init(struct pblk *pblk) pblk->pad_rst_wa = 0; pblk->gc_rst_wa = 0; + pblk->map_page = pblk_map_page_data; + atomic64_set(&pblk->nr_flush, 0); pblk->nr_flush_rst = 0; diff --git a/drivers/lightnvm/pblk-map.c b/drivers/lightnvm/pblk-map.c index ff677ca6e4e1..9490601de3a5 100644 --- a/drivers/lightnvm/pblk-map.c +++ b/drivers/lightnvm/pblk-map.c @@ -18,11 +18,11 @@ #include "pblk.h" -static int pblk_map_page_data(struct pblk *pblk, unsigned int sentry, - struct ppa_addr *ppa_list, - unsigned long *lun_bitmap, - struct pblk_sec_meta *meta_list, - unsigned int valid_secs) +int pblk_map_page_data(struct pblk *pblk, unsigned int sentry, + struct ppa_addr *ppa_list, + unsigned long *lun_bitmap, + struct pblk_sec_meta *meta_list, + unsigned int valid_secs) { struct pblk_line *line = pblk_line_get_data(pblk); struct pblk_emeta *emeta; @@ -95,8 +95,8 @@ void pblk_map_rq(struct pblk *pblk, struct nvm_rq *rqd, unsigned int sentry, for (i = off; i < rqd->nr_ppas; i += min) { map_secs = (i + min > valid_secs) ? (valid_secs % min) : min; - if (pblk_map_page_data(pblk, sentry + i, &ppa_list[i], - lun_bitmap, &meta_list[i], map_secs)) { + if (pblk->map_page(pblk, sentry + i, &ppa_list[i], lun_bitmap, + &meta_list[i], map_secs)) { bio_put(rqd->bio); pblk_free_rqd(pblk, rqd, PBLK_WRITE); pblk_pipeline_stop(pblk); @@ -121,8 +121,8 @@ void pblk_map_erase_rq(struct pblk *pblk, struct nvm_rq *rqd, for (i = 0; i < rqd->nr_ppas; i += min) { map_secs = (i + min > valid_secs) ? (valid_secs % min) : min; - if (pblk_map_page_data(pblk, sentry + i, &ppa_list[i], - lun_bitmap, &meta_list[i], map_secs)) { + if (pblk->map_page(pblk, sentry + i, &ppa_list[i], lun_bitmap, + &meta_list[i], map_secs)) { bio_put(rqd->bio); pblk_free_rqd(pblk, rqd, PBLK_WRITE); pblk_pipeline_stop(pblk); diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h index eab50df70ae6..87dc24772dad 100644 --- a/drivers/lightnvm/pblk.h +++ b/drivers/lightnvm/pblk.h @@ -604,6 +604,12 @@ struct pblk_addrf { int sec_ws_stripe; }; +typedef int (pblk_map_page_fn)(struct pblk *pblk, unsigned int sentry, + struct ppa_addr *ppa_list, + unsigned long *lun_bitmap, + struct pblk_sec_meta *meta_list, + unsigned int valid_secs); + struct pblk { struct nvm_tgt_dev *dev; struct gendisk *disk; @@ -709,6 +715,8 @@ struct pblk { struct timer_list wtimer; struct pblk_gc gc; + + pblk_map_page_fn *map_page; }; struct pblk_line_ws { @@ -873,6 +881,11 @@ void pblk_map_erase_rq(struct pblk *pblk, struct nvm_rq *rqd, void pblk_map_rq(struct pblk *pblk, struct nvm_rq *rqd, unsigned int sentry, unsigned long *lun_bitmap, unsigned int valid_secs, unsigned int off); +int pblk_map_page_data(struct pblk *pblk, unsigned int sentry, + struct ppa_addr *ppa_list, + unsigned long *lun_bitmap, + struct pblk_sec_meta *meta_list, + unsigned int valid_secs); /* * pblk write thread