Commit 761325e2 authored by Dariusz Stojaczyk's avatar Dariusz Stojaczyk Committed by Jim Harris
Browse files

fio_plugin: add proper I/O error handling



When an I/O failed to be issued, fio
used to freeze entirely. From the fio
perspective, that I/O was never being
completed. Fio expected us to complete
it during the I/O thread cleanup & shutdown.
(spdk_fio_getevents, line 578)

This patch makes the I/O issue callback
complete the I/O immediately on any
encountered error. Return codes are now
properly propagated with io_u->error
field. This also allows some additional
error messages to be printed.

Change-Id: I9fc3cb6c6a946b78fc8384701827a815103ed4c6
Signed-off-by: default avatarDariusz Stojaczyk <dariuszx.stojaczyk@intel.com>
Reviewed-on: https://review.gerrithub.io/392534


Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarPaweł Niedźwiecki <pawelx.niedzwiecki@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarDaniel Verkamp <daniel.verkamp@intel.com>
Tested-by: default avatarSPDK Automated Test System <sys_sgsw@intel.com>
parent 3d28498a
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -473,6 +473,7 @@ spdk_fio_completion_cb(struct spdk_bdev_io *bdev_io,
	struct spdk_fio_thread		*fio_thread = td->io_ops_data;

	assert(fio_thread->iocq_count < fio_thread->iocq_size);
	fio_req->io->error = success ? 0 : EIO;
	fio_thread->iocq[fio_thread->iocq_count++] = fio_req->io;

	spdk_bdev_free_io(bdev_io);
@@ -489,7 +490,8 @@ spdk_fio_queue(struct thread_data *td, struct io_u *io_u)

	if (!target) {
		SPDK_ERRLOG("Unable to look up correct I/O target.\n");
		return -1;
		fio_req->io->error = ENODEV;
		return FIO_Q_COMPLETED;
	}

	switch (io_u->ddir) {
@@ -518,7 +520,8 @@ spdk_fio_queue(struct thread_data *td, struct io_u *io_u)
	}

	if (rc != 0) {
		return -abs(rc);
		fio_req->io->error = abs(rc);
		return FIO_Q_COMPLETED;
	}

	return FIO_Q_QUEUED;