From ee909296b464c249bad5d4d3866b18f37408dc8a Mon Sep 17 00:00:00 2001 From: Chunyang Hui Date: Fri, 20 Jul 2018 13:29:50 +0800 Subject: [PATCH] bdev/iscsi: fix bdevperf iscsi reset When testing iscsi reset with bdevperf, all tasks before will be canceled. And the return status will be set to CANCELED. We need to trace this status. For submit_td, sometimes, segfault is thrown because in bdev_iscsi_io_complete the iscsi_io->submit_td points to a invalid address. And assigning the submit_td in bdev_iscsi_submit_request prevent this from happening. Already tested with bdevperf and bdevio for all io types. Change-Id: Ib2bf8e2a111c4b3edb5ed88dfd2c91ed6acc5c48 Signed-off-by: Chunyang Hui Reviewed-on: https://review.gerrithub.io/419932 Tested-by: SPDK CI Jenkins Chandler-Test-Pool: SPDK Automated Test System Reviewed-by: Ziye Yang Reviewed-by: Pawel Wodkowski Reviewed-by: Ben Walker Reviewed-by: Changpeng Liu --- lib/bdev/iscsi/bdev_iscsi.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/bdev/iscsi/bdev_iscsi.c b/lib/bdev/iscsi/bdev_iscsi.c index 288aea875..6a13a836b 100644 --- a/lib/bdev/iscsi/bdev_iscsi.c +++ b/lib/bdev/iscsi/bdev_iscsi.c @@ -227,7 +227,7 @@ bdev_iscsi_command_cb(struct iscsi_context *context, int status, void *_task, vo struct scsi_task *task = _task; struct bdev_iscsi_io *iscsi_io = _iscsi_io; - iscsi_io->scsi_status = task->status; + iscsi_io->scsi_status = status; iscsi_io->sk = (uint8_t)task->sense.key; iscsi_io->asc = (task->sense.ascq >> 8) & 0xFF; iscsi_io->ascq = task->sense.ascq & 0xFF; @@ -491,6 +491,8 @@ static void bdev_iscsi_submit_request(struct spdk_io_channel *_ch, struct spdk_b iscsi_io->submit_td = submit_td; spdk_thread_send_msg(lun->master_td, _bdev_iscsi_submit_request, bdev_io); return; + } else { + iscsi_io->submit_td = NULL; } _bdev_iscsi_submit_request(bdev_io);