Commit c274db3b authored by Michal Mielewczyk's avatar Michal Mielewczyk Committed by Darek Stojaczyk
Browse files

OCF: rebase to ocf master 276d91fcd7



- locks moved from ocf to adapter code,
- 'data object' renamed to 'volume',
- context and volume API reorganized.

Change-Id: Id4670ddfcb8eda9aefabc273497498c5bd3db1d5
Signed-off-by: default avatarMichal Mielewczyk <michal.mielewczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/444092


Reviewed-by: default avatarVitaliy Mysak <vitaliy.mysak@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: default avatarRobert Bałdyga <r.baldyga@hackerion.com>
Reviewed-by: default avatarTomasz Zawadzki <tomasz.zawadzki@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent f96b8293
Loading
Loading
Loading
Loading
+46 −37
Original line number Diff line number Diff line
@@ -322,53 +322,27 @@ vbdev_ocf_ctx_cleaner_stop(ocf_cleaner_t c)
	/* TODO [writeback]: implement with writeback mode support */
}

static int vbdev_ocf_dobj_updater_init(ocf_metadata_updater_t mu)
static int vbdev_ocf_volume_updater_init(ocf_metadata_updater_t mu)
{
	/* TODO [metadata]: implement with persistent metadata support */
	return 0;
}
static void vbdev_ocf_dobj_updater_stop(ocf_metadata_updater_t mu)
static void vbdev_ocf_volume_updater_stop(ocf_metadata_updater_t mu)
{
	/* TODO [metadata]: implement with persistent metadata support */
}
static void vbdev_ocf_dobj_updater_kick(ocf_metadata_updater_t mu)
static void vbdev_ocf_volume_updater_kick(ocf_metadata_updater_t mu)
{
	/* TODO [metadata]: implement with persistent metadata support */
}

static const struct ocf_ctx_ops vbdev_ocf_ctx_ops = {
	.name = "OCF SPDK",

	.data_alloc = vbdev_ocf_ctx_data_alloc,
	.data_free = vbdev_ocf_ctx_data_free,
	.data_mlock = vbdev_ocf_ctx_data_mlock,
	.data_munlock = vbdev_ocf_ctx_data_munlock,
	.data_rd = vbdev_ocf_ctx_data_rd,
	.data_wr = vbdev_ocf_ctx_data_wr,
	.data_zero = vbdev_ocf_ctx_data_zero,
	.data_seek = vbdev_ocf_ctx_data_seek,
	.data_cpy = vbdev_ocf_ctx_data_cpy,
	.data_secure_erase = vbdev_ocf_ctx_data_secure_erase,

	.queue_init = vbdev_ocf_ctx_queue_init,
	.queue_kick = vbdev_ocf_ctx_queue_kick,
	.queue_stop = vbdev_ocf_ctx_queue_stop,

	.cleaner_init = vbdev_ocf_ctx_cleaner_init,
	.cleaner_stop = vbdev_ocf_ctx_cleaner_stop,

	.metadata_updater_init = vbdev_ocf_dobj_updater_init,
	.metadata_updater_stop = vbdev_ocf_dobj_updater_stop,
	.metadata_updater_kick = vbdev_ocf_dobj_updater_kick,
};

/* This function is main way by which OCF communicates with user
 * We don't want to use SPDK_LOG here because debugging information that is
 * associated with every print message is not helpful in callback that only prints info
 * while the real source is somewhere in OCF code */
static int
vbdev_ocf_ctx_log_printf(const struct ocf_logger *logger,
			 ocf_logger_lvl_t lvl, const char *fmt, va_list args)
vbdev_ocf_ctx_log_printf(ocf_logger_t logger, ocf_logger_lvl_t lvl,
			 const char *fmt, va_list args)
{
	FILE *lfile = stdout;

@@ -383,9 +357,46 @@ vbdev_ocf_ctx_log_printf(const struct ocf_logger *logger,
	return vfprintf(lfile, fmt, args);
}

static const struct ocf_logger logger = {
static const struct ocf_ctx_config vbdev_ocf_ctx_cfg = {
	.name = "OCF SPDK",

	.ops = {
		.data = {
			.alloc = vbdev_ocf_ctx_data_alloc,
			.free = vbdev_ocf_ctx_data_free,
			.mlock = vbdev_ocf_ctx_data_mlock,
			.munlock = vbdev_ocf_ctx_data_munlock,
			.read = vbdev_ocf_ctx_data_rd,
			.write = vbdev_ocf_ctx_data_wr,
			.zero = vbdev_ocf_ctx_data_zero,
			.seek = vbdev_ocf_ctx_data_seek,
			.copy = vbdev_ocf_ctx_data_cpy,
			.secure_erase = vbdev_ocf_ctx_data_secure_erase,
		},

		.queue = {
			.init = vbdev_ocf_ctx_queue_init,
			.kick = vbdev_ocf_ctx_queue_kick,
			.stop = vbdev_ocf_ctx_queue_stop,
		},

		.metadata_updater = {
			.init = vbdev_ocf_volume_updater_init,
			.stop = vbdev_ocf_volume_updater_stop,
			.kick = vbdev_ocf_volume_updater_kick,
		},

		.cleaner = {
			.init = vbdev_ocf_ctx_cleaner_init,
			.stop = vbdev_ocf_ctx_cleaner_stop,
		},

		.logger = {
			.printf = vbdev_ocf_ctx_log_printf,
			.dump_stack = NULL,
		},

	},
};

int
@@ -393,13 +404,11 @@ vbdev_ocf_ctx_init(void)
{
	int ret;

	ret = ocf_ctx_init(&vbdev_ocf_ctx, &vbdev_ocf_ctx_ops);
	ret = ocf_ctx_init(&vbdev_ocf_ctx, &vbdev_ocf_ctx_cfg);
	if (ret < 0) {
		return ret;
	}

	ocf_ctx_set_logger(vbdev_ocf_ctx, &logger);

	return 0;
}

+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ extern ocf_ctx_t vbdev_ocf_ctx;

#define OCF_WRITE_FLUSH 11

#define SPDK_OBJECT 0
#define SPDK_OBJECT 1

int vbdev_ocf_ctx_init(void);
void vbdev_ocf_ctx_cleanup(void);
+30 −0
Original line number Diff line number Diff line
@@ -459,6 +459,26 @@ static inline void env_atomic64_dec(env_atomic64 *a)
	atomic_dec(a);
}

static inline int env_atomic64_add_return(int i, env_atomic *a)
{
	return __sync_add_and_fetch(a, i);
}

static inline int env_atomic64_sub_return(int i, env_atomic *a)
{
	return __sync_sub_and_fetch(a, i);
}

static inline int env_atomic64_inc_return(env_atomic *a)
{
	return env_atomic64_add_return(1, a);
}

static inline int env_atomic64_dec_return(env_atomic *a)
{
	return env_atomic_sub_return(1, a);
}

static inline long env_atomic64_cmpxchg(env_atomic64 *a, long old, long new)
{
	return atomic_cmpxchg(a, old, new);
@@ -623,6 +643,16 @@ static inline uint64_t env_ticks_to_msecs(uint64_t j)
	return env_ticks_to_secs(j) * 1000;
}

static inline uint64_t env_ticks_to_nsecs(uint64_t j)
{
	return env_ticks_to_secs(j) * 1000 * 1000;
}

static inline uint64_t env_ticks_to_usecs(uint64_t j)
{
	return env_ticks_to_secs(j) * 1000 * 1000 * 1000;
}

static inline uint64_t env_secs_to_ticks(uint64_t j)
{
	return j * spdk_get_ticks_hz();
+19 −20
Original line number Diff line number Diff line
@@ -35,29 +35,28 @@
#include "stats.h"

int
vbdev_ocf_stats_get(int cache_id, int core_id, struct vbdev_ocf_stats *stats)
vbdev_ocf_stats_get(ocf_cache_t cache, ocf_core_id_t core_id, struct vbdev_ocf_stats *stats)
{
	int status;
	struct ocf_stats_core core_stats;
	ocf_cache_t cache;
	ocf_core_t core;

	status = ocf_mngt_cache_get(vbdev_ocf_ctx, cache_id, &cache);
	if (status) {
		return status;
	if (cache == NULL) {
		assert(false);
		return -EFAULT;
	}

	status = ocf_core_get(cache, 0, &core);
	status = ocf_mngt_cache_read_lock(cache);
	if (status) {
		return status;
	}

	status = ocf_core_get_stats(core, &core_stats);
	status = ocf_core_get(cache, core_id, &core);
	if (status) {
		return status;
	}

	status = ocf_stats_collect_core(core, &stats->usage, &stats->reqs, &stats->blocks, &stats->errors);
	ocf_mngt_cache_read_unlock(cache);
	if (status) {
		return status;
	}
@@ -101,24 +100,24 @@ vbdev_ocf_stats_write_json(struct spdk_json_write_ctx *w, struct vbdev_ocf_stats
	spdk_json_write_object_end(w);

	spdk_json_write_named_object_begin(w, "blocks");
	WJSON_STAT(w, stats, blocks, core_obj_rd, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, core_obj_wr, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, core_obj_total, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, cache_obj_rd, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, cache_obj_wr, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, cache_obj_total, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, core_volume_rd, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, core_volume_wr, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, core_volume_total, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, cache_volume_rd, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, cache_volume_wr, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, cache_volume_total, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, volume_rd, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, volume_wr, "4KiB blocks");
	WJSON_STAT(w, stats, blocks, volume_total, "4KiB blocks");
	spdk_json_write_object_end(w);

	spdk_json_write_named_object_begin(w, "errors");
	WJSON_STAT(w, stats, errors, core_obj_rd, "Requests");
	WJSON_STAT(w, stats, errors, core_obj_wr, "Requests");
	WJSON_STAT(w, stats, errors, core_obj_total, "Requests");
	WJSON_STAT(w, stats, errors, cache_obj_rd, "Requests");
	WJSON_STAT(w, stats, errors, cache_obj_wr, "Requests");
	WJSON_STAT(w, stats, errors, cache_obj_total, "Requests");
	WJSON_STAT(w, stats, errors, core_volume_rd, "Requests");
	WJSON_STAT(w, stats, errors, core_volume_wr, "Requests");
	WJSON_STAT(w, stats, errors, core_volume_total, "Requests");
	WJSON_STAT(w, stats, errors, cache_volume_rd, "Requests");
	WJSON_STAT(w, stats, errors, cache_volume_wr, "Requests");
	WJSON_STAT(w, stats, errors, cache_volume_total, "Requests");
	WJSON_STAT(w, stats, errors, total, "Requests");
	spdk_json_write_object_end(w);

+1 −1
Original line number Diff line number Diff line
@@ -44,7 +44,7 @@ struct vbdev_ocf_stats {
	struct ocf_stats_errors errors;
};

int vbdev_ocf_stats_get(int cache_id, int core_id, struct vbdev_ocf_stats *stats);
int vbdev_ocf_stats_get(ocf_cache_t cache, ocf_core_id_t core_id, struct vbdev_ocf_stats *stats);

void vbdev_ocf_stats_write_json(struct spdk_json_write_ctx *w, struct vbdev_ocf_stats *stats);

Loading