From patchwork Thu Feb 11 12:23:42 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?UTF-8?q?Javier=20Gonz=C3=A1lez?= X-Patchwork-Id: 8278761 Return-Path: X-Original-To: patchwork-linux-block@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 470CD9F88A for ; Thu, 11 Feb 2016 12:24:29 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 62B662035D for ; Thu, 11 Feb 2016 12:24:28 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 72AA82025B for ; Thu, 11 Feb 2016 12:24:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752268AbcBKMYF (ORCPT ); Thu, 11 Feb 2016 07:24:05 -0500 Received: from mail-wm0-f42.google.com ([74.125.82.42]:33954 "EHLO mail-wm0-f42.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751175AbcBKMYC (ORCPT ); Thu, 11 Feb 2016 07:24:02 -0500 Received: by mail-wm0-f42.google.com with SMTP id 128so18827770wmz.1 for ; Thu, 11 Feb 2016 04:24:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lightnvm-io.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:mime-version:content-type :content-transfer-encoding; bh=1cAKi4EbSz3kl47v2nkcNrPEgOmm0D1gTOfZ04W4dhI=; b=PLjpX8aAiWoOSTunnyqmsPayEO9POFaMp4bndldYFyXJrnNSXjjczSU4VwaUHfWLTc EvUhScyHU/5gBvx0fFOePsBzg1WyGDKHuo13t7+KZHOvxgEbO5AdqHXNx275n72TwyDI OCQfZsoBQQVCtMgQ+xIZhJDVODFc2J6ATPzyqhuN+ZCBsEKNgBS3u2pPDkkVQYWtRDtN N8QbQmp4tTCtOazHpFwy3ny4Wq53swo9JMIIq3Cqix//KxZDzVwnLoF57CJ9XCZ4eRu0 sMw6VDt9OUgTauBZcYLuqtgjxZW9vdMjdcXfov8aX2L11BiCj6k6ObDG0MMlNoQ/C+R0 gIzw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-type:content-transfer-encoding; bh=1cAKi4EbSz3kl47v2nkcNrPEgOmm0D1gTOfZ04W4dhI=; b=HOAK87BOinbGsU5+2G13vIh3FY3bF+2GayQCZkr46jTSGQxv0RKgfCjHH/UttjSxgD XfkuTkkrZThvMfg5Jxxn21Kcw1RrHDFE0Rc9gnniadrFd2GkBNBouUaGl+fBXsvr89Cd HMhQuoppYUn8BM951lzuIOhth+vjjpOaSiNedDoy9i+RJCFm4PmDr89PlBdpoVZI2dOh DHOvUYrSCzJZJWaysNeIU8bnRDfAE9bedQDRzZdAO0NWKbH/3ye+8/CRxMaRmRG5TM9i 1FlguQbIp3cs9j8F5cJts6UXWY8RelW8pQSHn+bIZMASjWJxO3dEGv/6f2i5GLGI/X+P FhKw== X-Gm-Message-State: AG10YOS2IcG7ZsHtVCRrCdlb38bWEU98PAsP9+aGDsY835YLsIsw1hOackti6P+17nw+xg== X-Received: by 10.28.180.193 with SMTP id d184mr16642883wmf.64.1455193441573; Thu, 11 Feb 2016 04:24:01 -0800 (PST) Received: from localhost.localdomain (6164198-cl69.boa.fiberby.dk. [193.106.164.198]) by smtp.gmail.com with ESMTPSA id 73sm4157195wmy.22.2016.02.11.04.24.00 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 11 Feb 2016 04:24:00 -0800 (PST) From: "=?UTF-8?q?Javier=20Gonz=C3=A1lez?=" X-Google-Original-From: =?UTF-8?q?Javier=20Gonz=C3=A1lez?= To: mb@lightnvm.io Cc: linux-kernel@vger.kernel.org, linux-block@vger.kernel.org, =?UTF-8?q?Javier=20Gonz=C3=A1lez?= Subject: [PATCH] lightnvm: use lun block id when using several LUNs Date: Thu, 11 Feb 2016 13:23:42 +0100 Message-Id: <1455193422-19897-1-git-send-email-javier@javigon.com> X-Mailer: git-send-email 2.1.4 MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Spam-Status: No, score=-7.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_HI,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP In rrpc, some calculations using block ids assume only one LUN being used. This is a problem when an Open-Channel SSD with multiple LUNs is used. This patch modifies this calculations. Signed-off-by: Javier González --- drivers/lightnvm/rrpc.c | 5 +++-- drivers/lightnvm/rrpc.h | 9 +++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c index c2f9a64..c744662 100644 --- a/drivers/lightnvm/rrpc.c +++ b/drivers/lightnvm/rrpc.c @@ -119,8 +119,9 @@ static int block_is_full(struct rrpc *rrpc, struct rrpc_block *rblk) static u64 block_to_addr(struct rrpc *rrpc, struct rrpc_block *rblk) { struct nvm_block *blk = rblk->parent; + int lun_blk = blk->id % rrpc->nr_luns; - return blk->id * rrpc->dev->pgs_per_blk; + return lun_blk * rrpc->dev->pgs_per_blk; } static struct ppa_addr linear_to_generic_addr(struct nvm_dev *dev, @@ -191,7 +192,7 @@ static struct rrpc_block *rrpc_get_blk(struct rrpc *rrpc, struct rrpc_lun *rlun, return NULL; } - rblk = &rlun->blocks[blk->id]; + rblk = rrpc_get_rblk(rlun, blk->id); list_add_tail(&rblk->list, &rlun->open_list); spin_unlock(&lun->lock); diff --git a/drivers/lightnvm/rrpc.h b/drivers/lightnvm/rrpc.h index 1c4b1c9..2653484 100644 --- a/drivers/lightnvm/rrpc.h +++ b/drivers/lightnvm/rrpc.h @@ -157,6 +157,15 @@ struct rrpc_rev_addr { u64 addr; }; +static inline struct rrpc_block *rrpc_get_rblk(struct rrpc_lun *rlun, + int blk_id) +{ + struct rrpc *rrpc = rlun->rrpc; + int lun_blk = blk_id % rrpc->dev->blks_per_lun; + + return &rlun->blocks[lun_blk]; +} + static inline sector_t rrpc_get_laddr(struct bio *bio) { return bio->bi_iter.bi_sector / NR_PHY_IN_LOG;