[SCSI] st: clean up dev cleanup in st_probe
authorJeff Mahoney <jeffm@suse.de>
Sat, 18 Aug 2012 19:20:38 +0000 (15:20 -0400)
committerJames Bottomley <JBottomley@Parallels.com>
Fri, 14 Sep 2012 16:59:28 +0000 (17:59 +0100)
st_probe leaves a cdev pointer hanging around that is compared
during the error path and freed later. There's no need for the pointer
to hang around at all. So we free it immediately and simplify the error
handling.

Reviewed-by: Lee Duncan <lduncan@suse.com>
Signed-off-by: Jeff Mahoney <jeffm@suse.com>
Acked-by: Kai Mäkisara <kai.makisara@kolumbus.fi>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/st.c

index 03303ae4443463ba650860ac8e6ed112f9fb449c..492b53b6e51d3ee95a900bb671e45cd17816b6f5 100644 (file)
@@ -4156,6 +4156,7 @@ static int st_probe(struct device *dev)
                                printk(KERN_ERR
                                       "st%d: out of memory. Device not attached.\n",
                                       dev_num);
+                               cdev_del(cdev);
                                goto out_free_tape;
                        }
                        cdev->owner = THIS_MODULE;
@@ -4194,17 +4195,13 @@ out_free_tape:
                                  "tape");
                for (j=0; j < 2; j++) {
                        if (STm->cdevs[j]) {
-                               if (cdev == STm->cdevs[j])
-                                       cdev = NULL;
-                                       device_destroy(&st_sysfs_class,
-                                                      MKDEV(SCSI_TAPE_MAJOR,
-                                                            TAPE_MINOR(i, mode, j)));
+                               device_destroy(&st_sysfs_class,
+                                              MKDEV(SCSI_TAPE_MAJOR,
+                                                    TAPE_MINOR(i, mode, j)));
                                cdev_del(STm->cdevs[j]);
                        }
                }
        }
-       if (cdev)
-               cdev_del(cdev);
        write_lock(&st_dev_arr_lock);
        scsi_tapes[dev_num] = NULL;
        st_nr_dev--;