diff options
Diffstat (limited to 'fs/partitions/check.c')
-rw-r--r-- | fs/partitions/check.c | 44 |
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 | } |