scsi: iscsi: Add support for asynchronous iSCSI session destruction
iSCSI session destruction can be arbitrarily slow, since it might require network operations and serialization inside the SCSI layer. This patch adds a new user event to trigger the destruction work asynchronously, releasing the rx_queue_mutex as soon as the operation is queued and before it is performed. This change allows other operations to run in other sessions in the meantime, removing one of the major iSCSI bottlenecks for us. To prevent the session from being used after the destruction request, we remove it immediately from the sesslist. This simplifies the locking required during the asynchronous removal. Link: https://lore.kernel.org/r/20200227195945.761719-1-krisman@collabora.com Co-developed-by: Gabriel Krisman Bertazi <krisman@collabora.com> Co-developed-by: Khazhismel Kumykov <khazhy@google.com> Reviewed-by: Lee Duncan <lduncan@suse.com> Signed-off-by: Gabriel Krisman Bertazi <krisman@collabora.com> Signed-off-by: Frank Mayhar <fmayhar@google.com> Signed-off-by: Khazhismel Kumykov <khazhy@google.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
committed by
Martin K. Petersen
parent
bef18d308a
commit
cc6b32ee3b
@ -60,6 +60,7 @@ enum iscsi_uevent_e {
|
||||
ISCSI_UEVENT_LOGOUT_FLASHNODE_SID = UEVENT_BASE + 30,
|
||||
ISCSI_UEVENT_SET_CHAP = UEVENT_BASE + 31,
|
||||
ISCSI_UEVENT_GET_HOST_STATS = UEVENT_BASE + 32,
|
||||
ISCSI_UEVENT_DESTROY_SESSION_ASYNC = UEVENT_BASE + 33,
|
||||
|
||||
/* up events */
|
||||
ISCSI_KEVENT_RECV_PDU = KEVENT_BASE + 1,
|
||||
|
@ -226,6 +226,7 @@ struct iscsi_cls_session {
|
||||
struct work_struct unblock_work;
|
||||
struct work_struct scan_work;
|
||||
struct work_struct unbind_work;
|
||||
struct work_struct destroy_work;
|
||||
|
||||
/* recovery fields */
|
||||
int recovery_tmo;
|
||||
|
Reference in New Issue
Block a user