IB/iser: Don't bound release_work completions timeouts
We no longer rely on iscsi connection teardown sequence, so no need to give a grace period and continue cleanup if it expired. Have iser_conn_release wait for full completion before freeing iser_conn. ib_completion: Guaranteed to come when: - Got DISCONNECTED/ADDR_CHANGE event or - iSCSI called ep_disconnect/conn_stop Guaranteed to finish when: - Got TIMEWAIT_EXIT/DEVICE_REMOVAL event - All Flush errors are consumed - IB related resources are destroyed stop_completion: Guaranteed to come when: - iSCSI calls conn_stop Guaranteed to finish when: - All inflight tasks were cleaned up Signed-off-by: Sagi Grimberg <sagig@mellanox.com> Signed-off-by: Ariel Nahum <arieln@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
c47a3c9ed5
commit
c107a6c0cf
|
@ -566,18 +566,13 @@ static int iser_conn_state_comp_exch(struct iser_conn *iser_conn,
|
|||
void iser_release_work(struct work_struct *work)
|
||||
{
|
||||
struct iser_conn *iser_conn;
|
||||
int rc;
|
||||
|
||||
iser_conn = container_of(work, struct iser_conn, release_work);
|
||||
|
||||
/* wait for .conn_stop callback */
|
||||
rc = wait_for_completion_timeout(&iser_conn->stop_completion, 30 * HZ);
|
||||
WARN_ON(rc == 0);
|
||||
|
||||
rc = wait_for_completion_timeout(&iser_conn->ib_completion, 30 * HZ);
|
||||
if (rc == 0)
|
||||
iser_warn("conn %p, IB cleanup didn't complete in 30 "
|
||||
"seconds, continue with release\n", iser_conn);
|
||||
/* Wait for conn_stop to complete */
|
||||
wait_for_completion(&iser_conn->stop_completion);
|
||||
/* Wait for IB resouces cleanup to complete */
|
||||
wait_for_completion(&iser_conn->ib_completion);
|
||||
|
||||
mutex_lock(&iser_conn->state_mutex);
|
||||
iser_conn->state = ISER_CONN_DOWN;
|
||||
|
|
Loading…
Reference in New Issue