diff options
Diffstat (limited to 'drivers/scsi/bfa/bfad_bsg.c')
-rw-r--r-- | drivers/scsi/bfa/bfad_bsg.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/drivers/scsi/bfa/bfad_bsg.c b/drivers/scsi/bfa/bfad_bsg.c index 0db905531a7..0afa39076ce 100644 --- a/drivers/scsi/bfa/bfad_bsg.c +++ b/drivers/scsi/bfa/bfad_bsg.c | |||
@@ -677,9 +677,11 @@ bfad_iocmd_rport_get_stats(struct bfad_s *bfad, void *cmd) | |||
677 | 677 | ||
678 | memcpy((void *)&iocmd->stats, (void *)&fcs_rport->stats, | 678 | memcpy((void *)&iocmd->stats, (void *)&fcs_rport->stats, |
679 | sizeof(struct bfa_rport_stats_s)); | 679 | sizeof(struct bfa_rport_stats_s)); |
680 | memcpy((void *)&iocmd->stats.hal_stats, | 680 | if (bfa_fcs_rport_get_halrport(fcs_rport)) { |
681 | (void *)&(bfa_fcs_rport_get_halrport(fcs_rport)->stats), | 681 | memcpy((void *)&iocmd->stats.hal_stats, |
682 | sizeof(struct bfa_rport_hal_stats_s)); | 682 | (void *)&(bfa_fcs_rport_get_halrport(fcs_rport)->stats), |
683 | sizeof(struct bfa_rport_hal_stats_s)); | ||
684 | } | ||
683 | 685 | ||
684 | spin_unlock_irqrestore(&bfad->bfad_lock, flags); | 686 | spin_unlock_irqrestore(&bfad->bfad_lock, flags); |
685 | iocmd->status = BFA_STATUS_OK; | 687 | iocmd->status = BFA_STATUS_OK; |
@@ -715,7 +717,8 @@ bfad_iocmd_rport_clr_stats(struct bfad_s *bfad, void *cmd) | |||
715 | 717 | ||
716 | memset((char *)&fcs_rport->stats, 0, sizeof(struct bfa_rport_stats_s)); | 718 | memset((char *)&fcs_rport->stats, 0, sizeof(struct bfa_rport_stats_s)); |
717 | rport = bfa_fcs_rport_get_halrport(fcs_rport); | 719 | rport = bfa_fcs_rport_get_halrport(fcs_rport); |
718 | memset(&rport->stats, 0, sizeof(rport->stats)); | 720 | if (rport) |
721 | memset(&rport->stats, 0, sizeof(rport->stats)); | ||
719 | spin_unlock_irqrestore(&bfad->bfad_lock, flags); | 722 | spin_unlock_irqrestore(&bfad->bfad_lock, flags); |
720 | iocmd->status = BFA_STATUS_OK; | 723 | iocmd->status = BFA_STATUS_OK; |
721 | out: | 724 | out: |
@@ -750,7 +753,8 @@ bfad_iocmd_rport_set_speed(struct bfad_s *bfad, void *cmd) | |||
750 | fcs_rport->rpf.assigned_speed = iocmd->speed; | 753 | fcs_rport->rpf.assigned_speed = iocmd->speed; |
751 | /* Set this speed in f/w only if the RPSC speed is not available */ | 754 | /* Set this speed in f/w only if the RPSC speed is not available */ |
752 | if (fcs_rport->rpf.rpsc_speed == BFA_PORT_SPEED_UNKNOWN) | 755 | if (fcs_rport->rpf.rpsc_speed == BFA_PORT_SPEED_UNKNOWN) |
753 | bfa_rport_speed(fcs_rport->bfa_rport, iocmd->speed); | 756 | if (fcs_rport->bfa_rport) |
757 | bfa_rport_speed(fcs_rport->bfa_rport, iocmd->speed); | ||
754 | spin_unlock_irqrestore(&bfad->bfad_lock, flags); | 758 | spin_unlock_irqrestore(&bfad->bfad_lock, flags); |
755 | iocmd->status = BFA_STATUS_OK; | 759 | iocmd->status = BFA_STATUS_OK; |
756 | out: | 760 | out: |
@@ -1036,9 +1040,10 @@ bfad_iocmd_itnim_get_iostats(struct bfad_s *bfad, void *cmd) | |||
1036 | iocmd->status = BFA_STATUS_UNKNOWN_RWWN; | 1040 | iocmd->status = BFA_STATUS_UNKNOWN_RWWN; |
1037 | else { | 1041 | else { |
1038 | iocmd->status = BFA_STATUS_OK; | 1042 | iocmd->status = BFA_STATUS_OK; |
1039 | memcpy((void *)&iocmd->iostats, (void *) | 1043 | if (bfa_fcs_itnim_get_halitn(itnim)) |
1040 | &(bfa_fcs_itnim_get_halitn(itnim)->stats), | 1044 | memcpy((void *)&iocmd->iostats, (void *) |
1041 | sizeof(struct bfa_itnim_iostats_s)); | 1045 | &(bfa_fcs_itnim_get_halitn(itnim)->stats), |
1046 | sizeof(struct bfa_itnim_iostats_s)); | ||
1042 | } | 1047 | } |
1043 | } | 1048 | } |
1044 | spin_unlock_irqrestore(&bfad->bfad_lock, flags); | 1049 | spin_unlock_irqrestore(&bfad->bfad_lock, flags); |