]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - fs/partitions/check.c
block: always set bdev->bd_part
[linux-2.6-omap-h63xx.git] / fs / partitions / check.c
index ac0df3acdcda707005efc5f643a94fdae1849e10..87298c0fc8ce233c56e47e47dcec67c130a1df1a 100644 (file)
@@ -134,12 +134,7 @@ char *disk_name(struct gendisk *hd, int partno, char *buf)
 
 const char *bdevname(struct block_device *bdev, char *buf)
 {
-       int partno = 0;
-
-       if (bdev->bd_part)
-               partno = bdev->bd_part->partno;
-
-       return disk_name(bdev->bd_disk, partno, buf);
+       return disk_name(bdev->bd_disk, bdev->bd_part->partno, buf);
 }
 
 EXPORT_SYMBOL(bdevname);
@@ -173,7 +168,7 @@ check_partition(struct gendisk *hd, struct block_device *bdev)
        if (isdigit(state->name[strlen(state->name)-1]))
                sprintf(state->name, "p");
 
-       state->limit = disk_max_parts(hd) + 1;
+       state->limit = disk_max_parts(hd);
        i = res = err = 0;
        while (!res && check_part[i]) {
                memset(&state->parts, 0, sizeof(state->parts));
@@ -208,8 +203,8 @@ static ssize_t part_start_show(struct device *dev,
        return sprintf(buf, "%llu\n",(unsigned long long)p->start_sect);
 }
 
-static ssize_t part_size_show(struct device *dev,
-                             struct device_attribute *attr, char *buf)
+ssize_t part_size_show(struct device *dev,
+                      struct device_attribute *attr, char *buf)
 {
        struct hd_struct *p = dev_to_part(dev);
        return sprintf(buf, "%llu\n",(unsigned long long)p->nr_sects);
@@ -305,16 +300,6 @@ struct device_type part_type = {
        .release        = part_release,
 };
 
-static inline void disk_sysfs_add_subdirs(struct gendisk *disk)
-{
-       struct kobject *k;
-
-       k = kobject_get(&disk_to_dev(disk)->kobj);
-       disk->holder_dir = kobject_create_and_add("holders", k);
-       disk->slave_dir = kobject_create_and_add("slaves", k);
-       kobject_put(k);
-}
-
 static void delete_partition_rcu_cb(struct rcu_head *head)
 {
        struct hd_struct *part = container_of(head, struct hd_struct, rcu_head);
@@ -329,12 +314,12 @@ void delete_partition(struct gendisk *disk, int partno)
 {
        struct hd_struct *part;
 
-       part = disk->__part[partno-1];
+       part = disk->__part[partno];
        if (!part)
                return;
 
        blk_free_devt(part_devt(part));
-       rcu_assign_pointer(disk->__part[partno-1], NULL);
+       rcu_assign_pointer(disk->__part[partno], NULL);
        kobject_put(part->holder_dir);
        device_del(part_to_dev(part));
 
@@ -359,7 +344,7 @@ int add_partition(struct gendisk *disk, int partno,
        const char *dname;
        int err;
 
-       if (disk->__part[partno - 1])
+       if (disk->__part[partno])
                return -EBUSY;
 
        p = kzalloc(sizeof(*p), GFP_KERNEL);
@@ -375,7 +360,7 @@ int add_partition(struct gendisk *disk, int partno,
        p->start_sect = start;
        p->nr_sects = len;
        p->partno = partno;
-       p->policy = disk->policy;
+       p->policy = get_disk_ro(disk);
 
        dname = dev_name(ddev);
        if (isdigit(dname[strlen(dname) - 1]))
@@ -413,7 +398,7 @@ int add_partition(struct gendisk *disk, int partno,
 
        /* everything is up and running, commence */
        INIT_RCU_HEAD(&p->rcu_head);
-       rcu_assign_pointer(disk->__part[partno - 1], p);
+       rcu_assign_pointer(disk->__part[partno], p);
 
        /* suppress uevent if the disk supresses it */
        if (!ddev->uevent_suppress)
@@ -464,10 +449,11 @@ void register_disk(struct gendisk *disk)
                return;
        }
 #endif
-       disk_sysfs_add_subdirs(disk);
+       disk->part0.holder_dir = kobject_create_and_add("holders", &ddev->kobj);
+       disk->slave_dir = kobject_create_and_add("slaves", &ddev->kobj);
 
        /* No minors to use for partitions */
-       if (!disk_max_parts(disk))
+       if (!disk_partitionable(disk))
                goto exit;
 
        /* No such device (e.g., media were just removed) */
@@ -586,13 +572,13 @@ void del_gendisk(struct gendisk *disk)
        disk_part_iter_exit(&piter);
 
        invalidate_partition(disk, 0);
-       disk->capacity = 0;
+       set_capacity(disk, 0);
        disk->flags &= ~GENHD_FL_UP;
        unlink_gendisk(disk);
        disk_stat_set_all(disk, 0);
        disk->stamp = 0;
 
-       kobject_put(disk->holder_dir);
+       kobject_put(disk->part0.holder_dir);
        kobject_put(disk->slave_dir);
        disk->driverfs_dev = NULL;
 #ifndef CONFIG_SYSFS_DEPRECATED