Commit 909049a7 authored by Wenwei Tao's avatar Wenwei Tao Committed by Jens Axboe
Browse files

lightnvm: store rrpc->soffset in device sector size



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: default avatarWenwei Tao <ww.tao0320@gmail.com>
Updated patch description.
Signed-off-by: default avatarMatias Bjørling <m@bjorling.me>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 66e3d07f
Loading
Loading
Loading
Loading
+10 −7
Original line number Diff line number Diff line
@@ -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)