summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/libiscsi.c19
1 files changed, 10 insertions, 9 deletions
diff --git a/drivers/scsi/libiscsi.c b/drivers/scsi/libiscsi.c
index 1d7a8b7e8a75..a7ee4bb40708 100644
--- a/drivers/scsi/libiscsi.c
+++ b/drivers/scsi/libiscsi.c
@@ -1280,6 +1280,9 @@ static int iscsi_xmit_task(struct iscsi_conn *conn)
1280 struct iscsi_task *task = conn->task; 1280 struct iscsi_task *task = conn->task;
1281 int rc; 1281 int rc;
1282 1282
1283 if (test_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx))
1284 return -ENODATA;
1285
1283 __iscsi_get_task(task); 1286 __iscsi_get_task(task);
1284 spin_unlock_bh(&conn->session->lock); 1287 spin_unlock_bh(&conn->session->lock);
1285 rc = conn->session->tt->xmit_task(task); 1288 rc = conn->session->tt->xmit_task(task);
@@ -1329,7 +1332,7 @@ static int iscsi_data_xmit(struct iscsi_conn *conn)
1329 int rc = 0; 1332 int rc = 0;
1330 1333
1331 spin_lock_bh(&conn->session->lock); 1334 spin_lock_bh(&conn->session->lock);
1332 if (unlikely(conn->suspend_tx)) { 1335 if (test_bit(ISCSI_SUSPEND_BIT, &conn->suspend_tx)) {
1333 ISCSI_DBG_SESSION(conn->session, "Tx suspended!\n"); 1336 ISCSI_DBG_SESSION(conn->session, "Tx suspended!\n");
1334 spin_unlock_bh(&conn->session->lock); 1337 spin_unlock_bh(&conn->session->lock);
1335 return -ENODATA; 1338 return -ENODATA;
@@ -1338,7 +1341,7 @@ static int iscsi_data_xmit(struct iscsi_conn *conn)
1338 if (conn->task) { 1341 if (conn->task) {
1339 rc = iscsi_xmit_task(conn); 1342 rc = iscsi_xmit_task(conn);
1340 if (rc) 1343 if (rc)
1341 goto again; 1344 goto done;
1342 } 1345 }
1343 1346
1344 /* 1347 /*
@@ -1358,7 +1361,7 @@ check_mgmt:
1358 } 1361 }
1359 rc = iscsi_xmit_task(conn); 1362 rc = iscsi_xmit_task(conn);
1360 if (rc) 1363 if (rc)
1361 goto again; 1364 goto done;
1362 } 1365 }
1363 1366
1364 /* process pending command queue */ 1367 /* process pending command queue */
@@ -1379,14 +1382,14 @@ check_mgmt:
1379 list_add_tail(&conn->task->running, 1382 list_add_tail(&conn->task->running,
1380 &conn->cmdqueue); 1383 &conn->cmdqueue);
1381 conn->task = NULL; 1384 conn->task = NULL;
1382 goto again; 1385 goto done;
1383 } else 1386 } else
1384 fail_scsi_task(conn->task, DID_ABORT); 1387 fail_scsi_task(conn->task, DID_ABORT);
1385 continue; 1388 continue;
1386 } 1389 }
1387 rc = iscsi_xmit_task(conn); 1390 rc = iscsi_xmit_task(conn);
1388 if (rc) 1391 if (rc)
1389 goto again; 1392 goto done;
1390 /* 1393 /*
1391 * we could continuously get new task requests so 1394 * we could continuously get new task requests so
1392 * we need to check the mgmt queue for nops that need to 1395 * we need to check the mgmt queue for nops that need to
@@ -1412,16 +1415,14 @@ check_mgmt:
1412 conn->task->state = ISCSI_TASK_RUNNING; 1415 conn->task->state = ISCSI_TASK_RUNNING;
1413 rc = iscsi_xmit_task(conn); 1416 rc = iscsi_xmit_task(conn);
1414 if (rc) 1417 if (rc)
1415 goto again; 1418 goto done;
1416 if (!list_empty(&conn->mgmtqueue)) 1419 if (!list_empty(&conn->mgmtqueue))
1417 goto check_mgmt; 1420 goto check_mgmt;
1418 } 1421 }
1419 spin_unlock_bh(&conn->session->lock); 1422 spin_unlock_bh(&conn->session->lock);
1420 return -ENODATA; 1423 return -ENODATA;
1421 1424
1422again: 1425done:
1423 if (unlikely(conn->suspend_tx))
1424 rc = -ENODATA;
1425 spin_unlock_bh(&conn->session->lock); 1426 spin_unlock_bh(&conn->session->lock);
1426 return rc; 1427 return rc;
1427} 1428}