pdu: drop ISCSI_PDU_NO_CALLBACK

we use the flag ISCSI_PDU_NO_CALLBACK and pdu->callback simultaneously, but
check only for one of them in various places. So drop ISCSI_PDU_NO_CALLBACK
and check for pdu->callback != NULL instead.

All PDUs that carried this flag have pdu->callback set to NULL.

Signed-off-by: Peter Lieven <pl@kamp.de>
This commit is contained in:
Peter Lieven
2016-05-02 10:40:15 +02:00
parent 03fe4d73f7
commit cde2043891
5 changed files with 22 additions and 28 deletions
-2
View File
@@ -228,8 +228,6 @@ struct iscsi_pdu {
/* There will not be a response to this pdu, so delete it once it is sent on the wire. Don't put it on the wait-queue */ /* There will not be a response to this pdu, so delete it once it is sent on the wire. Don't put it on the wait-queue */
#define ISCSI_PDU_DELETE_WHEN_SENT 0x00000001 #define ISCSI_PDU_DELETE_WHEN_SENT 0x00000001
/* Don't call the CANCEL callback when the context is destroyed */
#define ISCSI_PDU_NO_CALLBACK 0x00000002
/* When reconnecting, just drop all these PDUs. Don't re-queue them. /* When reconnecting, just drop all these PDUs. Don't re-queue them.
* This includes any DATA-OUT PDU as well as all NOPs. * This includes any DATA-OUT PDU as well as all NOPs.
*/ */
+8 -10
View File
@@ -270,25 +270,23 @@ void iscsi_defer_reconnect(struct iscsi_context *iscsi)
while ((pdu = iscsi->outqueue)) { while ((pdu = iscsi->outqueue)) {
ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu); ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu);
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { if (iscsi->is_loggedin && pdu->callback) {
/* If an error happened during connect/login, /* If an error happened during connect/login,
we don't want to call any of the callbacks. we don't want to call any of the callbacks.
*/ */
if (iscsi->is_loggedin) { pdu->callback(iscsi, SCSI_STATUS_CANCELLED,
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, pdu->private_data);
NULL, pdu->private_data);
}
} }
iscsi_free_pdu(iscsi, pdu); iscsi_free_pdu(iscsi, pdu);
} }
while ((pdu = iscsi->waitpdu)) { while ((pdu = iscsi->waitpdu)) {
ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu); ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu);
/* If an error happened during connect/login, if (iscsi->is_loggedin && pdu->callback) {
we don't want to call any of the callbacks. /* If an error happened during connect/login,
*/ we don't want to call any of the callbacks.
if (iscsi->is_loggedin) { */
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, pdu->callback(iscsi, SCSI_STATUS_CANCELLED,
NULL, pdu->private_data); NULL, pdu->private_data);
} }
iscsi_free_pdu(iscsi, pdu); iscsi_free_pdu(iscsi, pdu);
} }
+8 -10
View File
@@ -304,25 +304,23 @@ iscsi_destroy_context(struct iscsi_context *iscsi)
while ((pdu = iscsi->outqueue)) { while ((pdu = iscsi->outqueue)) {
ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu); ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu);
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { if (iscsi->is_loggedin && pdu->callback) {
/* If an error happened during connect/login, we don't want to /* If an error happened during connect/login, we don't want to
call any of the callbacks. call any of the callbacks.
*/ */
if (iscsi->is_loggedin && pdu->callback != NULL) { pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, pdu->private_data);
pdu->private_data);
}
} }
iscsi_free_pdu(iscsi, pdu); iscsi_free_pdu(iscsi, pdu);
} }
while ((pdu = iscsi->waitpdu)) { while ((pdu = iscsi->waitpdu)) {
ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu); ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu);
/* If an error happened during connect/login, we don't want to if (iscsi->is_loggedin && pdu->callback) {
call any of the callbacks. /* If an error happened during connect/login, we don't want to
*/ call any of the callbacks.
if (iscsi->is_loggedin && pdu->callback != NULL) { */
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
pdu->private_data); pdu->private_data);
} }
iscsi_free_pdu(iscsi, pdu); iscsi_free_pdu(iscsi, pdu);
} }
+5 -5
View File
@@ -86,7 +86,7 @@ iscsi_send_data_out(struct iscsi_context *iscsi, struct iscsi_pdu *cmd_pdu,
ISCSI_PDU_DATA_OUT, ISCSI_PDU_DATA_OUT,
ISCSI_PDU_NO_PDU, ISCSI_PDU_NO_PDU,
cmd_pdu->itt, cmd_pdu->itt,
ISCSI_PDU_DROP_ON_RECONNECT|ISCSI_PDU_DELETE_WHEN_SENT|ISCSI_PDU_NO_CALLBACK); ISCSI_PDU_DROP_ON_RECONNECT|ISCSI_PDU_DELETE_WHEN_SENT);
if (pdu == NULL) { if (pdu == NULL) {
iscsi_set_error(iscsi, "Out-of-memory, Failed to allocate " iscsi_set_error(iscsi, "Out-of-memory, Failed to allocate "
"scsi data out pdu."); "scsi data out pdu.");
@@ -1891,7 +1891,7 @@ iscsi_scsi_cancel_task(struct iscsi_context *iscsi,
for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) { for (pdu = iscsi->waitpdu; pdu; pdu = pdu->next) {
if (pdu->itt == task->itt) { if (pdu->itt == task->itt) {
ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu); ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu);
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { if (pdu->callback) {
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
pdu->private_data); pdu->private_data);
} }
@@ -1902,7 +1902,7 @@ iscsi_scsi_cancel_task(struct iscsi_context *iscsi,
for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) { for (pdu = iscsi->outqueue; pdu; pdu = pdu->next) {
if (pdu->itt == task->itt) { if (pdu->itt == task->itt) {
ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu); ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu);
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { if (pdu->callback) {
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
pdu->private_data); pdu->private_data);
} }
@@ -1920,7 +1920,7 @@ iscsi_scsi_cancel_all_tasks(struct iscsi_context *iscsi)
while ((pdu = iscsi->waitpdu)) { while ((pdu = iscsi->waitpdu)) {
ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu); ISCSI_LIST_REMOVE(&iscsi->waitpdu, pdu);
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { if (pdu->callback) {
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
pdu->private_data); pdu->private_data);
} }
@@ -1928,7 +1928,7 @@ iscsi_scsi_cancel_all_tasks(struct iscsi_context *iscsi)
} }
while ((pdu = iscsi->outqueue)) { while ((pdu = iscsi->outqueue)) {
ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu); ISCSI_LIST_REMOVE(&iscsi->outqueue, pdu);
if ( !(pdu->flags & ISCSI_PDU_NO_CALLBACK)) { if (pdu->callback) {
pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL, pdu->callback(iscsi, SCSI_STATUS_CANCELLED, NULL,
pdu->private_data); pdu->private_data);
} }
+1 -1
View File
@@ -101,7 +101,7 @@ iscsi_send_target_nop_out(struct iscsi_context *iscsi, uint32_t ttt, uint32_t lu
ISCSI_PDU_NOP_OUT, ISCSI_PDU_NOP_OUT,
ISCSI_PDU_NO_PDU, ISCSI_PDU_NO_PDU,
0xffffffff, 0xffffffff,
ISCSI_PDU_DROP_ON_RECONNECT|ISCSI_PDU_DELETE_WHEN_SENT|ISCSI_PDU_NO_CALLBACK); ISCSI_PDU_DROP_ON_RECONNECT|ISCSI_PDU_DELETE_WHEN_SENT);
if (pdu == NULL) { if (pdu == NULL) {
iscsi_set_error(iscsi, "Failed to allocate nop-out pdu"); iscsi_set_error(iscsi, "Failed to allocate nop-out pdu");
return -1; return -1;