This patch cleans up the behavior of scsi_host_lookup().
The original implementation attempted to use the dual role of
either returning a pointer value, or a negative error code.
User's needed to use IS_ERR() to check the result. Additionally,
the IS_ERR() macro never checks for when a NULL pointer was
returned, so a NULL pointer actually passes with a success case.
Note: scsi_host_get(), used by scsi_host_lookup(), can return
a NULL pointer.
Talk about a mudhole for the unitiated to step into....
This patch converts scsi_host_lookup() to return either NULL
or a valid pointer. The consumers were updated for the change.
Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
 struct Scsi_Host *scsi_host_lookup(unsigned short hostnum)
 {
        struct device *cdev;
-       struct Scsi_Host *shost = ERR_PTR(-ENXIO);
+       struct Scsi_Host *shost = NULL;
 
        cdev = class_find_device(&shost_class, NULL, &hostnum,
                                 __scsi_host_match);
 
        int error = -ENXIO;
 
        shost = scsi_host_lookup(host);
-       if (IS_ERR(shost))
-               return PTR_ERR(shost);
+       if (!shost)
+               return error;
 
        if (shost->transportt->user_scan)
                error = shost->transportt->user_scan(shost, channel, id, lun);
        int error = -ENXIO;
 
        shost = scsi_host_lookup(host);
-       if (IS_ERR(shost))
-               return PTR_ERR(shost);
+       if (!shost)
+               return error;
        sdev = scsi_device_lookup(shost, channel, id, lun);
        if (sdev) {
                scsi_remove_device(sdev);
 
 
        /* TODO: replace with a O(1) alg */
        shost = scsi_host_lookup(host_no);
-       if (IS_ERR(shost)) {
+       if (!shost) {
                printk(KERN_ERR "Could not find host no %d\n", host_no);
                return -EINVAL;
        }
        dprintk("%d %d %llx\n", host_no, result, (unsigned long long) mid);
 
        shost = scsi_host_lookup(host_no);
-       if (IS_ERR(shost)) {
+       if (!shost) {
                printk(KERN_ERR "Could not find host no %d\n", host_no);
                return err;
        }
        dprintk("%d %d%llx\n", host_no, result, (unsigned long long)itn_id);
 
        shost = scsi_host_lookup(host_no);
-       if (IS_ERR(shost)) {
+       if (!shost) {
                printk(KERN_ERR "Could not find host no %d\n", host_no);
                return err;
        }
 
                return -EINVAL;
 
        shost = scsi_host_lookup(ev->u.tgt_dscvr.host_no);
-       if (IS_ERR(shost)) {
+       if (!shost) {
                printk(KERN_ERR "target discovery could not find host no %u\n",
                       ev->u.tgt_dscvr.host_no);
                return -ENODEV;
                return -ENOSYS;
 
        shost = scsi_host_lookup(ev->u.set_host_param.host_no);
-       if (IS_ERR(shost)) {
+       if (!shost) {
                printk(KERN_ERR "set_host_param could not find host no %u\n",
                       ev->u.set_host_param.host_no);
                return -ENODEV;