[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>

authored by Sesidhar Beddel and committed by James Bottomley d0385d92 1259c5dc

+20 -3
+20 -3
drivers/scsi/fnic/fnic_scsi.c
··· 1416 1416 unsigned long flags; 1417 1417 struct scsi_cmnd *sc; 1418 1418 struct scsi_lun fc_lun; 1419 - struct fc_rport_libfc_priv *rdata = rport->dd_data; 1420 - struct fc_lport *lport = rdata->local_port; 1421 - struct fnic *fnic = lport_priv(lport); 1419 + struct fc_rport_libfc_priv *rdata; 1420 + struct fc_lport *lport; 1421 + struct fnic *fnic; 1422 1422 struct fc_rport *cmd_rport; 1423 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 1442 FNIC_SCSI_DBG(KERN_DEBUG, 1426 1443 fnic->lport->host, "fnic_terminate_rport_io called" 1427 1444 " wwpn 0x%llx, wwnn0x%llx, rport 0x%p, portid 0x%06x\n",