IB/iser: Allow bind only when connection state is UP
We need to fail the bind operation if the iser connection state != UP (started teardown) and this should be done under the state lock. Signed-off-by: Sagi Grimberg <sagig@mellanox.com> Signed-off-by: Or Gerlitz <ogerlitz@mellanox.com> Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
c33b15f00b
commit
91eb1df39a
1 changed files with 14 additions and 5 deletions
|
@ -344,7 +344,6 @@ iscsi_iser_conn_bind(struct iscsi_cls_session *cls_session,
|
||||||
int is_leading)
|
int is_leading)
|
||||||
{
|
{
|
||||||
struct iscsi_conn *conn = cls_conn->dd_data;
|
struct iscsi_conn *conn = cls_conn->dd_data;
|
||||||
struct iscsi_session *session;
|
|
||||||
struct iser_conn *ib_conn;
|
struct iser_conn *ib_conn;
|
||||||
struct iscsi_endpoint *ep;
|
struct iscsi_endpoint *ep;
|
||||||
int error;
|
int error;
|
||||||
|
@ -363,9 +362,17 @@ iscsi_iser_conn_bind(struct iscsi_cls_session *cls_session,
|
||||||
}
|
}
|
||||||
ib_conn = ep->dd_data;
|
ib_conn = ep->dd_data;
|
||||||
|
|
||||||
session = conn->session;
|
mutex_lock(&ib_conn->state_mutex);
|
||||||
if (iser_alloc_rx_descriptors(ib_conn, session))
|
if (ib_conn->state != ISER_CONN_UP) {
|
||||||
return -ENOMEM;
|
error = -EINVAL;
|
||||||
|
iser_err("iser_conn %p state is %d, teardown started\n",
|
||||||
|
ib_conn, ib_conn->state);
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
error = iser_alloc_rx_descriptors(ib_conn, conn->session);
|
||||||
|
if (error)
|
||||||
|
goto out;
|
||||||
|
|
||||||
/* binds the iSER connection retrieved from the previously
|
/* binds the iSER connection retrieved from the previously
|
||||||
* connected ep_handle to the iSCSI layer connection. exchanges
|
* connected ep_handle to the iSCSI layer connection. exchanges
|
||||||
|
@ -375,7 +382,9 @@ iscsi_iser_conn_bind(struct iscsi_cls_session *cls_session,
|
||||||
conn->dd_data = ib_conn;
|
conn->dd_data = ib_conn;
|
||||||
ib_conn->iscsi_conn = conn;
|
ib_conn->iscsi_conn = conn;
|
||||||
|
|
||||||
return 0;
|
out:
|
||||||
|
mutex_unlock(&ib_conn->state_mutex);
|
||||||
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
|
|
Loading…
Add table
Reference in a new issue