mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 11:11:45 -04:00
scsi: target/core: Use system workqueues for TMF
A quote from SAM-5: "The order in which task management requests are processed is not specified by the SCSI architecture model. The SCSI architecture model does not require in-order delivery of such task management requests or processing by the task manager in the order received. To guarantee the processing order of task management requests referencing sent to a specific logical unit, an application client should not have more than one such task management request pending to that logical unit." This means that it is safe to use the system workqueues instead of tmr_wq for processing TMFs. An intended side effect of this patch is that it enables concurrent processing of TMFs. Reviewed-by: Christoph Hellwig <[email protected]> Cc: Nicholas Bellinger <[email protected]> Cc: Mike Christie <[email protected]> Cc: David Disseldorp <[email protected]> Cc: Hannes Reinecke <[email protected]> Signed-off-by: Bart Van Assche <[email protected]> Signed-off-by: Martin K. Petersen <[email protected]>
This commit is contained in:
parent
ad669505c4
commit
db5b21a24e
3 changed files with 1 additions and 18 deletions
|
|
@ -986,18 +986,6 @@ int target_configure_device(struct se_device *dev)
|
|||
if (ret)
|
||||
goto out_destroy_device;
|
||||
|
||||
/*
|
||||
* Startup the struct se_device processing thread
|
||||
*/
|
||||
dev->tmr_wq = alloc_workqueue("tmr-%s", WQ_MEM_RECLAIM | WQ_UNBOUND, 1,
|
||||
dev->transport->name);
|
||||
if (!dev->tmr_wq) {
|
||||
pr_err("Unable to create tmr workqueue for %s\n",
|
||||
dev->transport->name);
|
||||
ret = -ENOMEM;
|
||||
goto out_free_alua;
|
||||
}
|
||||
|
||||
/*
|
||||
* Setup work_queue for QUEUE_FULL
|
||||
*/
|
||||
|
|
@ -1026,8 +1014,6 @@ int target_configure_device(struct se_device *dev)
|
|||
|
||||
return 0;
|
||||
|
||||
out_free_alua:
|
||||
core_alua_free_lu_gp_mem(dev);
|
||||
out_destroy_device:
|
||||
dev->transport->destroy_device(dev);
|
||||
out_free_index:
|
||||
|
|
@ -1046,8 +1032,6 @@ void target_free_device(struct se_device *dev)
|
|||
WARN_ON(!list_empty(&dev->dev_sep_list));
|
||||
|
||||
if (target_dev_configured(dev)) {
|
||||
destroy_workqueue(dev->tmr_wq);
|
||||
|
||||
dev->transport->destroy_device(dev);
|
||||
|
||||
mutex_lock(&device_mutex);
|
||||
|
|
|
|||
|
|
@ -3412,7 +3412,7 @@ int transport_generic_handle_tmr(
|
|||
}
|
||||
|
||||
INIT_WORK(&cmd->work, target_tmr_work);
|
||||
queue_work(cmd->se_dev->tmr_wq, &cmd->work);
|
||||
schedule_work(&cmd->work);
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(transport_generic_handle_tmr);
|
||||
|
|
|
|||
Loading…
Reference in a new issue