diff options
| -rw-r--r-- | fs/partitions/Makefile | 1 | ||||
| -rw-r--r-- | fs/partitions/check.c | 26 | ||||
| -rw-r--r-- | fs/partitions/devfs.c | 130 | ||||
| -rw-r--r-- | fs/partitions/devfs.h | 10 |
4 files changed, 5 insertions, 162 deletions
diff --git a/fs/partitions/Makefile b/fs/partitions/Makefile index 42c7d3878ed0..d713ce6b3e12 100644 --- a/fs/partitions/Makefile +++ b/fs/partitions/Makefile | |||
| @@ -4,7 +4,6 @@ | |||
| 4 | 4 | ||
| 5 | obj-y := check.o | 5 | obj-y := check.o |
| 6 | 6 | ||
| 7 | obj-$(CONFIG_DEVFS_FS) += devfs.o | ||
| 8 | obj-$(CONFIG_ACORN_PARTITION) += acorn.o | 7 | obj-$(CONFIG_ACORN_PARTITION) += acorn.o |
| 9 | obj-$(CONFIG_AMIGA_PARTITION) += amiga.o | 8 | obj-$(CONFIG_AMIGA_PARTITION) += amiga.o |
| 10 | obj-$(CONFIG_ATARI_PARTITION) += atari.o | 9 | obj-$(CONFIG_ATARI_PARTITION) += atari.o |
diff --git a/fs/partitions/check.c b/fs/partitions/check.c index 2ef313a96b66..2ab7701eb2fb 100644 --- a/fs/partitions/check.c +++ b/fs/partitions/check.c | |||
| @@ -21,7 +21,6 @@ | |||
| 21 | #include <linux/devfs_fs_kernel.h> | 21 | #include <linux/devfs_fs_kernel.h> |
| 22 | 22 | ||
| 23 | #include "check.h" | 23 | #include "check.h" |
| 24 | #include "devfs.h" | ||
| 25 | 24 | ||
| 26 | #include "acorn.h" | 25 | #include "acorn.h" |
| 27 | #include "amiga.h" | 26 | #include "amiga.h" |
| @@ -161,18 +160,11 @@ check_partition(struct gendisk *hd, struct block_device *bdev) | |||
| 161 | if (!state) | 160 | if (!state) |
| 162 | return NULL; | 161 | return NULL; |
| 163 | 162 | ||
| 164 | #ifdef CONFIG_DEVFS_FS | 163 | disk_name(hd, 0, state->name); |
| 165 | if (hd->devfs_name[0] != '\0') { | 164 | printk(KERN_INFO " %s:", state->name); |
| 166 | printk(KERN_INFO " /dev/%s:", hd->devfs_name); | 165 | if (isdigit(state->name[strlen(state->name)-1])) |
| 167 | sprintf(state->name, "p"); | 166 | sprintf(state->name, "p"); |
| 168 | } | 167 | |
| 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; | 168 | state->limit = hd->minors; |
| 177 | i = res = 0; | 169 | i = res = 0; |
| 178 | while (!res && check_part[i]) { | 170 | while (!res && check_part[i]) { |
| @@ -423,14 +415,8 @@ void register_disk(struct gendisk *disk) | |||
| 423 | disk_sysfs_add_subdirs(disk); | 415 | disk_sysfs_add_subdirs(disk); |
| 424 | 416 | ||
| 425 | /* No minors to use for partitions */ | 417 | /* No minors to use for partitions */ |
| 426 | if (disk->minors == 1) { | 418 | if (disk->minors == 1) |
| 427 | if (disk->devfs_name[0] != '\0') | ||
| 428 | devfs_add_disk(disk); | ||
| 429 | goto exit; | 419 | goto exit; |
| 430 | } | ||
| 431 | |||
| 432 | /* always add handle for the whole disk */ | ||
| 433 | devfs_add_partitioned(disk); | ||
| 434 | 420 | ||
| 435 | /* No such device (e.g., media were just removed) */ | 421 | /* No such device (e.g., media were just removed) */ |
| 436 | if (!get_capacity(disk)) | 422 | if (!get_capacity(disk)) |
| @@ -538,8 +524,6 @@ void del_gendisk(struct gendisk *disk) | |||
| 538 | disk_stat_set_all(disk, 0); | 524 | disk_stat_set_all(disk, 0); |
| 539 | disk->stamp = 0; | 525 | disk->stamp = 0; |
| 540 | 526 | ||
| 541 | devfs_remove_disk(disk); | ||
| 542 | |||
| 543 | kobject_uevent(&disk->kobj, KOBJ_REMOVE); | 527 | kobject_uevent(&disk->kobj, KOBJ_REMOVE); |
| 544 | if (disk->holder_dir) | 528 | if (disk->holder_dir) |
| 545 | kobject_unregister(disk->holder_dir); | 529 | kobject_unregister(disk->holder_dir); |
diff --git a/fs/partitions/devfs.c b/fs/partitions/devfs.c deleted file mode 100644 index 3f0a780c9cec..000000000000 --- a/fs/partitions/devfs.c +++ /dev/null | |||
| @@ -1,130 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * This tries to keep block devices away from devfs as much as possible. | ||
| 3 | */ | ||
| 4 | #include <linux/fs.h> | ||
| 5 | #include <linux/devfs_fs_kernel.h> | ||
| 6 | #include <linux/vmalloc.h> | ||
| 7 | #include <linux/genhd.h> | ||
| 8 | #include <linux/bitops.h> | ||
| 9 | #include <linux/mutex.h> | ||
| 10 | |||
| 11 | |||
| 12 | struct unique_numspace { | ||
| 13 | u32 num_free; /* Num free in bits */ | ||
| 14 | u32 length; /* Array length in bytes */ | ||
| 15 | unsigned long *bits; | ||
| 16 | struct semaphore mutex; | ||
| 17 | }; | ||
| 18 | |||
| 19 | static DEFINE_MUTEX(numspace_mutex); | ||
| 20 | |||
| 21 | static int expand_numspace(struct unique_numspace *s) | ||
| 22 | { | ||
| 23 | u32 length; | ||
| 24 | void *bits; | ||
| 25 | |||
| 26 | if (s->length < 16) | ||
| 27 | length = 16; | ||
| 28 | else | ||
| 29 | length = s->length << 1; | ||
| 30 | |||
| 31 | bits = vmalloc(length); | ||
| 32 | if (!bits) | ||
| 33 | return -ENOMEM; | ||
| 34 | if (s->bits) { | ||
| 35 | memcpy(bits, s->bits, s->length); | ||
| 36 | vfree(s->bits); | ||
| 37 | } | ||
| 38 | |||
| 39 | s->num_free = (length - s->length) << 3; | ||
| 40 | s->bits = bits; | ||
| 41 | memset(bits + s->length, 0, length - s->length); | ||
| 42 | s->length = length; | ||
| 43 | |||
| 44 | return 0; | ||
| 45 | } | ||
| 46 | |||
| 47 | static int alloc_unique_number(struct unique_numspace *s) | ||
| 48 | { | ||
| 49 | int rval = 0; | ||
| 50 | |||
| 51 | mutex_lock(&numspace_mutex); | ||
| 52 | if (s->num_free < 1) | ||
| 53 | rval = expand_numspace(s); | ||
| 54 | if (!rval) { | ||
| 55 | rval = find_first_zero_bit(s->bits, s->length << 3); | ||
| 56 | --s->num_free; | ||
| 57 | __set_bit(rval, s->bits); | ||
| 58 | } | ||
| 59 | mutex_unlock(&numspace_mutex); | ||
| 60 | |||
| 61 | return rval; | ||
| 62 | } | ||
| 63 | |||
| 64 | static void dealloc_unique_number(struct unique_numspace *s, int number) | ||
| 65 | { | ||
| 66 | int old_val; | ||
| 67 | |||
| 68 | if (number >= 0) { | ||
| 69 | mutex_lock(&numspace_mutex); | ||
| 70 | old_val = __test_and_clear_bit(number, s->bits); | ||
| 71 | if (old_val) | ||
| 72 | ++s->num_free; | ||
| 73 | mutex_unlock(&numspace_mutex); | ||
| 74 | } | ||
| 75 | } | ||
| 76 | |||
| 77 | static struct unique_numspace disc_numspace; | ||
| 78 | static struct unique_numspace cdrom_numspace; | ||
| 79 | |||
| 80 | void devfs_add_partitioned(struct gendisk *disk) | ||
| 81 | { | ||
| 82 | char dirname[64], symlink[16]; | ||
| 83 | |||
| 84 | devfs_mk_dir(disk->devfs_name); | ||
| 85 | devfs_mk_bdev(MKDEV(disk->major, disk->first_minor), | ||
| 86 | S_IFBLK|S_IRUSR|S_IWUSR, | ||
| 87 | "%s/disc", disk->devfs_name); | ||
| 88 | |||
| 89 | disk->number = alloc_unique_number(&disc_numspace); | ||
| 90 | |||
| 91 | sprintf(symlink, "discs/disc%d", disk->number); | ||
| 92 | sprintf(dirname, "../%s", disk->devfs_name); | ||
| 93 | devfs_mk_symlink(symlink, dirname); | ||
| 94 | |||
| 95 | } | ||
| 96 | |||
| 97 | void devfs_add_disk(struct gendisk *disk) | ||
| 98 | { | ||
| 99 | devfs_mk_bdev(MKDEV(disk->major, disk->first_minor), | ||
| 100 | (disk->flags & GENHD_FL_CD) ? | ||
| 101 | S_IFBLK|S_IRUGO|S_IWUGO : | ||
| 102 | S_IFBLK|S_IRUSR|S_IWUSR, | ||
| 103 | "%s", disk->devfs_name); | ||
| 104 | |||
| 105 | if (disk->flags & GENHD_FL_CD) { | ||
| 106 | char dirname[64], symlink[16]; | ||
| 107 | |||
| 108 | disk->number = alloc_unique_number(&cdrom_numspace); | ||
| 109 | |||
| 110 | sprintf(symlink, "cdroms/cdrom%d", disk->number); | ||
| 111 | sprintf(dirname, "../%s", disk->devfs_name); | ||
| 112 | devfs_mk_symlink(symlink, dirname); | ||
| 113 | } | ||
| 114 | } | ||
| 115 | |||
| 116 | void devfs_remove_disk(struct gendisk *disk) | ||
| 117 | { | ||
| 118 | if (disk->minors != 1) { | ||
| 119 | devfs_remove("discs/disc%d", disk->number); | ||
| 120 | dealloc_unique_number(&disc_numspace, disk->number); | ||
| 121 | devfs_remove("%s/disc", disk->devfs_name); | ||
| 122 | } | ||
| 123 | if (disk->flags & GENHD_FL_CD) { | ||
| 124 | devfs_remove("cdroms/cdrom%d", disk->number); | ||
| 125 | dealloc_unique_number(&cdrom_numspace, disk->number); | ||
| 126 | } | ||
| 127 | devfs_remove(disk->devfs_name); | ||
| 128 | } | ||
| 129 | |||
| 130 | |||
diff --git a/fs/partitions/devfs.h b/fs/partitions/devfs.h deleted file mode 100644 index 176118b4e492..000000000000 --- a/fs/partitions/devfs.h +++ /dev/null | |||
| @@ -1,10 +0,0 @@ | |||
| 1 | |||
| 2 | #ifdef CONFIG_DEVFS_FS | ||
| 3 | void devfs_add_disk(struct gendisk *dev); | ||
| 4 | void devfs_add_partitioned(struct gendisk *dev); | ||
| 5 | void devfs_remove_disk(struct gendisk *dev); | ||
| 6 | #else | ||
| 7 | # define devfs_add_disk(disk) do { } while (0) | ||
| 8 | # define devfs_add_partitioned(disk) do { } while (0) | ||
| 9 | # define devfs_remove_disk(disk) do { } while (0) | ||
| 10 | #endif | ||
