Received: by 2002:ac0:a5a6:0:0:0:0:0 with SMTP id m35-v6csp367585imm; Wed, 29 Aug 2018 01:58:43 -0700 (PDT) X-Google-Smtp-Source: ANB0VdYmvPuBCwmPrX5XpUKcyiD/EnWonshYBEoD8alPENTXNLqO/ezJlGHYNbMXbZk/+KAKg3qH X-Received: by 2002:a17:902:7884:: with SMTP id q4-v6mr5031181pll.174.1535533123018; Wed, 29 Aug 2018 01:58:43 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1535533122; cv=none; d=google.com; s=arc-20160816; b=Eqj9ejw+L1SUS4MS2eRCc74OAhHziMt1gntjgUdHYMqf+D0rpmtCtECybkRGV0+wjy UBq5cVd+L6OUfb8Q9lLmF6vUbB2xcs8IlCxqYKtWpe4/7yxwZn3pmG2PSBTP+brzrdH+ uaNX/Sug3v0PFwOelU6bpcxkKV23X3SQmdISz+i4e0VzzPt/DLSPLNzBO5qaEIoCFBrZ UPaoQu0oTam6WCOVg9V6pytR4qOzig4W2286Zn8OxDRdumGDdBLli1NrTsB2+UY52FNG fqrIjNGfxSCX1akzq280Q9VzVkbduDy5bzez0uwyZ29/l9LGToKEGkWJpEm13Up+fZOa W/LQ== 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:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature:arc-authentication-results; bh=WCgTltU4L/jb9jPpj/o/ZnKv3o9cBTovLOPOmsj5eQE=; b=EHqxkURa8eRjm8/eBwbYwbDJeglWmMIGU7+wEcBU6aJVq2HY5qSvoip9OP8ykNDYUv KJkMr2pvSa2RM1AX8oYumgNAsY+H7kTvfeg3xY0HCvuvFyyau4SeiPWrVKXtOA2F9N9P nbUsE37tIPcR7PpLJLX7sBEMHIWah3UYbq51lwhB4GnMNDPkGRysl1wrCzzVMXiG7GJ1 hU6rwL5BMdPEsz8NPYdS7/V+OTZluXbeXEFYjqEOE/Wtd6Fxan+pHOgN8BFMkMU/wQ2U 2ZrRgTHrH4q5T1WndDPWj+dLjUkS2KK5yUt4EY1lJ8xi8gwGGFD971HBWb0KogLwE4gu YJzg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@javigon-com.20150623.gappssmtp.com header.s=20150623 header.b=qpck2XNX; 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 j124-v6si3788166pfb.191.2018.08.29.01.58.27; Wed, 29 Aug 2018 01:58:42 -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=@javigon-com.20150623.gappssmtp.com header.s=20150623 header.b=qpck2XNX; 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 S1728077AbeH2MwY (ORCPT + 99 others); Wed, 29 Aug 2018 08:52:24 -0400 Received: from mail-ed1-f67.google.com ([209.85.208.67]:38148 "EHLO mail-ed1-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727988AbeH2MwX (ORCPT ); Wed, 29 Aug 2018 08:52:23 -0400 Received: by mail-ed1-f67.google.com with SMTP id h33-v6so3351253edb.5 for ; Wed, 29 Aug 2018 01:56:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=javigon-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WCgTltU4L/jb9jPpj/o/ZnKv3o9cBTovLOPOmsj5eQE=; b=qpck2XNXHAw0aFGw3FaEfRyUih7ZAJnLYNL5X2W2ieAgSoCeb7jJigzuM3nIxqS7s0 xHuOj2U8+Sy1gXKCvCQ+4ZrMp+imhQ/+dnwt0Or0u2X+8YtdmrpO+pi50EFncNDtMhsZ szHCzzhBIdCrdsdmirxkeb2zpNx+yPxRCTPcvSl9HKpS/6DT0pjDkBf50g3UuOihl94N TFcHVz6FZ/Nyrh5P7NkC1549lwWUlyXoCDYN4YFlvYoxJI3NPkoh0aOLrLjFv2YLrWih jyJlUYIpgje/4DrZRygdTMir2q7eKZ3F7ylEkJZVU2mO3EWOuVcFpHn+Jz6ktbr8DdWz Dd4g== 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:mime-version:content-transfer-encoding; bh=WCgTltU4L/jb9jPpj/o/ZnKv3o9cBTovLOPOmsj5eQE=; b=LRrKEMbSWQ3h0Sht1M+VkfaUrCwxAQMhjkzHZCazQw6Z2t5CEPfC0zT0252ejNojya 2TeihVcJsD2T2s1dtje0eHc9VJJj5P+crYeU+OuVoOVdMxQZfgtkkfTSbGmu1+KCeQKC btbPFmpinlEFftzI7kLb2QBDLMkkKQ9C3nLeS9QeH/cdjl9y/s8A1WpbR2G31Q8iIcc3 jo7ZmpHxNOE+PzTU9HLNdIUIafeRamVQaTuYYHp1V28fx0+PILBpQMFbGOzdepVL780S qkFCjjFlDlamzBtiJnHIj4Gf2xdZKFncDkk21nt98OH7cJQSlq64NTEvhgTfdGC8lm4V KtoA== X-Gm-Message-State: APzg51B7AsClfU8fLQMFP9NEyWGCyKTv7+KeLR83r+RNHtoo3w8g6Sio ms/V/eG2Sqdbny+QupufrU5WkA== X-Received: by 2002:a50:a7a2:: with SMTP id i31-v6mr6819392edc.296.1535532989917; Wed, 29 Aug 2018 01:56:29 -0700 (PDT) Received: from ch-wrk-javier.cnexlabs.com (6164211-cl69.boa.fiberby.dk. [193.106.164.211]) by smtp.gmail.com with ESMTPSA id w22-v6sm1867867eda.34.2018.08.29.01.56.29 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 29 Aug 2018 01:56:29 -0700 (PDT) From: "=?UTF-8?q?Javier=20Gonz=C3=A1lez?=" X-Google-Original-From: =?UTF-8?q?Javier=20Gonz=C3=A1lez?= To: mb@lightnvm.io Cc: axboe@kernel.dk, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, =?UTF-8?q?Javier=20Gonz=C3=A1lez?= Subject: [PATCH 3/3] lightnvm: pblk: take write semaphore on metadata Date: Wed, 29 Aug 2018 10:56:20 +0200 Message-Id: <1535532980-27672-4-git-send-email-javier@cnexlabs.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1535532980-27672-1-git-send-email-javier@cnexlabs.com> References: <1535532980-27672-1-git-send-email-javier@cnexlabs.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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); + 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, -- 2.7.4