Print this page
NEX-1774 mptsas error stats are always zero
Reviewed by: Yuri Pankov <yuri.pankov@nexenta.com>
Reviewed by: Steve Peng <steve.peng@nexenta.com>


 328                             sizeof (kstat_named_t));
 329                         (void) snprintf(ks_name, sizeof (ks_name),
 330                             "%s.%llx.%d.%d", ddi_driver_name(dip),
 331                             (longlong_t)mpt->un.m_base_wwid,
 332                             ddi_get_instance(dip), i);
 333 
 334                         phyp->phy_stats = kstat_create("mptsas",
 335                             ddi_get_instance(dip), ks_name, KSTAT_SAS_PHY_CLASS,
 336                             KSTAT_TYPE_NAMED, ndata, 0);
 337 
 338                         if (phyp->phy_stats == NULL) {
 339                                 mutex_exit(&phyp->phy_mutex);
 340                                 mptsas_log(mpt, CE_WARN,
 341                                     "%s: Failed to create %s kstats", __func__,
 342                                     ks_name);
 343                                 continue;
 344                         }
 345 
 346                         ps = (sas_phy_stats_t *)phyp->phy_stats->ks_data;
 347 
 348                         kstat_named_init(&ps->seconds_since_last_reset,
 349                             "SecondsSinceLastReset", KSTAT_DATA_ULONGLONG);
 350                         kstat_named_init(&ps->tx_frames,
 351                             "TxFrames", KSTAT_DATA_ULONGLONG);
 352                         kstat_named_init(&ps->rx_frames,
 353                             "RxFrames", KSTAT_DATA_ULONGLONG);
 354                         kstat_named_init(&ps->tx_words,
 355                             "TxWords", KSTAT_DATA_ULONGLONG);
 356                         kstat_named_init(&ps->rx_words,
 357                             "RxWords", KSTAT_DATA_ULONGLONG);
 358                         kstat_named_init(&ps->invalid_dword_count,
 359                             "InvalidDwordCount", KSTAT_DATA_ULONGLONG);
 360                         kstat_named_init(&ps->running_disparity_error_count,
 361                             "RunningDisparityErrorCount", KSTAT_DATA_ULONGLONG);
 362                         kstat_named_init(&ps->loss_of_dword_sync_count,
 363                             "LossofDwordSyncCount", KSTAT_DATA_ULONGLONG);
 364                         kstat_named_init(&ps->phy_reset_problem_count,
 365                             "PhyResetProblemCount", KSTAT_DATA_ULONGLONG);
 366 
 367                         phyp->phy_stats->ks_private = phyp;
 368                         phyp->phy_stats->ks_update = mptsas_update_phy_stats;
 369                         kstat_install(phyp->phy_stats);
 370                         mutex_exit(&phyp->phy_mutex);
 371                 }
 372         }
 373 }
 374 
 375 int
 376 mptsas_update_phy_stats(kstat_t *ks, int rw)
 377 {




 328                             sizeof (kstat_named_t));
 329                         (void) snprintf(ks_name, sizeof (ks_name),
 330                             "%s.%llx.%d.%d", ddi_driver_name(dip),
 331                             (longlong_t)mpt->un.m_base_wwid,
 332                             ddi_get_instance(dip), i);
 333 
 334                         phyp->phy_stats = kstat_create("mptsas",
 335                             ddi_get_instance(dip), ks_name, KSTAT_SAS_PHY_CLASS,
 336                             KSTAT_TYPE_NAMED, ndata, 0);
 337 
 338                         if (phyp->phy_stats == NULL) {
 339                                 mutex_exit(&phyp->phy_mutex);
 340                                 mptsas_log(mpt, CE_WARN,
 341                                     "%s: Failed to create %s kstats", __func__,
 342                                     ks_name);
 343                                 continue;
 344                         }
 345 
 346                         ps = (sas_phy_stats_t *)phyp->phy_stats->ks_data;
 347 










 348                         kstat_named_init(&ps->invalid_dword_count,
 349                             "InvalidDwordCount", KSTAT_DATA_ULONGLONG);
 350                         kstat_named_init(&ps->running_disparity_error_count,
 351                             "RunningDisparityErrorCount", KSTAT_DATA_ULONGLONG);
 352                         kstat_named_init(&ps->loss_of_dword_sync_count,
 353                             "LossofDwordSyncCount", KSTAT_DATA_ULONGLONG);
 354                         kstat_named_init(&ps->phy_reset_problem_count,
 355                             "PhyResetProblemCount", KSTAT_DATA_ULONGLONG);
 356 
 357                         phyp->phy_stats->ks_private = phyp;
 358                         phyp->phy_stats->ks_update = mptsas_update_phy_stats;
 359                         kstat_install(phyp->phy_stats);
 360                         mutex_exit(&phyp->phy_mutex);
 361                 }
 362         }
 363 }
 364 
 365 int
 366 mptsas_update_phy_stats(kstat_t *ks, int rw)
 367 {