Linux Headquarters
[ Register ]
[ About us ] [ Home Page ]

Advertisement
[ Kernel ] [ Documentation ] [ Links ] [ Books ]

Advertisement

Kernel v2.6.24 /block/genhd.c

Filename:/block/genhd.c
Lines Added:9
Lines Deleted:27
Also changed in: (Previous) 2.6.24-rc8  2.6.24-rc7  2.6.24-rc6  2.6.24-rc5  2.6.24-rc4  2.6.24-rc3-git7 
(Following) 2.6.24-git1  2.6.24-git2  2.6.24-git3  2.6.24-git4  2.6.24-git5  2.6.24-git6 

Location
[  2.6.24
  [  block
     o  genhd.c

Patch

diff --git a/block/genhd.c b/block/genhd.c
index 3af1e7a..f2ac914 100644
--- a/block/genhd.c
+++ b/block/genhd.c
@@ -540,61 +540,42 @@ static int block_uevent_filter(struct kset *kset, struct kobject *kobj)
    return ((ktype == &ktype_block) || (ktype == &ktype_part));
 }
 
-static int block_uevent(struct kset *kset, struct kobject *kobj, char **envp,
-          int num_envp, char *buffer, int buffer_size)
+static int block_uevent(struct kset *kset, struct kobject *kobj,
+         struct kobj_uevent_env *env)
 {
    struct kobj_type *ktype = get_ktype(kobj);
    struct device *physdev;
    struct gendisk *disk;
    struct hd_struct *part;
-   int length = 0;
-   int i = 0;
 
    if (ktype == &ktype_block) {
       disk = container_of(kobj, struct gendisk, kobj);
-      add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-                &length, "MINOR=%u", disk->first_minor);
+      add_uevent_var(env, "MINOR=%u", disk->first_minor);
    } else if (ktype == &ktype_part) {
       disk = container_of(kobj->parent, struct gendisk, kobj);
       part = container_of(kobj, struct hd_struct, kobj);
-      add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-                &length, "MINOR=%u",
+      add_uevent_var(env, "MINOR=%u",
                 disk->first_minor + part->partno);
    } else
       return 0;
 
-   add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &length,
-             "MAJOR=%u", disk->major);
+   add_uevent_var(env, "MAJOR=%u", disk->major);
 
    /* add physical device, backing this device  */
    physdev = disk->driverfs_dev;
    if (physdev) {
       char *path = kobject_get_path(&physdev->kobj, GFP_KERNEL);
 
-      add_uevent_var(envp, num_envp, &i, buffer, buffer_size,
-                &length, "PHYSDEVPATH=%s", path);
+      add_uevent_var(env, "PHYSDEVPATH=%s", path);
       kfree(path);
 
       if (physdev->bus)
-         add_uevent_var(envp, num_envp, &i,
-                   buffer, buffer_size, &length,
-                   "PHYSDEVBUS=%s",
-                   physdev->bus->name);
+         add_uevent_var(env, "PHYSDEVBUS=%s", physdev->bus->name);
 
       if (physdev->driver)
-         add_uevent_var(envp, num_envp, &i,
-                   buffer, buffer_size, &length,
-                   "PHYSDEVDRIVER=%s",
-                   physdev->driver->name);
+         add_uevent_var(env, physdev->driver->name);
    }
 
-   /* terminate, set to next free slot, shrink available space */
-   envp[i] = NULL;
-   envp = &envp[i];
-   num_envp -= i;
-   buffer = &buffer[length];
-   buffer_size -= length;
-
    return 0;
 }
 
@@ -734,6 +715,7 @@ struct gendisk *alloc_disk_node(int minors, int node_id)
          disk->part = kmalloc_node(size,
             GFP_KERNEL | __GFP_ZERO, node_id);
          if (!disk->part) {
+            free_disk_stats(disk);
             kfree(disk);
             return NULL;
          }


Comments: webmaster (at) linuxhq.com.
Advertising: banners (at) linuxhq.com.
Compilation ©1998-2008 Linux Headquarters, Inc.