Skip to contentSkip to conversation

fix warning and missing failure handling for scsi_add_host in aic7xxx driver

PATCH In review Jesper Juhl 2 participants 5 messages Dec 13, 2005 – Dec 14, 2005

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 fix warning and missing failure handling for scsi_add_host in aic7xxx driver

Hi,

Here's a patch to fix a compiler warning and problem with missing failure handling of scsi_add_host noted in comment in aic7xxx_osm

The warning I see (with 2.6.15-rc5-git3) is this one:
drivers/scsi/aic7xxx/aic7xxx_osm.c:1100: warning: ignoring return value of csi_add_host', declared with attribute warn_unused_result

The patch has seen the following testing:
- compile tested
- boot tested on a machine using the AIC7XXX driver

Please review and consider for inclusion.

---

 drivers/scsi/aic7xxx/aic7xxx_osm.c |   22 +++++++++++++++++-----
 1 files changed, 17 insertions(+), 5 deletions(-)
drivers/scsi/aic7xxx/aic7xxx_osm.c +17 -5
@@ -1061,10 +1061,11 @@ uint32_t aic7xxx_verbose;
 int
 ahc_linux_register_host(struct ahc_softc *ahc, struct scsi_host_template *template)
 {
-	char	 buf[80];
-	struct	 Scsi_Host *host;
+	char	buf[80];
+	struct	Scsi_Host *host;
 	char	*new_name;
-	u_long	 s;
+	u_long	s;
+	int	retval = 0;
 
 	template->name = ahc->description;
 	host = scsi_host_alloc(template, sizeof(struct ahc_softc *));
@@ -1097,9 +1098,20 @@ ahc_linux_register_host(struct ahc_softc
 
 	host->transportt = ahc_linux_transport_template;
 
-	scsi_add_host(host, (ahc->dev_softc ? &ahc->dev_softc->dev : NULL)); /* XXX handle failure */
+	retval = scsi_add_host(host,
+			(ahc->dev_softc ? &ahc->dev_softc->dev : NULL));
+	if (retval) {
+		printk(KERN_ERR "aic7xxx: scsi_add_host failed\n");
+		goto free_and_out;
+	}
+
 	scsi_scan_host(host);
-	return (0);
+
+out:
+	return retval;
+free_and_out:
+	scsi_remove_host(host);
+	goto out;
 }
 
 /*
#1 lore raw

drivers/scsi/aic7xxx/aic7xxx_osm.c ahc_linux_register_host(struct ahc_softc · line 1114

Quoted 13 lines · Jesper Juhl
drivers/scsi/aic7xxx/aic7xxx_osm.c +11 -1
+	if (retval) {
+		printk(KERN_ERR "aic7xxx: scsi_add_host failed\n");
+		goto free_and_out;
+	}
+
 	scsi_scan_host(host);
-	return (0);
+
+out:
+	return retval;
+free_and_out:
+	scsi_remove_host(host);
+	goto out;

I'm not incredibly keen on all this jumping around for no reason. If there's a normal out and an error out, then fine, but in this case the if (retval) { } could contain the entirety of the error path with an else for the normal path.

scsi_remove_host() is the wrong API, it should be scsi_host_put() (for an allocated but un added host).

James

#2 lore raw
Quoted 11 lines · James Bottomley
Quoted 10 lines · Jesper Juhl
drivers/scsi/aic7xxx/aic7xxx_osm.c +8 -1
+     if (retval) {
+             printk(KERN_ERR "aic7xxx: scsi_add_host failed\n");
+             goto free_and_out;
+     }
+
      scsi_scan_host(host);
-     return (0);
+
+out:
+     return retval;
Quoted 9 lines

drivers/scsi/aic7xxx/aic7xxx_osm.c ahc_linux_register_host(struct ahc_softc · line 1114

Quoted 3 lines
drivers/scsi/aic7xxx/aic7xxx_osm.c +3 -0
+free_and_out:
+     scsi_remove_host(host);
+     goto out;

I'm not incredibly keen on all this jumping around for no reason. If there's a normal out and an error out, then fine, but in this case the if (retval) { } could contain the entirety of the error path with an else for the normal path.

Ok, I'll change that.

Quoted 3 lines

scsi_remove_host() is the wrong API, it should be scsi_host_put() (for an allocated but un added host).

Ohh, I misunderstood things then, I'll correct that.

I'll send a new patch later today when I get home from work.

Thank you for taking a look at the patch and your feedback.

--
Jesper Juhl <[email protected]>
Don't top-post http://www.catb.org/~esr/jargon/html/T/top-post.html
Plain text mails only, please http://www.expita.com/nomime.html

#3 lore raw
Quoted 1 line · Jesper Juhl

I'll send a new patch later today when I get home from work.

Actually, the aic79xx has the identical problem, if you want to fix that too ...

James