Commit ef468ff7 authored by Lance Hartmann's avatar Lance Hartmann Committed by Ben Walker
Browse files

fio/nvme: Fix segfault upon fio completion.



Cancel the thread polling admin completions only after
all of the individual fio threads have been cleaned up.

Change-Id: I6ddedf043664073631f2161d3969ae743323003b
Signed-off-by: default avatarLance Hartmann <lance.hartmann@oracle.com>
Reviewed-on: https://review.gerrithub.io/420575


Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarZiye Yang <optimistyzy@gmail.com>
Reviewed-by: default avatarJohn Kariuki <John.K.Kariuki@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com>
parent 2a55d703
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -820,14 +820,11 @@ static void spdk_fio_cleanup(struct thread_data *td)

	free(fio_thread);

	if (pthread_cancel(g_ctrlr_thread_id) == 0) {
		pthread_join(g_ctrlr_thread_id, NULL);
	}

	pthread_mutex_lock(&mutex);
	td_count--;
	if (td_count == 0) {
		struct spdk_fio_ctrlr	*fio_ctrlr, *fio_ctrlr_tmp;

		fio_ctrlr = ctrlr_g;
		while (fio_ctrlr != NULL) {
			spdk_nvme_detach(fio_ctrlr->ctrlr);
@@ -835,8 +832,14 @@ static void spdk_fio_cleanup(struct thread_data *td)
			free(fio_ctrlr);
			fio_ctrlr = fio_ctrlr_tmp;
		}
		ctrlr_g = NULL;
	}
	pthread_mutex_unlock(&mutex);
	if (!ctrlr_g) {
		if (pthread_cancel(g_ctrlr_thread_id) == 0) {
			pthread_join(g_ctrlr_thread_id, NULL);
		}
	}
}

/* This function enables addition of SPDK parameters to the fio config