summaryrefslogtreecommitdiffstats
path: root/src/server
diff options
context:
space:
mode:
authorSebastian Vater2025-10-24 16:08:03 +0200
committerSebastian Vater2025-10-24 16:08:03 +0200
commit04979d21b87e4d2c35c24b8e242fdbe22e32df02 (patch)
treeac05ae0eaf6069d61b65f4b309ea9ac953a01ff1 /src/server
parentMade iSCSI PDU reference counter atomic, too. (diff)
downloaddnbd3-04979d21b87e4d2c35c24b8e242fdbe22e32df02.tar.gz
dnbd3-04979d21b87e4d2c35c24b8e242fdbe22e32df02.tar.xz
dnbd3-04979d21b87e4d2c35c24b8e242fdbe22e32df02.zip
Reverted making iSCSI SCSI task and iSCSI PDU reference counter atomic since crash cause was not a thread issue.
Diffstat (limited to 'src/server')
-rw-r--r--src/server/iscsi.c30
-rw-r--r--src/server/iscsi.h4
2 files changed, 17 insertions, 17 deletions
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;
diff --git a/src/server/iscsi.h b/src/server/iscsi.h
index ff07933..b3f7779 100644
--- a/src/server/iscsi.h
+++ b/src/server/iscsi.h
@@ -10885,7 +10885,7 @@ typedef struct iscsi_scsi_task {
int flags;
/// Reference counter.
- _Atomic uint32_t ref;
+ uint32_t ref;
/// Transfer position in bytes.
uint32_t xfer_pos;
@@ -11782,7 +11782,7 @@ typedef struct iscsi_pdu {
int flags;
/// Reference counter.
- _Atomic uint32_t ref;
+ uint32_t ref;
/// Bytes of Basic Header Segment (BHS) already read.
uint bhs_pos;