Print this page
6938 STMF kstat free is using an improper size for kmem_free().


3163                         stmf_state.stmf_svc_ilu_draining = ilu->ilu_next;
3164                 }
3165                 if (ilu == stmf_state.stmf_svc_ilu_timing) {
3166                         stmf_state.stmf_svc_ilu_timing = ilu->ilu_next;
3167                 }
3168                 if (lu->lu_lp) {
3169                         ((stmf_i_lu_provider_t *)
3170                             (lu->lu_lp->lp_stmf_private))->ilp_nlus--;
3171                 }
3172                 if (ilu->ilu_luid) {
3173                         ((stmf_id_data_t *)ilu->ilu_luid)->id_pt_to_object =
3174                             NULL;
3175                         ilu->ilu_luid = NULL;
3176                 }
3177                 STMF_EVENT_FREE_HANDLE(ilu->ilu_event_hdl);
3178         } else {
3179                 mutex_exit(&stmf_state.stmf_lock);
3180                 return (STMF_BUSY);
3181         }
3182         if (ilu->ilu_kstat_info) {
3183                 kmem_free(ilu->ilu_kstat_info->ks_data,
3184                     ilu->ilu_kstat_info->ks_data_size);
3185                 kstat_delete(ilu->ilu_kstat_info);
3186         }
3187         if (ilu->ilu_kstat_io) {
3188                 kstat_delete(ilu->ilu_kstat_io);
3189                 mutex_destroy(&ilu->ilu_kstat_lock);
3190         }
3191         cv_destroy(&ilu->ilu_offline_pending_cv);
3192         mutex_exit(&stmf_state.stmf_lock);
3193         return (STMF_SUCCESS);
3194 }
3195 
3196 void
3197 stmf_set_port_standby(stmf_local_port_t *lport, uint16_t rtpid)
3198 {
3199         stmf_i_local_port_t *ilport =
3200             (stmf_i_local_port_t *)lport->lport_stmf_private;
3201         ilport->ilport_rtpid = rtpid;
3202         ilport->ilport_standby = 1;
3203 }
3204 


3342                 if (ilport->ilport_prev)
3343                         ilport->ilport_prev->ilport_next = ilport->ilport_next;
3344                 else
3345                         stmf_state.stmf_ilportlist = ilport->ilport_next;
3346                 id_free(stmf_state.stmf_ilport_inst_space,
3347                     ilport->ilport_instance);
3348                 rw_destroy(&ilport->ilport_lock);
3349                 stmf_state.stmf_nlports--;
3350                 if (lport->lport_pp) {
3351                         ((stmf_i_port_provider_t *)
3352                             (lport->lport_pp->pp_stmf_private))->ipp_npps--;
3353                 }
3354                 ilport->ilport_tg = NULL;
3355                 STMF_EVENT_FREE_HANDLE(ilport->ilport_event_hdl);
3356         } else {
3357                 mutex_exit(&stmf_state.stmf_lock);
3358                 return (STMF_BUSY);
3359         }
3360         if (ilport->ilport_kstat_info) {
3361                 kmem_free(ilport->ilport_kstat_info->ks_data,
3362                     ilport->ilport_kstat_info->ks_data_size);
3363                 kstat_delete(ilport->ilport_kstat_info);
3364         }
3365         if (ilport->ilport_kstat_io) {
3366                 kstat_delete(ilport->ilport_kstat_io);
3367                 mutex_destroy(&ilport->ilport_kstat_lock);
3368         }
3369         mutex_exit(&stmf_state.stmf_lock);
3370         return (STMF_SUCCESS);
3371 }
3372 
3373 /*
3374  * Rport id/instance mappings remain valid until STMF is unloaded
3375  */
3376 static int
3377 stmf_irport_compare(const void *void_irport1, const void *void_irport2)
3378 {
3379         const   stmf_i_remote_port_t    *irport1 = void_irport1;
3380         const   stmf_i_remote_port_t    *irport2 = void_irport2;
3381         int                     result;
3382 




3163                         stmf_state.stmf_svc_ilu_draining = ilu->ilu_next;
3164                 }
3165                 if (ilu == stmf_state.stmf_svc_ilu_timing) {
3166                         stmf_state.stmf_svc_ilu_timing = ilu->ilu_next;
3167                 }
3168                 if (lu->lu_lp) {
3169                         ((stmf_i_lu_provider_t *)
3170                             (lu->lu_lp->lp_stmf_private))->ilp_nlus--;
3171                 }
3172                 if (ilu->ilu_luid) {
3173                         ((stmf_id_data_t *)ilu->ilu_luid)->id_pt_to_object =
3174                             NULL;
3175                         ilu->ilu_luid = NULL;
3176                 }
3177                 STMF_EVENT_FREE_HANDLE(ilu->ilu_event_hdl);
3178         } else {
3179                 mutex_exit(&stmf_state.stmf_lock);
3180                 return (STMF_BUSY);
3181         }
3182         if (ilu->ilu_kstat_info) {
3183                 kmem_free(ilu->ilu_kstat_info->ks_data, STMF_KSTAT_LU_SZ);

3184                 kstat_delete(ilu->ilu_kstat_info);
3185         }
3186         if (ilu->ilu_kstat_io) {
3187                 kstat_delete(ilu->ilu_kstat_io);
3188                 mutex_destroy(&ilu->ilu_kstat_lock);
3189         }
3190         cv_destroy(&ilu->ilu_offline_pending_cv);
3191         mutex_exit(&stmf_state.stmf_lock);
3192         return (STMF_SUCCESS);
3193 }
3194 
3195 void
3196 stmf_set_port_standby(stmf_local_port_t *lport, uint16_t rtpid)
3197 {
3198         stmf_i_local_port_t *ilport =
3199             (stmf_i_local_port_t *)lport->lport_stmf_private;
3200         ilport->ilport_rtpid = rtpid;
3201         ilport->ilport_standby = 1;
3202 }
3203 


3341                 if (ilport->ilport_prev)
3342                         ilport->ilport_prev->ilport_next = ilport->ilport_next;
3343                 else
3344                         stmf_state.stmf_ilportlist = ilport->ilport_next;
3345                 id_free(stmf_state.stmf_ilport_inst_space,
3346                     ilport->ilport_instance);
3347                 rw_destroy(&ilport->ilport_lock);
3348                 stmf_state.stmf_nlports--;
3349                 if (lport->lport_pp) {
3350                         ((stmf_i_port_provider_t *)
3351                             (lport->lport_pp->pp_stmf_private))->ipp_npps--;
3352                 }
3353                 ilport->ilport_tg = NULL;
3354                 STMF_EVENT_FREE_HANDLE(ilport->ilport_event_hdl);
3355         } else {
3356                 mutex_exit(&stmf_state.stmf_lock);
3357                 return (STMF_BUSY);
3358         }
3359         if (ilport->ilport_kstat_info) {
3360                 kmem_free(ilport->ilport_kstat_info->ks_data,
3361                     STMF_KSTAT_TGT_SZ);
3362                 kstat_delete(ilport->ilport_kstat_info);
3363         }
3364         if (ilport->ilport_kstat_io) {
3365                 kstat_delete(ilport->ilport_kstat_io);
3366                 mutex_destroy(&ilport->ilport_kstat_lock);
3367         }
3368         mutex_exit(&stmf_state.stmf_lock);
3369         return (STMF_SUCCESS);
3370 }
3371 
3372 /*
3373  * Rport id/instance mappings remain valid until STMF is unloaded
3374  */
3375 static int
3376 stmf_irport_compare(const void *void_irport1, const void *void_irport2)
3377 {
3378         const   stmf_i_remote_port_t    *irport1 = void_irport1;
3379         const   stmf_i_remote_port_t    *irport2 = void_irport2;
3380         int                     result;
3381