Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6
authorLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 7 Feb 2008 20:45:28 +0000 (12:45 -0800)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Thu, 7 Feb 2008 20:45:28 +0000 (12:45 -0800)
* git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/driver-2.6:
  sysfs: remove BUG_ON() from sysfs_remove_group()
  Driver core: Revert "Fix Firmware class name collision"
  Block: Fix whole_disk attribute bug

drivers/base/firmware_class.c
fs/partitions/check.c
fs/sysfs/group.c

index 0295855a3eefe58ddf48bc9061123e3177be67f8..4a1b9bfc5471fe91ade02cedfaab22f6cec0d636 100644 (file)
@@ -292,7 +292,8 @@ firmware_class_timeout(u_long data)
 
 static inline void fw_setup_device_id(struct device *f_dev, struct device *dev)
 {
-       snprintf(f_dev->bus_id, BUS_ID_SIZE, "firmware-%s", dev->bus_id);
+       /* XXX warning we should watch out for name collisions */
+       strlcpy(f_dev->bus_id, dev->bus_id, BUS_ID_SIZE);
 }
 
 static int fw_register_device(struct device **dev_p, const char *fw_name,
index 739da701ae7b8fec52d10f48392a85509208e286..9a64045ff845976b5610609d2c37c86f5f9d1778 100644 (file)
@@ -319,6 +319,14 @@ void delete_partition(struct gendisk *disk, int part)
        put_device(&p->dev);
 }
 
+static ssize_t whole_disk_show(struct device *dev,
+                              struct device_attribute *attr, char *buf)
+{
+       return 0;
+}
+static DEVICE_ATTR(whole_disk, S_IRUSR | S_IRGRP | S_IROTH,
+                  whole_disk_show, NULL);
+
 void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len, int flags)
 {
        struct hd_struct *p;
@@ -352,13 +360,8 @@ void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len,
        device_add(&p->dev);
        partition_sysfs_add_subdir(p);
        p->dev.uevent_suppress = 0;
-       if (flags & ADDPART_FLAG_WHOLEDISK) {
-               static struct attribute addpartattr = {
-                       .name = "whole_disk",
-                       .mode = S_IRUSR | S_IRGRP | S_IROTH,
-               };
-               err = sysfs_create_file(&p->dev.kobj, &addpartattr);
-       }
+       if (flags & ADDPART_FLAG_WHOLEDISK)
+               err = device_create_file(&p->dev, &dev_attr_whole_disk);
 
        /* suppress uevent if the disk supresses it */
        if (!disk->dev.uevent_suppress)
index 0871c3dadce1c4a16d469b9a03b511f3eadbb937..477904915032e9359893d6128f3515a1d86963c7 100644 (file)
@@ -77,7 +77,12 @@ void sysfs_remove_group(struct kobject * kobj,
 
        if (grp->name) {
                sd = sysfs_get_dirent(dir_sd, grp->name);
-               BUG_ON(!sd);
+               if (!sd) {
+                       printk(KERN_WARNING "sysfs group %p not found for "
+                               "kobject '%s'\n", grp, kobject_name(kobj));
+                       WARN_ON(!sd);
+                       return;
+               }
        } else
                sd = sysfs_get(dir_sd);