Commit a75243ae authored by Max Gurtovoy's avatar Max Gurtovoy Committed by Leon Romanovsky

IB/iser: add safety checks for state_mutex lock

In some cases, we need to make sure that state_mutex is taken. Use
lockdep_assert_held to warn us in case it doesn't while it should.
Signed-off-by: default avatarMax Gurtovoy <mgurtovoy@nvidia.com>
Link: https://lore.kernel.org/r/20221016093833.12537-3-mgurtovoy@nvidia.comReviewed-by: default avatarSergey Gorenko <sergeygo@nvidia.com>
Reviewed-by: default avatarSagi Grimberg <sagi@grimberg.me>
Signed-off-by: default avatarLeon Romanovsky <leon@kernel.org>
parent acc7d94a
...@@ -448,6 +448,8 @@ int iser_conn_terminate(struct iser_conn *iser_conn) ...@@ -448,6 +448,8 @@ int iser_conn_terminate(struct iser_conn *iser_conn)
struct ib_conn *ib_conn = &iser_conn->ib_conn; struct ib_conn *ib_conn = &iser_conn->ib_conn;
int err = 0; int err = 0;
lockdep_assert_held(&iser_conn->state_mutex);
/* terminate the iser conn only if the conn state is UP */ /* terminate the iser conn only if the conn state is UP */
if (iser_conn->state != ISER_CONN_UP) if (iser_conn->state != ISER_CONN_UP)
return 0; return 0;
...@@ -482,9 +484,10 @@ int iser_conn_terminate(struct iser_conn *iser_conn) ...@@ -482,9 +484,10 @@ int iser_conn_terminate(struct iser_conn *iser_conn)
*/ */
static void iser_connect_error(struct rdma_cm_id *cma_id) static void iser_connect_error(struct rdma_cm_id *cma_id)
{ {
struct iser_conn *iser_conn; struct iser_conn *iser_conn = cma_id->context;
lockdep_assert_held(&iser_conn->state_mutex);
iser_conn = cma_id->context;
iser_conn->state = ISER_CONN_TERMINATING; iser_conn->state = ISER_CONN_TERMINATING;
} }
...@@ -526,12 +529,13 @@ static void iser_calc_scsi_params(struct iser_conn *iser_conn, ...@@ -526,12 +529,13 @@ static void iser_calc_scsi_params(struct iser_conn *iser_conn,
*/ */
static void iser_addr_handler(struct rdma_cm_id *cma_id) static void iser_addr_handler(struct rdma_cm_id *cma_id)
{ {
struct iser_conn *iser_conn = cma_id->context;
struct iser_device *device; struct iser_device *device;
struct iser_conn *iser_conn;
struct ib_conn *ib_conn; struct ib_conn *ib_conn;
int ret; int ret;
iser_conn = cma_id->context; lockdep_assert_held(&iser_conn->state_mutex);
if (iser_conn->state != ISER_CONN_PENDING) if (iser_conn->state != ISER_CONN_PENDING)
/* bailout */ /* bailout */
return; return;
...@@ -581,6 +585,8 @@ static void iser_route_handler(struct rdma_cm_id *cma_id) ...@@ -581,6 +585,8 @@ static void iser_route_handler(struct rdma_cm_id *cma_id)
struct ib_conn *ib_conn = &iser_conn->ib_conn; struct ib_conn *ib_conn = &iser_conn->ib_conn;
struct ib_device *ib_dev = ib_conn->device->ib_device; struct ib_device *ib_dev = ib_conn->device->ib_device;
lockdep_assert_held(&iser_conn->state_mutex);
if (iser_conn->state != ISER_CONN_PENDING) if (iser_conn->state != ISER_CONN_PENDING)
/* bailout */ /* bailout */
return; return;
...@@ -613,14 +619,18 @@ static void iser_route_handler(struct rdma_cm_id *cma_id) ...@@ -613,14 +619,18 @@ static void iser_route_handler(struct rdma_cm_id *cma_id)
iser_connect_error(cma_id); iser_connect_error(cma_id);
} }
/*
* Called with state mutex held
*/
static void iser_connected_handler(struct rdma_cm_id *cma_id, static void iser_connected_handler(struct rdma_cm_id *cma_id,
const void *private_data) const void *private_data)
{ {
struct iser_conn *iser_conn; struct iser_conn *iser_conn = cma_id->context;
struct ib_qp_attr attr; struct ib_qp_attr attr;
struct ib_qp_init_attr init_attr; struct ib_qp_init_attr init_attr;
iser_conn = cma_id->context; lockdep_assert_held(&iser_conn->state_mutex);
if (iser_conn->state != ISER_CONN_PENDING) if (iser_conn->state != ISER_CONN_PENDING)
/* bailout */ /* bailout */
return; return;
...@@ -654,11 +664,15 @@ static void iser_disconnected_handler(struct rdma_cm_id *cma_id) ...@@ -654,11 +664,15 @@ static void iser_disconnected_handler(struct rdma_cm_id *cma_id)
} }
} }
/*
* Called with state mutex held
*/
static void iser_cleanup_handler(struct rdma_cm_id *cma_id, static void iser_cleanup_handler(struct rdma_cm_id *cma_id,
bool destroy) bool destroy)
{ {
struct iser_conn *iser_conn = cma_id->context; struct iser_conn *iser_conn = cma_id->context;
lockdep_assert_held(&iser_conn->state_mutex);
/* /*
* We are not guaranteed that we visited disconnected_handler * We are not guaranteed that we visited disconnected_handler
* by now, call it here to be safe that we handle CM drep * by now, call it here to be safe that we handle CM drep
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment