[SCSI] zfcp: Defer resource allocation to first ccw_set_online call
So far, zfcp allocated all resources required for FCP adapters/subchannels when the device was discovered in the ccw_probe callback. If there are lots of unused FCP subchannels attached to a system, this is a waste of resources. To alleviate this, defer the resource allocation to the first call to ccw_set_online. To avoid disruptions during possible following calls to ccw_set_offline and then ccw_set_online, keep the adapter resources until the device is finally being removed via ccw_remove. While doing this, also manage the zfcp erp thread together with all other adapter resources in zfcp_adapter_enqueue/dequeue. Reviewed-by: Swen Schillig <swen@vnet.ibm.com> Signed-off-by: Christof Schmitt <christof.schmitt@de.ibm.com> Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Esse commit está contido em:

commit de
James Bottomley

pai
98fc4d5c8c
commit
143bb6bfe3
@@ -150,6 +150,9 @@ static int zfcp_erp_required_act(int want, struct zfcp_adapter *adapter,
|
||||
a_status = atomic_read(&adapter->status);
|
||||
if (a_status & ZFCP_STATUS_COMMON_ERP_INUSE)
|
||||
return 0;
|
||||
if (!(a_status & ZFCP_STATUS_COMMON_RUNNING) &&
|
||||
!(a_status & ZFCP_STATUS_COMMON_OPEN))
|
||||
return 0; /* shutdown requested for closed adapter */
|
||||
}
|
||||
|
||||
return need;
|
||||
@@ -1349,6 +1352,8 @@ void zfcp_erp_thread_kill(struct zfcp_adapter *adapter)
|
||||
{
|
||||
kthread_stop(adapter->erp_thread);
|
||||
adapter->erp_thread = NULL;
|
||||
WARN_ON(!list_empty(&adapter->erp_ready_head));
|
||||
WARN_ON(!list_empty(&adapter->erp_running_head));
|
||||
}
|
||||
|
||||
/**
|
||||
|
Referência em uma nova issue
Block a user