[PARTITION]: Add whole_disk attribute.
[linux-2.6.git] / fs / partitions / check.c
index 3d73d94..ac32a2e 100644 (file)
@@ -365,7 +365,7 @@ void delete_partition(struct gendisk *disk, int part)
        kobject_put(&p->kobj);
 }
 
-void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len)
+void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len, int flags)
 {
        struct hd_struct *p;
 
@@ -390,6 +390,15 @@ void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len)
        if (!disk->part_uevent_suppress)
                kobject_uevent(&p->kobj, KOBJ_ADD);
        sysfs_create_link(&p->kobj, &block_subsys.kset.kobj, "subsystem");
+       if (flags & ADDPART_FLAG_WHOLEDISK) {
+               static struct attribute addpartattr = {
+                       .name = "whole_disk",
+                       .mode = S_IRUSR | S_IRGRP | S_IROTH,
+                       .owner = THIS_MODULE,
+               };
+
+               sysfs_create_file(&p->kobj, &addpartattr);
+       }
        partition_sysfs_add_subdir(p);
        disk->part[part-1] = p;
 }
@@ -543,9 +552,9 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
                        printk(" %s: p%d exceeds device capacity\n",
                                disk->disk_name, p);
                }
-               add_partition(disk, p, from, size);
+               add_partition(disk, p, from, size, state->parts[p].flags);
 #ifdef CONFIG_BLK_DEV_MD
-               if (state->parts[p].flags)
+               if (state->parts[p].flags & ADDPART_FLAG_RAID)
                        md_autodetect_dev(bdev->bd_dev+p);
 #endif
        }