summaryrefslogtreecommitdiffstats
path: root/fs/partitions/check.c
diff options
context:
space:
mode:
Diffstat (limited to 'fs/partitions/check.c')
-rw-r--r--fs/partitions/check.c44
1 files changed, 15 insertions, 29 deletions
diff --git a/fs/partitions/check.c b/fs/partitions/check.c
index 7ef1f094de91..839634026eb5 100644
--- a/fs/partitions/check.c
+++ b/fs/partitions/check.c
@@ -18,10 +18,8 @@
18#include <linux/fs.h> 18#include <linux/fs.h>
19#include <linux/kmod.h> 19#include <linux/kmod.h>
20#include <linux/ctype.h> 20#include <linux/ctype.h>
21#include <linux/devfs_fs_kernel.h>
22 21
23#include "check.h" 22#include "check.h"
24#include "devfs.h"
25 23
26#include "acorn.h" 24#include "acorn.h"
27#include "amiga.h" 25#include "amiga.h"
@@ -161,18 +159,11 @@ check_partition(struct gendisk *hd, struct block_device *bdev)
161 if (!state) 159 if (!state)
162 return NULL; 160 return NULL;
163 161
164#ifdef CONFIG_DEVFS_FS 162 disk_name(hd, 0, state->name);
165 if (hd->devfs_name[0] != '\0') { 163 printk(KERN_INFO " %s:", state->name);
166 printk(KERN_INFO " /dev/%s:", hd->devfs_name); 164 if (isdigit(state->name[strlen(state->name)-1]))
167 sprintf(state->name, "p"); 165 sprintf(state->name, "p");
168 } 166
169#endif
170 else {
171 disk_name(hd, 0, state->name);
172 printk(KERN_INFO " %s:", state->name);
173 if (isdigit(state->name[strlen(state->name)-1]))
174 sprintf(state->name, "p");
175 }
176 state->limit = hd->minors; 167 state->limit = hd->minors;
177 i = res = 0; 168 i = res = 0;
178 while (!res && check_part[i]) { 169 while (!res && check_part[i]) {
@@ -328,7 +319,7 @@ void delete_partition(struct gendisk *disk, int part)
328 p->nr_sects = 0; 319 p->nr_sects = 0;
329 p->ios[0] = p->ios[1] = 0; 320 p->ios[0] = p->ios[1] = 0;
330 p->sectors[0] = p->sectors[1] = 0; 321 p->sectors[0] = p->sectors[1] = 0;
331 devfs_remove("%s/part%d", disk->devfs_name, part); 322 sysfs_remove_link(&p->kobj, "subsystem");
332 if (p->holder_dir) 323 if (p->holder_dir)
333 kobject_unregister(p->holder_dir); 324 kobject_unregister(p->holder_dir);
334 kobject_uevent(&p->kobj, KOBJ_REMOVE); 325 kobject_uevent(&p->kobj, KOBJ_REMOVE);
@@ -349,10 +340,6 @@ void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len)
349 p->nr_sects = len; 340 p->nr_sects = len;
350 p->partno = part; 341 p->partno = part;
351 342
352 devfs_mk_bdev(MKDEV(disk->major, disk->first_minor + part),
353 S_IFBLK|S_IRUSR|S_IWUSR,
354 "%s/part%d", disk->devfs_name, part);
355
356 if (isdigit(disk->kobj.name[strlen(disk->kobj.name)-1])) 343 if (isdigit(disk->kobj.name[strlen(disk->kobj.name)-1]))
357 snprintf(p->kobj.name,KOBJ_NAME_LEN,"%sp%d",disk->kobj.name,part); 344 snprintf(p->kobj.name,KOBJ_NAME_LEN,"%sp%d",disk->kobj.name,part);
358 else 345 else
@@ -363,6 +350,7 @@ void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len)
363 kobject_add(&p->kobj); 350 kobject_add(&p->kobj);
364 if (!disk->part_uevent_suppress) 351 if (!disk->part_uevent_suppress)
365 kobject_uevent(&p->kobj, KOBJ_ADD); 352 kobject_uevent(&p->kobj, KOBJ_ADD);
353 sysfs_create_link(&p->kobj, &block_subsys.kset.kobj, "subsystem");
366 partition_sysfs_add_subdir(p); 354 partition_sysfs_add_subdir(p);
367 disk->part[part-1] = p; 355 disk->part[part-1] = p;
368} 356}
@@ -398,6 +386,7 @@ static void disk_sysfs_symlinks(struct gendisk *disk)
398 kfree(disk_name); 386 kfree(disk_name);
399 } 387 }
400 } 388 }
389 sysfs_create_link(&disk->kobj, &block_subsys.kset.kobj, "subsystem");
401} 390}
402 391
403/* Not exported, helper to add_disk(). */ 392/* Not exported, helper to add_disk(). */
@@ -420,14 +409,8 @@ void register_disk(struct gendisk *disk)
420 disk_sysfs_add_subdirs(disk); 409 disk_sysfs_add_subdirs(disk);
421 410
422 /* No minors to use for partitions */ 411 /* No minors to use for partitions */
423 if (disk->minors == 1) { 412 if (disk->minors == 1)
424 if (disk->devfs_name[0] != '\0')
425 devfs_add_disk(disk);
426 goto exit; 413 goto exit;
427 }
428
429 /* always add handle for the whole disk */
430 devfs_add_partitioned(disk);
431 414
432 /* No such device (e.g., media were just removed) */ 415 /* No such device (e.g., media were just removed) */
433 if (!get_capacity(disk)) 416 if (!get_capacity(disk))
@@ -481,6 +464,10 @@ int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
481 sector_t from = state->parts[p].from; 464 sector_t from = state->parts[p].from;
482 if (!size) 465 if (!size)
483 continue; 466 continue;
467 if (from + size > get_capacity(disk)) {
468 printk(" %s: p%d exceeds device capacity\n",
469 disk->disk_name, p);
470 }
484 add_partition(disk, p, from, size); 471 add_partition(disk, p, from, size);
485#ifdef CONFIG_BLK_DEV_MD 472#ifdef CONFIG_BLK_DEV_MD
486 if (state->parts[p].flags) 473 if (state->parts[p].flags)
@@ -496,8 +483,8 @@ unsigned char *read_dev_sector(struct block_device *bdev, sector_t n, Sector *p)
496 struct address_space *mapping = bdev->bd_inode->i_mapping; 483 struct address_space *mapping = bdev->bd_inode->i_mapping;
497 struct page *page; 484 struct page *page;
498 485
499 page = read_cache_page(mapping, (pgoff_t)(n >> (PAGE_CACHE_SHIFT-9)), 486 page = read_mapping_page(mapping, (pgoff_t)(n >> (PAGE_CACHE_SHIFT-9)),
500 (filler_t *)mapping->a_ops->readpage, NULL); 487 NULL);
501 if (!IS_ERR(page)) { 488 if (!IS_ERR(page)) {
502 wait_on_page_locked(page); 489 wait_on_page_locked(page);
503 if (!PageUptodate(page)) 490 if (!PageUptodate(page))
@@ -531,8 +518,6 @@ void del_gendisk(struct gendisk *disk)
531 disk_stat_set_all(disk, 0); 518 disk_stat_set_all(disk, 0);
532 disk->stamp = 0; 519 disk->stamp = 0;
533 520
534 devfs_remove_disk(disk);
535
536 kobject_uevent(&disk->kobj, KOBJ_REMOVE); 521 kobject_uevent(&disk->kobj, KOBJ_REMOVE);
537 if (disk->holder_dir) 522 if (disk->holder_dir)
538 kobject_unregister(disk->holder_dir); 523 kobject_unregister(disk->holder_dir);
@@ -548,5 +533,6 @@ void del_gendisk(struct gendisk *disk)
548 put_device(disk->driverfs_dev); 533 put_device(disk->driverfs_dev);
549 disk->driverfs_dev = NULL; 534 disk->driverfs_dev = NULL;
550 } 535 }
536 sysfs_remove_link(&disk->kobj, "subsystem");
551 kobject_del(&disk->kobj); 537 kobject_del(&disk->kobj);
552} 538}