lkml.org 
[lkml]   [2016]   [May]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 08/28] lightnvm: store rrpc->soffset in device sector size
    Date
    From: Wenwei Tao <ww.tao0320@gmail.com>

    Since we mainly use soffset in device sector size, we therefore store
    this value in rrpc->soffset, instead of the offset in 512byte sector
    size. This eliminates the "(ilog2(dev->sec_size) - 9)" calculation on
    each I/O.

    Signed-off-by: Wenwei Tao <ww.tao0320@gmail.com>
    Updated patch description.
    Signed-off-by: Matias Bjørling <m@bjorling.me>
    ---
    drivers/lightnvm/rrpc.c | 17 ++++++++++-------
    1 file changed, 10 insertions(+), 7 deletions(-)

    diff --git a/drivers/lightnvm/rrpc.c b/drivers/lightnvm/rrpc.c
    index c0e303c..3143b98 100644
    --- a/drivers/lightnvm/rrpc.c
    +++ b/drivers/lightnvm/rrpc.c
    @@ -1039,11 +1039,8 @@ static int rrpc_map_init(struct rrpc *rrpc)
    {
    struct nvm_dev *dev = rrpc->dev;
    sector_t i;
    - u64 slba;
    int ret;

    - slba = rrpc->soffset >> (ilog2(dev->sec_size) - 9);
    -
    rrpc->trans_map = vzalloc(sizeof(struct rrpc_addr) * rrpc->nr_sects);
    if (!rrpc->trans_map)
    return -ENOMEM;
    @@ -1065,8 +1062,8 @@ static int rrpc_map_init(struct rrpc *rrpc)
    return 0;

    /* Bring up the mapping table from device */
    - ret = dev->ops->get_l2p_tbl(dev, slba, rrpc->nr_sects, rrpc_l2p_update,
    - rrpc);
    + ret = dev->ops->get_l2p_tbl(dev, rrpc->soffset, rrpc->nr_sects,
    + rrpc_l2p_update, rrpc);
    if (ret) {
    pr_err("nvm: rrpc: could not read L2P table.\n");
    return -EINVAL;
    @@ -1220,18 +1217,24 @@ static int rrpc_area_init(struct rrpc *rrpc, sector_t *begin)
    struct nvm_dev *dev = rrpc->dev;
    struct nvmm_type *mt = dev->mt;
    sector_t size = rrpc->nr_sects * dev->sec_size;
    + int ret;

    size >>= 9;

    - return mt->get_area(dev, begin, size);
    + ret = mt->get_area(dev, begin, size);
    + if (!ret)
    + *begin >>= (ilog2(dev->sec_size) - 9);
    +
    + return ret;
    }

    static void rrpc_area_free(struct rrpc *rrpc)
    {
    struct nvm_dev *dev = rrpc->dev;
    struct nvmm_type *mt = dev->mt;
    + sector_t begin = rrpc->soffset << (ilog2(dev->sec_size) - 9);

    - mt->put_area(dev, rrpc->soffset);
    + mt->put_area(dev, begin);
    }

    static void rrpc_free(struct rrpc *rrpc)
    --
    2.1.4
    \
     
     \ /
      Last update: 2016-05-06 20:21    [W:3.040 / U:1.168 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site