From 04979d21b87e4d2c35c24b8e242fdbe22e32df02 Mon Sep 17 00:00:00 2001 From: Sebastian Vater Date: Fri, 24 Oct 2025 16:08:03 +0200 Subject: Reverted making iSCSI SCSI task and iSCSI PDU reference counter atomic since crash cause was not a thread issue. --- src/server/iscsi.c | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'src/server/iscsi.c') diff --git a/src/server/iscsi.c b/src/server/iscsi.c index 23d7b3b..835e273 100644 --- a/src/server/iscsi.c +++ b/src/server/iscsi.c @@ -1034,11 +1034,11 @@ static int iscsi_global_key_value_pair_init(iscsi_hashmap *key_value_pairs, cons const uint key_len = (uint) (strlen( (char *) lut[i].key ) + 1U); - key_value_pair->value = lut[i].value; - key_value_pair->list_range = lut[i].list_range; - key_value_pair->type = lut[i].type; - key_value_pair->flags = lut[i].flags; - key_value_pair->state_mask = j; + key_value_pair->value = lut[i].value; + key_value_pair->list_range = lut[i].list_range; + key_value_pair->type = lut[i].type; + key_value_pair->flags = lut[i].flags; + key_value_pair->state_mask = j; const int rc = iscsi_hashmap_put( key_value_pairs, (uint8_t *) lut[i].key, key_len, (uint8_t *) key_value_pair ); @@ -2921,7 +2921,7 @@ iscsi_task *iscsi_task_create(iscsi_connection *conn, iscsi_task *parent, iscsi_ iscsi_scsi_task_create( &task->scsi_task, callback, iscsi_task_destroy_callback ); if ( parent != NULL ) { - atomic_fetch_add_explicit( &parent->scsi_task.ref, 1UL, memory_order_release ); + parent->scsi_task.ref++; task->init_task_tag = parent->init_task_tag; task->lun_id = parent->lun_id; @@ -3383,7 +3383,7 @@ static uint32_t iscsi_scsi_data_in_send(iscsi_connection *conn, iscsi_task *task } response_pdu->task = task; - atomic_fetch_add_explicit( &task->scsi_task.ref, 1UL, memory_order_release ); + task->scsi_task.ref++; iscsi_scsi_data_in_response_packet *scsi_data_in_pkt = (iscsi_scsi_data_in_response_packet *) response_pdu->bhs_pkt; @@ -3564,7 +3564,7 @@ void iscsi_task_response(iscsi_connection *conn, iscsi_task *task) } response_pdu->task = task; - atomic_fetch_add_explicit( &task->scsi_task.ref, 1UL, memory_order_release ); + task->scsi_task.ref++; scsi_response_pkt->opcode = ISCSI_OPCODE_SERVER_SCSI_RESPONSE; scsi_response_pkt->flags = -0x80; @@ -3923,7 +3923,7 @@ void iscsi_scsi_task_create(iscsi_scsi_task *scsi_task, iscsi_scsi_task_xfer_com scsi_task->len = 0UL; scsi_task->id = 0ULL; scsi_task->flags = 0; - atomic_init( &scsi_task->ref, 1UL ); + scsi_task->ref = 1UL; scsi_task->xfer_pos = 0UL; scsi_task->xfer_len = 0UL; scsi_task->sense_data_len = 0U; @@ -3945,7 +3945,7 @@ void iscsi_scsi_task_create(iscsi_scsi_task *scsi_task, iscsi_scsi_task_xfer_com */ void iscsi_scsi_task_destroy(iscsi_scsi_task *scsi_task) { - if ( (scsi_task != NULL) && (atomic_fetch_sub_explicit( &scsi_task->ref, 1UL, memory_order_acq_rel) == 1UL) ) { + if ( (scsi_task != NULL) && (--scsi_task->ref == 0UL) ) { if ( scsi_task->sense_data != NULL ) { free( scsi_task->sense_data ); @@ -11590,7 +11590,7 @@ iscsi_pdu *iscsi_connection_pdu_create(iscsi_connection *conn, const uint ahs_le pdu->xfer_complete_callback = NULL; pdu->xfer_complete_user_data = NULL; pdu->flags = 0; - atomic_init( &pdu->ref, 1UL ); + pdu->ref = 1UL; pdu->bhs_pos = 0U; pdu->ahs_pos = 0U; pdu->ahs_len = ahs_len; @@ -11622,7 +11622,7 @@ iscsi_pdu *iscsi_connection_pdu_create(iscsi_connection *conn, const uint ahs_le */ void iscsi_connection_pdu_destroy(iscsi_pdu *pdu) { - if ( (pdu != NULL) && (atomic_fetch_sub_explicit( &pdu->ref, 1UL, memory_order_acq_rel) == 1UL) ) { + if ( (pdu != NULL) && (--pdu->ref == 0UL) ) { if ( pdu->bhs_pkt != NULL ) { free( pdu->bhs_pkt ); @@ -12397,7 +12397,7 @@ static int iscsi_connection_pdu_header_handle_scsi_cmd(iscsi_connection *conn, i task->scsi_task.init_port = conn->init_port; task->init_task_tag = iscsi_get_be32(scsi_cmd_pkt->init_task_tag); task->pdu = pdu; - atomic_fetch_add_explicit( &pdu->ref, 1UL, memory_order_release ); + pdu->ref++; const uint64_t lun = iscsi_get_be64(scsi_cmd_pkt->lun); const int lun_id = iscsi_scsi_lun_get_from_iscsi( lun ); @@ -12647,7 +12647,7 @@ int iscsi_r2t_send(iscsi_connection *conn, iscsi_task *task, uint32_t *r2t_sn, c iscsi_put_be32( (uint8_t *) &r2t_pkt->des_data_xfer_len, (uint32_t) len ); response_pdu->task = task; - atomic_fetch_add_explicit( &task->scsi_task.ref, 1UL, memory_order_release ); + task->scsi_task.ref++; iscsi_connection_pdu_write( conn, response_pdu, NULL, NULL ); @@ -13193,7 +13193,7 @@ static int iscsi_task_sub_task_submit_write(iscsi_connection *conn, iscsi_task * sub_task->scsi_task.len = pdu->ds_len; pdu->task = sub_task; - atomic_fetch_add_explicit( &pdu->ref, 1UL, memory_order_release ); + pdu->ref++; task->pos += pdu->ds_len; -- cgit v1.2.3-55-g7522