diff options
-rw-r--r-- | drivers/net/cnic.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/cnic.c b/drivers/net/cnic.c index 40865aac2afa..45584442a35c 100644 --- a/drivers/net/cnic.c +++ b/drivers/net/cnic.c | |||
@@ -327,6 +327,12 @@ static int cnic_iscsi_nl_msg_recv(struct cnic_dev *dev, u32 msg_type, | |||
327 | if (l5_cid >= MAX_CM_SK_TBL_SZ) | 327 | if (l5_cid >= MAX_CM_SK_TBL_SZ) |
328 | break; | 328 | break; |
329 | 329 | ||
330 | rcu_read_lock(); | ||
331 | if (!rcu_dereference(cp->ulp_ops[CNIC_ULP_L4])) { | ||
332 | rc = -ENODEV; | ||
333 | rcu_read_unlock(); | ||
334 | break; | ||
335 | } | ||
330 | csk = &cp->csk_tbl[l5_cid]; | 336 | csk = &cp->csk_tbl[l5_cid]; |
331 | csk_hold(csk); | 337 | csk_hold(csk); |
332 | if (cnic_in_use(csk)) { | 338 | if (cnic_in_use(csk)) { |
@@ -341,6 +347,7 @@ static int cnic_iscsi_nl_msg_recv(struct cnic_dev *dev, u32 msg_type, | |||
341 | cnic_cm_set_pg(csk); | 347 | cnic_cm_set_pg(csk); |
342 | } | 348 | } |
343 | csk_put(csk); | 349 | csk_put(csk); |
350 | rcu_read_unlock(); | ||
344 | rc = 0; | 351 | rc = 0; |
345 | } | 352 | } |
346 | } | 353 | } |