From: "Javier González" <jg@lightnvm.io>
To: mb@lightnvm.io, axboe@fb.com
Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org,
"Javier González" <javier@cnexlabs.com>,
"Matias Bjørling" <matias@cnexlabs.com>
Subject: [PATCH 02/18] lightnvm: pblk: refactor read lba sanity check
Date: Wed, 6 Sep 2017 12:50:55 +0200 [thread overview]
Message-ID: <1504695071-25928-3-git-send-email-javier@cnexlabs.com> (raw)
In-Reply-To: <1504695071-25928-1-git-send-email-javier@cnexlabs.com>
Refactor lba sanity check on read path to avoid code duplication.
Signed-off-by: Javier González <javier@cnexlabs.com>
Signed-off-by: Matias Bjørling <matias@cnexlabs.com>
---
drivers/lightnvm/pblk-read.c | 29 ++++++++++-------------------
1 file changed, 10 insertions(+), 19 deletions(-)
diff --git a/drivers/lightnvm/pblk-read.c b/drivers/lightnvm/pblk-read.c
index d682e89e6493..db9a3b575f62 100644
--- a/drivers/lightnvm/pblk-read.c
+++ b/drivers/lightnvm/pblk-read.c
@@ -39,21 +39,14 @@ static int pblk_read_from_cache(struct pblk *pblk, struct bio *bio,
}
static void pblk_read_ppalist_rq(struct pblk *pblk, struct nvm_rq *rqd,
- unsigned long *read_bitmap)
+ sector_t blba, unsigned long *read_bitmap)
{
struct bio *bio = rqd->bio;
struct ppa_addr ppas[PBLK_MAX_REQ_ADDRS];
- sector_t blba = pblk_get_lba(bio);
int nr_secs = rqd->nr_ppas;
bool advanced_bio = false;
int i, j = 0;
- /* logic error: lba out-of-bounds. Ignore read request */
- if (blba + nr_secs >= pblk->rl.nr_secs) {
- WARN(1, "pblk: read lbas out of bounds\n");
- return;
- }
-
pblk_lookup_l2p_seq(pblk, ppas, blba, nr_secs);
for (i = 0; i < nr_secs; i++) {
@@ -263,17 +256,10 @@ static int pblk_fill_partial_read_bio(struct pblk *pblk, struct nvm_rq *rqd,
}
static void pblk_read_rq(struct pblk *pblk, struct nvm_rq *rqd,
- unsigned long *read_bitmap)
+ sector_t lba, unsigned long *read_bitmap)
{
struct bio *bio = rqd->bio;
struct ppa_addr ppa;
- sector_t lba = pblk_get_lba(bio);
-
- /* logic error: lba out-of-bounds. Ignore read request */
- if (lba >= pblk->rl.nr_secs) {
- WARN(1, "pblk: read lba out of bounds\n");
- return;
- }
pblk_lookup_l2p_seq(pblk, &ppa, lba, 1);
@@ -309,14 +295,19 @@ static void pblk_read_rq(struct pblk *pblk, struct nvm_rq *rqd,
int pblk_submit_read(struct pblk *pblk, struct bio *bio)
{
struct nvm_tgt_dev *dev = pblk->dev;
+ sector_t blba = pblk_get_lba(bio);
unsigned int nr_secs = pblk_get_secs(bio);
struct nvm_rq *rqd;
unsigned long read_bitmap; /* Max 64 ppas per request */
unsigned int bio_init_idx;
int ret = NVM_IO_ERR;
- if (nr_secs > PBLK_MAX_REQ_ADDRS)
+ /* logic error: lba out-of-bounds. Ignore read request */
+ if (blba >= pblk->rl.nr_secs || nr_secs > PBLK_MAX_REQ_ADDRS) {
+ WARN(1, "pblk: read lba out of bounds (lba:%llu, nr:%d)\n",
+ (unsigned long long)blba, nr_secs);
return NVM_IO_ERR;
+ }
bitmap_zero(&read_bitmap, nr_secs);
@@ -348,9 +339,9 @@ int pblk_submit_read(struct pblk *pblk, struct bio *bio)
rqd->ppa_list = rqd->meta_list + pblk_dma_meta_size;
rqd->dma_ppa_list = rqd->dma_meta_list + pblk_dma_meta_size;
- pblk_read_ppalist_rq(pblk, rqd, &read_bitmap);
+ pblk_read_ppalist_rq(pblk, rqd, blba, &read_bitmap);
} else {
- pblk_read_rq(pblk, rqd, &read_bitmap);
+ pblk_read_rq(pblk, rqd, blba, &read_bitmap);
}
bio_get(bio);
--
2.7.4
next prev parent reply other threads:[~2017-09-06 10:57 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-09-06 10:50 [PATCH 00/18] lightnvm: pblk patches for 4.14 Javier González
2017-09-06 10:50 ` [PATCH 01/18] lightnvm: pblk: improve naming for internal req Javier González
2017-09-06 13:46 ` Christoph Hellwig
2017-09-06 14:01 ` Javier González
2017-09-06 10:50 ` Javier González [this message]
2017-09-06 10:50 ` [PATCH 03/18] lightnvm: pblk: normalize ppa namings Javier González
2017-09-06 10:50 ` [PATCH 04/18] lightnvm: pblk: check for failed mempool alloc Javier González
2017-09-06 10:50 ` [PATCH 05/18] lightnvm: pblk: initialize debug stat counter Javier González
2017-09-06 10:50 ` [PATCH 06/18] lightnvm: pblk: use right flag for GC allocation Javier González
2017-09-06 10:51 ` [PATCH 07/18] lightnvm: pblk: use constant for GC parameter Javier González
2017-09-06 10:51 ` [PATCH 08/18] lightnvm: pblk: check lba sanity on read path Javier González
2017-09-06 10:51 ` [PATCH 09/18] lightnvm: pblk: simplify data validity check on GC Javier González
2017-09-06 10:51 ` [PATCH 10/18] lightnvm: pblk: use bio_copy_kern when possible Javier González
2017-09-06 13:47 ` Christoph Hellwig
2017-09-06 14:00 ` Javier González
2017-09-07 11:08 ` Christoph Hellwig
2017-09-07 11:20 ` Javier González
2017-09-06 10:51 ` [PATCH 11/18] lightnvm: pblk: refactor read path on GC Javier González
2017-09-06 10:51 ` [PATCH 12/18] lightnvm: pblk: free padded entries in write buffer Javier González
2017-09-06 10:51 ` [PATCH 13/18] lightnvm: pblk: fix write I/O sync stat Javier González
2017-09-06 10:51 ` [PATCH 14/18] lightnvm: pblk: simplify path on REQ_PREFLUSH Javier González
2017-09-06 10:51 ` [PATCH 15/18] lightnvm: pblk: avoid deadlock on low LUN config Javier González
2017-09-06 10:51 ` [PATCH 16/18] lightnvm: pblk: enable 1 LUN configuration Javier González
2017-09-06 10:51 ` [PATCH 17/18] lightnvm: pblk: guarantee line integrity on reads Javier González
2017-09-06 10:51 ` [PATCH 18/18] lightnvm: pblk: remove unnecessary check Javier González
2017-09-06 14:04 ` [PATCH 00/18] lightnvm: pblk patches for 4.14 Jens Axboe
2017-09-06 14:10 ` Javier González
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1504695071-25928-3-git-send-email-javier@cnexlabs.com \
--to=jg@lightnvm.io \
--cc=axboe@fb.com \
--cc=javier@cnexlabs.com \
--cc=linux-block@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=matias@cnexlabs.com \
--cc=mb@lightnvm.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®