scsi: iscsi: Use system_unbound_wq for destroy_work
[ Upstream commit b25b957d2db1585602c2c70fdf4261a5641fe6b7 ] Use the system_unbound_wq for async session destruction. We don't need a dedicated workqueue for async session destruction because: 1. perf does not seem to be an issue since we only allow 1 active work. 2. it does not have deps with other system works and we can run them in parallel with each other. Link: https://lore.kernel.org/r/20210525181821.7617-6-michael.christie@oracle.com Reviewed-by: Lee Duncan <lduncan@suse.com> Signed-off-by: Mike Christie <michael.christie@oracle.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
4029a1e992
commit
22608545b8
@@ -95,8 +95,6 @@ static DECLARE_WORK(stop_conn_work, stop_conn_work_fn);
|
|||||||
static atomic_t iscsi_session_nr; /* sysfs session id for next new session */
|
static atomic_t iscsi_session_nr; /* sysfs session id for next new session */
|
||||||
static struct workqueue_struct *iscsi_eh_timer_workq;
|
static struct workqueue_struct *iscsi_eh_timer_workq;
|
||||||
|
|
||||||
static struct workqueue_struct *iscsi_destroy_workq;
|
|
||||||
|
|
||||||
static DEFINE_IDA(iscsi_sess_ida);
|
static DEFINE_IDA(iscsi_sess_ida);
|
||||||
/*
|
/*
|
||||||
* list of registered transports and lock that must
|
* list of registered transports and lock that must
|
||||||
@@ -3717,7 +3715,7 @@ iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, uint32_t *group)
|
|||||||
list_del_init(&session->sess_list);
|
list_del_init(&session->sess_list);
|
||||||
spin_unlock_irqrestore(&sesslock, flags);
|
spin_unlock_irqrestore(&sesslock, flags);
|
||||||
|
|
||||||
queue_work(iscsi_destroy_workq, &session->destroy_work);
|
queue_work(system_unbound_wq, &session->destroy_work);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case ISCSI_UEVENT_UNBIND_SESSION:
|
case ISCSI_UEVENT_UNBIND_SESSION:
|
||||||
@@ -4813,18 +4811,8 @@ static __init int iscsi_transport_init(void)
|
|||||||
goto release_nls;
|
goto release_nls;
|
||||||
}
|
}
|
||||||
|
|
||||||
iscsi_destroy_workq = alloc_workqueue("%s",
|
|
||||||
WQ_SYSFS | __WQ_LEGACY | WQ_MEM_RECLAIM | WQ_UNBOUND,
|
|
||||||
1, "iscsi_destroy");
|
|
||||||
if (!iscsi_destroy_workq) {
|
|
||||||
err = -ENOMEM;
|
|
||||||
goto destroy_wq;
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
destroy_wq:
|
|
||||||
destroy_workqueue(iscsi_eh_timer_workq);
|
|
||||||
release_nls:
|
release_nls:
|
||||||
netlink_kernel_release(nls);
|
netlink_kernel_release(nls);
|
||||||
unregister_flashnode_bus:
|
unregister_flashnode_bus:
|
||||||
@@ -4846,7 +4834,6 @@ unregister_transport_class:
|
|||||||
|
|
||||||
static void __exit iscsi_transport_exit(void)
|
static void __exit iscsi_transport_exit(void)
|
||||||
{
|
{
|
||||||
destroy_workqueue(iscsi_destroy_workq);
|
|
||||||
destroy_workqueue(iscsi_eh_timer_workq);
|
destroy_workqueue(iscsi_eh_timer_workq);
|
||||||
netlink_kernel_release(nls);
|
netlink_kernel_release(nls);
|
||||||
bus_unregister(&iscsi_flashnode_bus);
|
bus_unregister(&iscsi_flashnode_bus);
|
||||||
|
Reference in New Issue
Block a user