Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp533357imm; Wed, 29 Aug 2018 06:09:38 -0700 (PDT) X-Google-Smtp-Source: ANB0VdaUDEPGwHPZoKrNlahknyp9xHZNWhXssyMfbf6CPRy1hu3FRrxloar4Bt2KeGSP5gnRzlD4 X-Received: by 2002:a62:205d:: with SMTP id g90-v6mr6038712pfg.253.1535548178498; Wed, 29 Aug 2018 06:09:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535548178; cv=none; d=google.com; s=arc-20160816; b=S56z7cwOJ9Qmtg0lDCCVgYKy7IhKMQlbxCeb0Znlyt/Sc2B2Ypk8X7oK5EdfqEbVqF axcIcXjD15FWmzIsvTuN6+1LOpshQmDcUuxn/kMR3F/15vBhtTpZ+rUOrftAz4BJSwpG 28uedSYWOnE4bAHBMtHtonW3KAMrpgpRPGtUhb8KLrRRHNhPwc6U1YgmHm/W56t13CXo qxH8BoErRNavYdlXc7iji2U3YBYgFeeErLi0V0zZs1H2kuZ72Emrhx0b6hLU8PntrfXz 7VGFWCo1HLV1ao8s86+sejMsKhLBQLaU+znoU7Kw7PHi8PAkH6074QBvcROyQ23qfFkF Fr/w== 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=n2gm/tJ8cTXqdvjAAS276cszFYzzc12+QuZ1BNfGWD8=; b=UWVC1+2ZMd2GgvBl/8ltBkE6PuTxwzg5c2eVOUxCJ9vMZAN4U9p/bdewWWk4sT24M+ 5IePsBHhoCn+afeSLVk/yx+Gh9PmTe1fmFc14gJ6hMTKZwpwS1GxAgpu4t/Jff50n5af PMHJyokx15AyB9KLEe6q32Ec4NyWP87AbzOXFv5RQ6cLkjjxfLiOsDpqW7X+ZugSaq/+ /yIPmI5czEzCOM6v6xiJScv9llNSszgQs9JFob3W7b+ZFatmMi/zTMhNU+jGzvoCwjSk 0rQRr2OQQm62Z04dr70hOAYkY/Gf+OQEIf0k0XJam4OQYu9WIhhThMJT96pFrMWoR4UR VFwA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@lightnvm-io.20150623.gappssmtp.com header.s=20150623 header.b=u9DdSZLc; 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 v12-v6si3183866plz.419.2018.08.29.06.09.22; Wed, 29 Aug 2018 06:09:38 -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=u9DdSZLc; 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 S1728290AbeH2RFI (ORCPT + 99 others); Wed, 29 Aug 2018 13:05:08 -0400 Received: from mail-pf1-f195.google.com ([209.85.210.195]:44671 "EHLO mail-pf1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727537AbeH2RFI (ORCPT ); Wed, 29 Aug 2018 13:05:08 -0400 Received: by mail-pf1-f195.google.com with SMTP id k21-v6so2239323pff.11 for ; Wed, 29 Aug 2018 06:08:15 -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=n2gm/tJ8cTXqdvjAAS276cszFYzzc12+QuZ1BNfGWD8=; b=u9DdSZLc9S8ta+xQqVH3nTqV/dvir8IBPH6lN2om7RCjwdZH5ouEiHs3k4nh4yFERB xML3+Yhql0Kul6I2J6eAzAhNOvsqsySM56hDEbf8ZnkRT03n6otxhmoWEpZSr7kW1dxb huEXbDBC/M9/WhmBa2L0OHH/BeLBlLwvoylTLz9YhR5joC7a8b7qDuS2/E1b14HNF0ga F76qQJMxCrrgj0Dy9fe3cnFhLqERAVAF1/b0JhGL7rj3wfSRMantvU/WapMPRC+P6Ndu MOhXd3pE5ysKQ0cOxcA2XQF2W5dqE0GVRZov8AVYNHlIwrp7qgtMHC5AXEmM/+j0M5L6 GaLA== 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=n2gm/tJ8cTXqdvjAAS276cszFYzzc12+QuZ1BNfGWD8=; b=PegQ7cAqS46fuHWKWbj+GireLel957zDg4K/+VFlxfiYBr20XroG4BoLvjKnJDvbc3 mkc5L8osuod0/vn0ajPOxHUO/2u6tyB6YyG6lIy/PNXQ8tsbjhvEuDyE0e6X9K9ZEaqI i1utkSuQAfQ/EytyQjt/LcdRGMBSgFFRP6k9imhoQpYBaFAkiS4gz7NOe2auotNKhDZ2 hp6S7pL2kiw33ijKof7P7iR/5noU4GEaOnwLtyd0M4O3xm5N9Q3OMMjMfOCOBXKds5Ks uwxXTWCNCjGc0q7iSCgBkAXsXrc+w7hJIfOIYN+hmsl9Hm9a8ZxdFeR8VlfQ64r/0ph9 3TUw== X-Gm-Message-State: APzg51Bzn8YuGpxCilpDLOAa2Ck1W8TltPpRfUymQf6eY1YOnu9irJG1 ugCChamtwrIp6POUIP3OLLxf5w== X-Received: by 2002:a63:7107:: with SMTP id m7-v6mr5625809pgc.73.1535548095656; Wed, 29 Aug 2018 06:08:15 -0700 (PDT) Received: from [10.86.62.45] (rap-us.hgst.com. [199.255.44.250]) by smtp.googlemail.com with ESMTPSA id n18-v6sm7127931pfa.50.2018.08.29.06.08.12 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 29 Aug 2018 06:08:14 -0700 (PDT) Subject: Re: [PATCH 3/3] lightnvm: pblk: take write semaphore on metadata To: javier@javigon.com Cc: axboe@kernel.dk, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, javier@cnexlabs.com References: <1535532980-27672-1-git-send-email-javier@cnexlabs.com> <1535532980-27672-4-git-send-email-javier@cnexlabs.com> From: =?UTF-8?Q?Matias_Bj=c3=b8rling?= Message-ID: Date: Wed, 29 Aug 2018 15:08:10 +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: <1535532980-27672-4-git-send-email-javier@cnexlabs.com> 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 08/29/2018 10:56 AM, Javier González wrote: > pblk guarantees write ordering at a chunk level through a per open chunk > semaphore. At this point, since we only have an open I/O stream for both > user and GC data, the semaphore is per parallel unit. > > For the metadata I/O that is synchronous, the semaphore is not needed as > ordering is guaranteed. However, if the metadata scheme changes or > multiple streams are open, this guarantee might not be preserved. > > This patch makes sure that all writes go through the semaphore, even for > synchronous I/O. This is consistent with pblk's write I/O model. It also > simplifies maintenance since changes in the metadata scheme could cause > ordering issues. > > Signed-off-by: Javier González > --- > drivers/lightnvm/pblk-core.c | 16 +++++++++++++++- > drivers/lightnvm/pblk.h | 1 + > 2 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/drivers/lightnvm/pblk-core.c b/drivers/lightnvm/pblk-core.c > index 767178185f19..1e4dc0c1ed88 100644 > --- a/drivers/lightnvm/pblk-core.c > +++ b/drivers/lightnvm/pblk-core.c > @@ -558,6 +558,20 @@ int pblk_submit_io_sync(struct pblk *pblk, struct nvm_rq *rqd) > return ret; > } > > +int pblk_submit_io_sync_sem(struct pblk *pblk, struct nvm_rq *rqd) > +{ > + struct ppa_addr *ppa_list; > + int ret; > + > + ppa_list = (rqd->nr_ppas > 1) ? rqd->ppa_list : &rqd->ppa_addr; > + > + pblk_down_page(pblk, ppa_list, rqd->nr_ppas); If the debug stuff is killed inside __pblk_down_page, then ppa_list and rqd->nr_ppas does not need to be passed, and this function can be inlined in its caller. Can we kill it? I'll make the patch if you like. > + ret = pblk_submit_io_sync(pblk, rqd); > + pblk_up_page(pblk, ppa_list, rqd->nr_ppas); > + > + return ret; > +} > + > static void pblk_bio_map_addr_endio(struct bio *bio) > { > bio_put(bio); > @@ -788,7 +802,7 @@ static int pblk_line_smeta_write(struct pblk *pblk, struct pblk_line *line, > meta_list[i].lba = lba_list[paddr] = addr_empty; > } > > - ret = pblk_submit_io_sync(pblk, &rqd); > + ret = pblk_submit_io_sync_sem(pblk, &rqd); > if (ret) { > pblk_err(pblk, "smeta I/O submission failed: %d\n", ret); > bio_put(bio); > diff --git a/drivers/lightnvm/pblk.h b/drivers/lightnvm/pblk.h > index c0d9eddd344b..54f937c1fb62 100644 > --- a/drivers/lightnvm/pblk.h > +++ b/drivers/lightnvm/pblk.h > @@ -793,6 +793,7 @@ void pblk_log_write_err(struct pblk *pblk, struct nvm_rq *rqd); > void pblk_log_read_err(struct pblk *pblk, struct nvm_rq *rqd); > int pblk_submit_io(struct pblk *pblk, struct nvm_rq *rqd); > int pblk_submit_io_sync(struct pblk *pblk, struct nvm_rq *rqd); > +int pblk_submit_io_sync_sem(struct pblk *pblk, struct nvm_rq *rqd); > int pblk_submit_meta_io(struct pblk *pblk, struct pblk_line *meta_line); > void pblk_check_chunk_state_update(struct pblk *pblk, struct nvm_rq *rqd); > struct bio *pblk_bio_map_addr(struct pblk *pblk, void *data, >