Recent changes (master)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The following changes since commit 2bce52c621f0e1d7a360e8aedfe23300f8e56bb9:

  engines/cpu: fix potential overflow in thinktime calculation (2018-09-30 08:41:40 -0600)

are available in the git repository at:

  git://git.kernel.dk/fio.git master

for you to fetch changes up to 21f277b89029e7729d2dc631572244361ea7718c:

  engines/rados: use fio provided file names (2018-10-01 08:18:10 -0600)

----------------------------------------------------------------
Adam Kupczyk (1):
      engines/rados: use fio provided file names

 engines/rados.c | 52 +++++++++++++++-------------------------------------
 1 file changed, 15 insertions(+), 37 deletions(-)

---

Diff of recent changes:

diff --git a/engines/rados.c b/engines/rados.c
index c6aec73..86100dc 100644
--- a/engines/rados.c
+++ b/engines/rados.c
@@ -21,8 +21,6 @@ struct fio_rados_iou {
 struct rados_data {
 	rados_t cluster;
 	rados_ioctx_t io_ctx;
-	char **objects;
-	size_t object_count;
 	struct io_u **aio_events;
 	bool connected;
 };
@@ -96,18 +94,11 @@ static int _fio_setup_rados_data(struct thread_data *td,
 	rados->aio_events = calloc(td->o.iodepth, sizeof(struct io_u *));
 	if (!rados->aio_events)
 		goto failed;
-
-	rados->object_count = td->o.nr_files;
-	rados->objects = calloc(rados->object_count, sizeof(char*));
-	if (!rados->objects)
-		goto failed;
-
 	*rados_data_ptr = rados;
 	return 0;
 
 failed:
 	if (rados) {
-		rados->object_count = 0;
 		if (rados->aio_events)
 			free(rados->aio_events);
 		free(rados);
@@ -115,15 +106,12 @@ failed:
 	return 1;
 }
 
-static void _fio_rados_rm_objects(struct rados_data *rados)
+static void _fio_rados_rm_objects(struct thread_data *td, struct rados_data *rados)
 {
 	size_t i;
-	for (i = 0; i < rados->object_count; ++i) {
-		if (rados->objects[i]) {
-			rados_remove(rados->io_ctx, rados->objects[i]);
-			free(rados->objects[i]);
-			rados->objects[i] = NULL;
-		}
+	for (i = 0; i < td->o.nr_files; i++) {
+		struct fio_file *f = td->files[i];
+		rados_remove(rados->io_ctx, f->file_name);
 	}
 }
 
@@ -136,7 +124,6 @@ static int _fio_rados_connect(struct thread_data *td)
 		td->o.size / (td->o.nr_files ? td->o.nr_files : 1u);
 	struct fio_file *f;
 	uint32_t i;
-	size_t oname_len = 0;
 
 	if (o->cluster_name) {
 		char *client_name = NULL;
@@ -165,6 +152,11 @@ static int _fio_rados_connect(struct thread_data *td)
 	} else
 		r = rados_create(&rados->cluster, o->client_name);
 
+	if (o->pool_name == NULL) {
+		log_err("rados pool name must be provided.\n");
+		goto failed_early;
+	}
+
 	if (r < 0) {
 		log_err("rados_create failed.\n");
 		goto failed_early;
@@ -188,30 +180,18 @@ static int _fio_rados_connect(struct thread_data *td)
 		goto failed_shutdown;
 	}
 
-	for (i = 0; i < rados->object_count; i++) {
+	for (i = 0; i < td->o.nr_files; i++) {
 		f = td->files[i];
 		f->real_file_size = file_size;
-		f->engine_pos = i;
-
-		oname_len = strlen(f->file_name) + 32;
-		rados->objects[i] = malloc(oname_len);
-		/* vary objects for different jobs */
-		snprintf(rados->objects[i], oname_len - 1,
-			"fio_rados_bench.%s.%x",
-			f->file_name, td->thread_number);
-		r = rados_write(rados->io_ctx, rados->objects[i], "", 0, 0);
+		r = rados_write(rados->io_ctx, f->file_name, "", 0, 0);
 		if (r < 0) {
-			free(rados->objects[i]);
-			rados->objects[i] = NULL;
-			log_err("error creating object.\n");
 			goto failed_obj_create;
 		}
 	}
-
-  return 0;
+	return 0;
 
 failed_obj_create:
-	_fio_rados_rm_objects(rados);
+	_fio_rados_rm_objects(td, rados);
 	rados_ioctx_destroy(rados->io_ctx);
 	rados->io_ctx = NULL;
 failed_shutdown:
@@ -226,8 +206,6 @@ static void _fio_rados_disconnect(struct rados_data *rados)
 	if (!rados)
 		return;
 
-	_fio_rados_rm_objects(rados);
-
 	if (rados->io_ctx) {
 		rados_ioctx_destroy(rados->io_ctx);
 		rados->io_ctx = NULL;
@@ -244,8 +222,8 @@ static void fio_rados_cleanup(struct thread_data *td)
 	struct rados_data *rados = td->io_ops_data;
 
 	if (rados) {
+		_fio_rados_rm_objects(td, rados);
 		_fio_rados_disconnect(rados);
-		free(rados->objects);
 		free(rados->aio_events);
 		free(rados);
 	}
@@ -256,7 +234,7 @@ static enum fio_q_status fio_rados_queue(struct thread_data *td,
 {
 	struct rados_data *rados = td->io_ops_data;
 	struct fio_rados_iou *fri = io_u->engine_data;
-	char *object = rados->objects[io_u->file->engine_pos];
+	char *object = io_u->file->file_name;
 	int r = -1;
 
 	fio_ro_check(td, io_u);



[Index of Archives]     [Linux Kernel]     [Linux SCSI]     [Linux IDE]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux SCSI]

  Powered by Linux