Commit aea8e78d authored by Wojciech Malikowski's avatar Wojciech Malikowski Committed by Tomasz Zawadzki
Browse files

lib/ftl: Consume whole underlying OCSSD device



Moving to zoned bdev API will not allow to setup
physical range of underlying device so we need to
remove such capabilities from ftl device.

Change-Id: Ia807a11e992a221fce906d4ab122a6c3b1391280
Signed-off-by: default avatarWojciech Malikowski <wojciech.malikowski@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/467949


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Community-CI: Broadcom SPDK FC-NVMe CI <spdk-ci.pdl@broadcom.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
parent 52a9661d
Loading
Loading
Loading
Loading
+0 −10
Original line number Diff line number Diff line
@@ -103,12 +103,6 @@ struct spdk_ftl_conf {
	} nv_cache;
};

/* Range of parallel units (inclusive) */
struct spdk_ftl_punit_range {
	unsigned int				begin;
	unsigned int				end;
};

enum spdk_ftl_mode {
	/* Create new device */
	SPDK_FTL_MODE_CREATE = (1 << 0),
@@ -131,8 +125,6 @@ struct spdk_ftl_dev_init_opts {
	const struct spdk_ftl_conf		*conf;
	/* Device's name */
	const char				*name;
	/* Parallel unit range */
	struct spdk_ftl_punit_range		range;
	/* Mode flags */
	unsigned int				mode;
	/* Device UUID (valid when restoring device from disk) */
@@ -142,8 +134,6 @@ struct spdk_ftl_dev_init_opts {
struct spdk_ftl_attrs {
	/* Device's UUID */
	struct spdk_uuid			uuid;
	/* Parallel unit range */
	struct spdk_ftl_punit_range		range;
	/* Number of logical blocks */
	uint64_t				lbk_cnt;
	/* Logical block size */
+0 −4
Original line number Diff line number Diff line
@@ -192,10 +192,6 @@ ftl_anm_in_poller_range(struct ftl_anm_poller *poller,
		return false;
	}

	if (!ftl_addr_in_range(dev, addr)) {
		return false;
	}

	return true;
}

+6 −17
Original line number Diff line number Diff line
@@ -518,25 +518,16 @@ ftl_band_from_addr(struct spdk_ftl_dev *dev, struct ftl_addr addr)
struct ftl_zone *
ftl_band_zone_from_addr(struct ftl_band *band, struct ftl_addr addr)
{
	struct spdk_ftl_dev *dev = band->dev;
	unsigned int punit;

	punit = ftl_addr_flatten_punit(dev, addr);
	assert(punit < ftl_dev_num_punits(dev));

	return &band->zone_buf[punit];
	assert(addr.pu < ftl_dev_num_punits(band->dev));
	return &band->zone_buf[addr.pu];
}

uint64_t
ftl_band_lbkoff_from_addr(struct ftl_band *band, struct ftl_addr addr)
{
	struct spdk_ftl_dev *dev = band->dev;
	unsigned int punit;

	punit = ftl_addr_flatten_punit(dev, addr);
	assert(addr.zone_id == band->id);

	return punit * ftl_dev_lbks_in_zone(dev) + addr.offset;
	assert(addr.pu < ftl_dev_num_punits(band->dev));
	return addr.pu * ftl_dev_lbks_in_zone(band->dev) + addr.offset;
}

struct ftl_addr
@@ -544,13 +535,11 @@ ftl_band_next_xfer_addr(struct ftl_band *band, struct ftl_addr addr, size_t num_
{
	struct spdk_ftl_dev *dev = band->dev;
	struct ftl_zone *zone;
	unsigned int punit_num;
	size_t num_xfers, num_stripes;

	assert(addr.zone_id == band->id);

	punit_num = ftl_addr_flatten_punit(dev, addr);
	zone = &band->zone_buf[punit_num];
	zone = ftl_band_zone_from_addr(band, addr);

	num_lbks += (addr.offset % dev->xfer_size);
	addr.offset  -= (addr.offset % dev->xfer_size);
@@ -633,7 +622,7 @@ ftl_band_addr_from_lbkoff(struct ftl_band *band, uint64_t lbkoff)
	struct spdk_ftl_dev *dev = band->dev;
	uint64_t punit;

	punit = lbkoff / ftl_dev_lbks_in_zone(dev) + dev->range.begin;
	punit = lbkoff / ftl_dev_lbks_in_zone(dev);

	addr.offset = lbkoff % ftl_dev_lbks_in_zone(dev);
	addr.zone_id = band->id;
+0 −1
Original line number Diff line number Diff line
@@ -1887,7 +1887,6 @@ spdk_ftl_dev_get_attrs(const struct spdk_ftl_dev *dev, struct spdk_ftl_attrs *at
	attrs->uuid = dev->uuid;
	attrs->lbk_cnt = dev->num_lbas;
	attrs->lbk_size = FTL_BLOCK_SIZE;
	attrs->range = dev->range;
	attrs->cache_bdev_desc = dev->nv_cache.bdev_desc;
	attrs->num_zones = dev->geo.num_chk;
	attrs->zone_size = dev->geo.clba;
+1 −19
Original line number Diff line number Diff line
@@ -183,8 +183,6 @@ struct spdk_ftl_dev {
	/* Statistics */
	struct ftl_stats			stats;

	/* Parallel unit range */
	struct spdk_ftl_punit_range		range;
	/* Array of parallel units */
	struct ftl_punit			*punits;

@@ -416,22 +414,6 @@ ftl_addr_from_packed(const struct spdk_ftl_dev *dev, struct ftl_addr p)
	return addr;
}

static inline unsigned int
ftl_addr_flatten_punit(const struct spdk_ftl_dev *dev, struct ftl_addr addr)
{
	return addr.pu - dev->range.begin;
}

static inline int
ftl_addr_in_range(const struct spdk_ftl_dev *dev, struct ftl_addr addr)
{
	if (addr.pu >= dev->range.begin && addr.pu <= dev->range.end) {
		return 1;
	}

	return 0;
}

#define _ftl_l2p_set(l2p, off, val, bits) \
	__atomic_store_n(((uint##bits##_t *)(l2p)) + (off), val, __ATOMIC_SEQ_CST)

@@ -492,7 +474,7 @@ ftl_dev_lbks_in_zone(const struct spdk_ftl_dev *dev)
static inline size_t
ftl_dev_num_punits(const struct spdk_ftl_dev *dev)
{
	return dev->range.end - dev->range.begin + 1;
	return dev->geo.num_pu * dev->geo.num_grp;
}

static inline uint64_t
Loading