Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=a3d2c2e8f5e01e185013d8f944c0a26fdc558ad8
Commit:     a3d2c2e8f5e01e185013d8f944c0a26fdc558ad8
Parent:     a43cf0f3511585493e3c948f7ec62f659486d0b3
Author:     FUJITA Tomonori <[EMAIL PROTECTED]>
AuthorDate: Wed Jan 23 23:34:35 2008 +0900
Committer:  James Bottomley <[EMAIL PROTECTED]>
CommitDate: Wed Jan 23 13:44:47 2008 -0600

    [SCSI] ch: handle class_device_create failure properly
    
    When class_device_create fails, ch_probe needs to fail too.
    
    Signed-off-by: FUJITA Tomonori <[EMAIL PROTECTED]>
    Signed-off-by: James Bottomley <[EMAIL PROTECTED]>
---
 drivers/scsi/ch.c |   22 +++++++++++++++-------
 1 files changed, 15 insertions(+), 7 deletions(-)

diff --git a/drivers/scsi/ch.c b/drivers/scsi/ch.c
index cead0f5..765f2fc 100644
--- a/drivers/scsi/ch.c
+++ b/drivers/scsi/ch.c
@@ -913,29 +913,37 @@ static long ch_ioctl_compat(struct file * file,
 static int ch_probe(struct device *dev)
 {
        struct scsi_device *sd = to_scsi_device(dev);
+       struct class_device *class_dev;
        scsi_changer *ch;
-       
+
        if (sd->type != TYPE_MEDIUM_CHANGER)
                return -ENODEV;
-    
+
        ch = kzalloc(sizeof(*ch), GFP_KERNEL);
        if (NULL == ch)
                return -ENOMEM;
 
        ch->minor = ch_devcount;
        sprintf(ch->name,"ch%d",ch->minor);
+
+       class_dev = class_device_create(ch_sysfs_class, NULL,
+                                       MKDEV(SCSI_CHANGER_MAJOR, ch->minor),
+                                       dev, "s%s", ch->name);
+       if (IS_ERR(class_dev)) {
+               printk(KERN_WARNING "ch%d: class_device_create failed\n",
+                      ch->minor);
+               kfree(ch);
+               return PTR_ERR(class_dev);
+       }
+
        mutex_init(&ch->lock);
        ch->device = sd;
        ch_readconfig(ch);
        if (init)
                ch_init_elem(ch);
 
-       class_device_create(ch_sysfs_class, NULL,
-                           MKDEV(SCSI_CHANGER_MAJOR,ch->minor),
-                           dev, "s%s", ch->name);
-
        sdev_printk(KERN_INFO, sd, "Attached scsi changer %s\n", ch->name);
-       
+
        spin_lock(&ch_devlist_lock);
        list_add_tail(&ch->list,&ch_devlist);
        ch_devcount++;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to