Print this page
5045 use atomic_{inc,dec}_* instead of atomic_add_*

*** 2092,2102 **** ilport->ilport_alua == 0) { continue; } if (alua_state->alua_node != 0) { ilport->ilport_rtpid = ! atomic_add_16_nv(&stmf_rtpid_counter, 1); } lport = ilport->ilport_lport; ic_reg_port = ic_reg_port_msg_alloc( lport->lport_id, ilport->ilport_rtpid, 0, NULL, stmf_proxy_msg_id); --- 2092,2102 ---- ilport->ilport_alua == 0) { continue; } if (alua_state->alua_node != 0) { ilport->ilport_rtpid = ! atomic_inc_16_nv(&stmf_rtpid_counter); } lport = ilport->ilport_lport; ic_reg_port = ic_reg_port_msg_alloc( lport->lport_id, ilport->ilport_rtpid, 0, NULL, stmf_proxy_msg_id);
*** 3251,3261 **** * rtpid will/must be set if this is a standby port * only register ports that are not standby (proxy) ports * and ports that are alua participants (ilport_alua == 1) */ if (ilport->ilport_standby == 0) { ! ilport->ilport_rtpid = atomic_add_16_nv(&stmf_rtpid_counter, 1); } if (stmf_state.stmf_alua_state == 1 && ilport->ilport_standby == 0 && ilport->ilport_alua == 1) { --- 3251,3261 ---- * rtpid will/must be set if this is a standby port * only register ports that are not standby (proxy) ports * and ports that are alua participants (ilport_alua == 1) */ if (ilport->ilport_standby == 0) { ! ilport->ilport_rtpid = atomic_inc_16_nv(&stmf_rtpid_counter); } if (stmf_state.stmf_alua_state == 1 && ilport->ilport_standby == 0 && ilport->ilport_alua == 1) {
*** 3593,3603 **** ilport->ilport_ss_list = iss; rw_exit(&ilport->ilport_lock); mutex_exit(&stmf_state.stmf_lock); iss->iss_creation_time = ddi_get_time(); ! ss->ss_session_id = atomic_add_64_nv(&stmf_session_counter, 1); iss->iss_flags &= ~ISS_BEING_CREATED; /* XXX should we remove ISS_LUN_INVENTORY_CHANGED on new session? */ iss->iss_flags &= ~ISS_LUN_INVENTORY_CHANGED; DTRACE_PROBE2(session__online, stmf_local_port_t *, lport, stmf_scsi_session_t *, ss); --- 3593,3603 ---- ilport->ilport_ss_list = iss; rw_exit(&ilport->ilport_lock); mutex_exit(&stmf_state.stmf_lock); iss->iss_creation_time = ddi_get_time(); ! ss->ss_session_id = atomic_inc_64_nv(&stmf_session_counter); iss->iss_flags &= ~ISS_BEING_CREATED; /* XXX should we remove ISS_LUN_INVENTORY_CHANGED on new session? */ iss->iss_flags &= ~ISS_LUN_INVENTORY_CHANGED; DTRACE_PROBE2(session__online, stmf_local_port_t *, lport, stmf_scsi_session_t *, ss);
*** 3792,3802 **** } while (atomic_cas_8(&itl->itl_flags, old, new) != old); itl->itl_hdlrm_reason = hdlrm_reason; ASSERT(itl->itl_counter); ! if (atomic_add_32_nv(&itl->itl_counter, -1)) return; stmf_release_itl_handle(lu, itl); } --- 3792,3802 ---- } while (atomic_cas_8(&itl->itl_flags, old, new) != old); itl->itl_hdlrm_reason = hdlrm_reason; ASSERT(itl->itl_counter); ! if (atomic_dec_32_nv(&itl->itl_counter)) return; stmf_release_itl_handle(lu, itl); }
*** 4150,4165 **** ilu->ilu_ntasks++; mutex_exit(&ilu->ilu_task_lock); } itask->itask_ilu_task_cntr = ilu->ilu_cur_task_cntr; ! atomic_add_32(itask->itask_ilu_task_cntr, 1); itask->itask_start_time = ddi_get_lbolt(); if ((lun_map_ent != NULL) && ((itask->itask_itl_datap = lun_map_ent->ent_itl_datap) != NULL)) { ! atomic_add_32(&itask->itask_itl_datap->itl_counter, 1); task->task_lu_itl_handle = itask->itask_itl_datap->itl_handle; } else { itask->itask_itl_datap = NULL; task->task_lu_itl_handle = NULL; } --- 4150,4165 ---- ilu->ilu_ntasks++; mutex_exit(&ilu->ilu_task_lock); } itask->itask_ilu_task_cntr = ilu->ilu_cur_task_cntr; ! atomic_inc_32(itask->itask_ilu_task_cntr); itask->itask_start_time = ddi_get_lbolt(); if ((lun_map_ent != NULL) && ((itask->itask_itl_datap = lun_map_ent->ent_itl_datap) != NULL)) { ! atomic_inc_32(&itask->itask_itl_datap->itl_counter); task->task_lu_itl_handle = itask->itask_itl_datap->itl_handle; } else { itask->itask_itl_datap = NULL; task->task_lu_itl_handle = NULL; }
*** 4183,4193 **** ilu->ilu_free_tasks = itask; ilu->ilu_ntasks_free++; if (ilu->ilu_ntasks == ilu->ilu_ntasks_free) cv_signal(&ilu->ilu_offline_pending_cv); mutex_exit(&ilu->ilu_task_lock); ! atomic_add_32(itask->itask_ilu_task_cntr, -1); } void stmf_task_lu_check_freelist(stmf_i_lu_t *ilu) { --- 4183,4193 ---- ilu->ilu_free_tasks = itask; ilu->ilu_ntasks_free++; if (ilu->ilu_ntasks == ilu->ilu_ntasks_free) cv_signal(&ilu->ilu_offline_pending_cv); mutex_exit(&ilu->ilu_task_lock); ! atomic_dec_32(itask->itask_ilu_task_cntr); } void stmf_task_lu_check_freelist(stmf_i_lu_t *ilu) {
*** 4406,4427 **** stmf_itl_task_done(itask); DTRACE_PROBE2(stmf__task__end, scsi_task_t *, task, hrtime_t, itask->itask_done_timestamp - itask->itask_start_timestamp); if (itask->itask_itl_datap) { ! if (atomic_add_32_nv(&itask->itask_itl_datap->itl_counter, ! -1) == 0) { stmf_release_itl_handle(task->task_lu, itask->itask_itl_datap); } } rw_enter(iss->iss_lockp, RW_READER); lport->lport_task_free(task); if (itask->itask_worker) { ! atomic_add_32(&stmf_cur_ntasks, -1); ! atomic_add_32(&itask->itask_worker->worker_ref_count, -1); } /* * After calling stmf_task_lu_free, the task pointer can no longer * be trusted. */ --- 4406,4427 ---- stmf_itl_task_done(itask); DTRACE_PROBE2(stmf__task__end, scsi_task_t *, task, hrtime_t, itask->itask_done_timestamp - itask->itask_start_timestamp); if (itask->itask_itl_datap) { ! if (atomic_dec_32_nv(&itask->itask_itl_datap->itl_counter) == ! 0) { stmf_release_itl_handle(task->task_lu, itask->itask_itl_datap); } } rw_enter(iss->iss_lockp, RW_READER); lport->lport_task_free(task); if (itask->itask_worker) { ! atomic_dec_32(&stmf_cur_ntasks); ! atomic_dec_32(&itask->itask_worker->worker_ref_count); } /* * After calling stmf_task_lu_free, the task pointer can no longer * be trusted. */
*** 4443,4456 **** if (task->task_max_nbufs > 4) task->task_max_nbufs = 4; task->task_cur_nbufs = 0; /* Latest value of currently running tasks */ ! ct = atomic_add_32_nv(&stmf_cur_ntasks, 1); /* Select the next worker using round robin */ ! nv = (int)atomic_add_32_nv((uint32_t *)&stmf_worker_sel_counter, 1); if (nv >= stmf_nworkers_accepting_cmds) { int s = nv; do { nv -= stmf_nworkers_accepting_cmds; } while (nv >= stmf_nworkers_accepting_cmds); --- 4443,4456 ---- if (task->task_max_nbufs > 4) task->task_max_nbufs = 4; task->task_cur_nbufs = 0; /* Latest value of currently running tasks */ ! ct = atomic_inc_32_nv(&stmf_cur_ntasks); /* Select the next worker using round robin */ ! nv = (int)atomic_inc_32_nv((uint32_t *)&stmf_worker_sel_counter); if (nv >= stmf_nworkers_accepting_cmds) { int s = nv; do { nv -= stmf_nworkers_accepting_cmds; } while (nv >= stmf_nworkers_accepting_cmds);
*** 4523,4533 **** if (++(w->worker_queue_depth) > w->worker_max_qdepth_pu) { w->worker_max_qdepth_pu = w->worker_queue_depth; } /* Measure task waitq time */ itask->itask_waitq_enter_timestamp = gethrtime(); ! atomic_add_32(&w->worker_ref_count, 1); itask->itask_cmd_stack[0] = ITASK_CMD_NEW_TASK; itask->itask_ncmds = 1; stmf_task_audit(itask, TE_TASK_START, CMD_OR_IOF_NA, dbuf); if (dbuf) { itask->itask_allocated_buf_map = 1; --- 4523,4533 ---- if (++(w->worker_queue_depth) > w->worker_max_qdepth_pu) { w->worker_max_qdepth_pu = w->worker_queue_depth; } /* Measure task waitq time */ itask->itask_waitq_enter_timestamp = gethrtime(); ! atomic_inc_32(&w->worker_ref_count); itask->itask_cmd_stack[0] = ITASK_CMD_NEW_TASK; itask->itask_ncmds = 1; stmf_task_audit(itask, TE_TASK_START, CMD_OR_IOF_NA, dbuf); if (dbuf) { itask->itask_allocated_buf_map = 1;
*** 4611,4621 **** } if (itask->itask_flags & ITASK_BEING_ABORTED) return (STMF_ABORTED); #ifdef DEBUG if (!(ioflags & STMF_IOF_STATS_ONLY) && stmf_drop_buf_counter > 0) { ! if (atomic_add_32_nv((uint32_t *)&stmf_drop_buf_counter, -1) == 1) return (STMF_SUCCESS); } #endif --- 4611,4621 ---- } if (itask->itask_flags & ITASK_BEING_ABORTED) return (STMF_ABORTED); #ifdef DEBUG if (!(ioflags & STMF_IOF_STATS_ONLY) && stmf_drop_buf_counter > 0) { ! if (atomic_dec_32_nv((uint32_t *)&stmf_drop_buf_counter) == 1) return (STMF_SUCCESS); } #endif
*** 5708,5718 **** if (lu_id->ident_length != 0x10) return (STMF_INVALID_ARG); p = (uint8_t *)lu_id; ! gen_number = atomic_add_16_nv(&stmf_lu_id_gen_number, 1); p[0] = 0xf1; p[1] = 3; p[2] = 0; p[3] = 0x10; p[4] = ((company_id >> 20) & 0xf) | 0x60; p[5] = (company_id >> 12) & 0xff; p[6] = (company_id >> 4) & 0xff; --- 5708,5718 ---- if (lu_id->ident_length != 0x10) return (STMF_INVALID_ARG); p = (uint8_t *)lu_id; ! gen_number = atomic_inc_16_nv(&stmf_lu_id_gen_number); p[0] = 0xf1; p[1] = 3; p[2] = 0; p[3] = 0x10; p[4] = ((company_id >> 20) & 0xf) | 0x60; p[5] = (company_id >> 12) & 0xff; p[6] = (company_id >> 4) & 0xff;
*** 6340,6352 **** if (stmf_handle_cmd_during_ic(itask)) break; } #ifdef DEBUG if (stmf_drop_task_counter > 0) { ! if (atomic_add_32_nv( ! (uint32_t *)&stmf_drop_task_counter, ! -1) == 1) { break; } } #endif DTRACE_PROBE1(scsi__task__start, scsi_task_t *, task); --- 6340,6351 ---- if (stmf_handle_cmd_during_ic(itask)) break; } #ifdef DEBUG if (stmf_drop_task_counter > 0) { ! if (atomic_dec_32_nv((uint32_t *)&stmf_drop_task_counter) == ! 1) { break; } } #endif DTRACE_PROBE1(scsi__task__start, scsi_task_t *, task);