lkml.org 
[lkml]   [2018]   [Dec]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[GIT PULL 19/21] lightnvm: disable interleaved metadata
    Date
    From: Igor Konopko <igor.j.konopko@intel.com>

    Currently pblk only check the size of I/O metadata and does not take
    into account if this metadata is in a separate buffer or interleaved
    in a single metadata buffer.

    In reality only the first scenario is supported, where second mode will
    break pblk functionality during any IO operation.

    This patch prevents pblk to be instantiated in case device only
    supports interleaved metadata.

    Reviewed-by: Javier González <javier@cnexlabs.com>
    Signed-off-by: Igor Konopko <igor.j.konopko@intel.com>
    Signed-off-by: Matias Bjørling <mb@lightnvm.io>
    ---
    drivers/lightnvm/pblk-init.c | 6 ++++++
    drivers/nvme/host/lightnvm.c | 1 +
    include/linux/lightnvm.h | 1 +
    3 files changed, 8 insertions(+)

    diff --git a/drivers/lightnvm/pblk-init.c b/drivers/lightnvm/pblk-init.c
    index ff6a6df369c3..e8055b796381 100644
    --- a/drivers/lightnvm/pblk-init.c
    +++ b/drivers/lightnvm/pblk-init.c
    @@ -1175,6 +1175,12 @@ static void *pblk_init(struct nvm_tgt_dev *dev, struct gendisk *tdisk,
    return ERR_PTR(-EINVAL);
    }

    + if (geo->ext) {
    + pblk_err(pblk, "extended metadata not supported\n");
    + kfree(pblk);
    + return ERR_PTR(-EINVAL);
    + }
    +
    spin_lock_init(&pblk->resubmit_lock);
    spin_lock_init(&pblk->trans_lock);
    spin_lock_init(&pblk->lock);
    diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
    index ba268d7cf141..f145fc0220d6 100644
    --- a/drivers/nvme/host/lightnvm.c
    +++ b/drivers/nvme/host/lightnvm.c
    @@ -990,6 +990,7 @@ int nvme_nvm_register(struct nvme_ns *ns, char *disk_name, int node)
    geo = &dev->geo;
    geo->csecs = 1 << ns->lba_shift;
    geo->sos = ns->ms;
    + geo->ext = ns->ext;

    dev->q = q;
    memcpy(dev->name, disk_name, DISK_NAME_LEN);
    diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h
    index 7afedaddbd15..5d865a5d5cdc 100644
    --- a/include/linux/lightnvm.h
    +++ b/include/linux/lightnvm.h
    @@ -357,6 +357,7 @@ struct nvm_geo {
    u32 clba; /* sectors per chunk */
    u16 csecs; /* sector size */
    u16 sos; /* out-of-band area size */
    + bool ext; /* metadata in extended data buffer */

    /* device write constrains */
    u32 ws_min; /* minimum write size */
    --
    2.17.1
    \
     
     \ /
      Last update: 2018-12-11 20:18    [W:5.444 / U:0.268 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site