aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/fnic
diff options
context:
space:
mode:
authorSesidhar Beddel <sebaddel@cisco.com>2013-09-09 16:31:50 -0400
committerJames Bottomley <JBottomley@Parallels.com>2013-09-11 18:56:44 -0400
commitd0385d926577d87e54f37dfd4f8e4e2de399aa37 (patch)
tree19d0d412b91a5b86a15ee81cee10692b4dabf131 /drivers/scsi/fnic
parent1259c5dc752474f74ef3da451dadeafce1d48b55 (diff)
[SCSI] fnic: Kernel panic while running sh/nosh with max lun cfg
Kernel panics due to NULL lport while executing the log message because of synchronization issues between libfc and scsi transport fc. Checking for NULL pointers at the beginning of this routine would resolve the issue from kernel panic point of view. Signed-off-by: Sesidhar Baddel <sebaddel@cisco.com> Signed-off-by: Hiral Patel <hiralpat@cisco.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi/fnic')
-rw-r--r--drivers/scsi/fnic/fnic_scsi.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/drivers/scsi/fnic/fnic_scsi.c b/drivers/scsi/fnic/fnic_scsi.c
index fb8413aa005f..a876084ee12f 100644
--- a/drivers/scsi/fnic/fnic_scsi.c
+++ b/drivers/scsi/fnic/fnic_scsi.c
@@ -1416,12 +1416,29 @@ void fnic_terminate_rport_io(struct fc_rport *rport)
1416 unsigned long flags; 1416 unsigned long flags;
1417 struct scsi_cmnd *sc; 1417 struct scsi_cmnd *sc;
1418 struct scsi_lun fc_lun; 1418 struct scsi_lun fc_lun;
1419 struct fc_rport_libfc_priv *rdata = rport->dd_data; 1419 struct fc_rport_libfc_priv *rdata;
1420 struct fc_lport *lport = rdata->local_port; 1420 struct fc_lport *lport;
1421 struct fnic *fnic = lport_priv(lport); 1421 struct fnic *fnic;
1422 struct fc_rport *cmd_rport; 1422 struct fc_rport *cmd_rport;
1423 enum fnic_ioreq_state old_ioreq_state; 1423 enum fnic_ioreq_state old_ioreq_state;
1424 1424
1425 if (!rport) {
1426 printk(KERN_ERR "fnic_terminate_rport_io: rport is NULL\n");
1427 return;
1428 }
1429 rdata = rport->dd_data;
1430
1431 if (!rdata) {
1432 printk(KERN_ERR "fnic_terminate_rport_io: rdata is NULL\n");
1433 return;
1434 }
1435 lport = rdata->local_port;
1436
1437 if (!lport) {
1438 printk(KERN_ERR "fnic_terminate_rport_io: lport is NULL\n");
1439 return;
1440 }
1441 fnic = lport_priv(lport);
1425 FNIC_SCSI_DBG(KERN_DEBUG, 1442 FNIC_SCSI_DBG(KERN_DEBUG,
1426 fnic->lport->host, "fnic_terminate_rport_io called" 1443 fnic->lport->host, "fnic_terminate_rport_io called"
1427 " wwpn 0x%llx, wwnn0x%llx, rport 0x%p, portid 0x%06x\n", 1444 " wwpn 0x%llx, wwnn0x%llx, rport 0x%p, portid 0x%06x\n",