[SCSI] cxgb3i: check for setup netdev
authorMike Christie <michaelc@cs.wisc.edu>
Wed, 10 Feb 2010 22:51:44 +0000 (16:51 -0600)
committerJames Bottomley <James.Bottomley@suse.de>
Wed, 17 Feb 2010 19:40:07 +0000 (13:40 -0600)
If the netdev has not been setup when the host is, we will oops when
the iscsi layer calls into the driver and a it tries to reference the
netdev in hba->ndev.

This can happen if the iscsi driver is loaded before ifup is
done. This patch just adds a check, so we can gracefully fail the
operation.

Signed-off-by: Mike Christie <michaelc@cs.wisc.edu>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
drivers/scsi/cxgb3i/cxgb3i_iscsi.c

index 1fd89b2..412853c 100644 (file)
@@ -708,6 +708,12 @@ static int cxgb3i_host_set_param(struct Scsi_Host *shost,
 {
        struct cxgb3i_hba *hba = iscsi_host_priv(shost);
 
+       if (!hba->ndev) {
+               shost_printk(KERN_ERR, shost, "Could not set host param. "
+                            "Netdev for host not set.\n");
+               return -ENODEV;
+       }
+
        cxgb3i_api_debug("param %d, buf %s.\n", param, buf);
 
        switch (param) {
@@ -738,6 +744,12 @@ static int cxgb3i_host_get_param(struct Scsi_Host *shost,
        struct cxgb3i_hba *hba = iscsi_host_priv(shost);
        int len = 0;
 
+       if (!hba->ndev) {
+               shost_printk(KERN_ERR, shost, "Could not set host param. "
+                            "Netdev for host not set.\n");
+               return -ENODEV;
+       }
+
        cxgb3i_api_debug("hba %s, param %d.\n", hba->ndev->name, param);
 
        switch (param) {