forked from luck/tmp_suning_uos_patched
[PATCH] devfs: Remove devfs from the partition code
This patch removes the devfs code from the fs/partitions/ directory. Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
5c3927dc34
commit
a29641883f
|
@ -4,7 +4,6 @@
|
|||
|
||||
obj-y := check.o
|
||||
|
||||
obj-$(CONFIG_DEVFS_FS) += devfs.o
|
||||
obj-$(CONFIG_ACORN_PARTITION) += acorn.o
|
||||
obj-$(CONFIG_AMIGA_PARTITION) += amiga.o
|
||||
obj-$(CONFIG_ATARI_PARTITION) += atari.o
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
#include <linux/devfs_fs_kernel.h>
|
||||
|
||||
#include "check.h"
|
||||
#include "devfs.h"
|
||||
|
||||
#include "acorn.h"
|
||||
#include "amiga.h"
|
||||
|
@ -161,18 +160,11 @@ check_partition(struct gendisk *hd, struct block_device *bdev)
|
|||
if (!state)
|
||||
return NULL;
|
||||
|
||||
#ifdef CONFIG_DEVFS_FS
|
||||
if (hd->devfs_name[0] != '\0') {
|
||||
printk(KERN_INFO " /dev/%s:", hd->devfs_name);
|
||||
disk_name(hd, 0, state->name);
|
||||
printk(KERN_INFO " %s:", state->name);
|
||||
if (isdigit(state->name[strlen(state->name)-1]))
|
||||
sprintf(state->name, "p");
|
||||
}
|
||||
#endif
|
||||
else {
|
||||
disk_name(hd, 0, state->name);
|
||||
printk(KERN_INFO " %s:", state->name);
|
||||
if (isdigit(state->name[strlen(state->name)-1]))
|
||||
sprintf(state->name, "p");
|
||||
}
|
||||
|
||||
state->limit = hd->minors;
|
||||
i = res = 0;
|
||||
while (!res && check_part[i]) {
|
||||
|
@ -423,14 +415,8 @@ void register_disk(struct gendisk *disk)
|
|||
disk_sysfs_add_subdirs(disk);
|
||||
|
||||
/* No minors to use for partitions */
|
||||
if (disk->minors == 1) {
|
||||
if (disk->devfs_name[0] != '\0')
|
||||
devfs_add_disk(disk);
|
||||
if (disk->minors == 1)
|
||||
goto exit;
|
||||
}
|
||||
|
||||
/* always add handle for the whole disk */
|
||||
devfs_add_partitioned(disk);
|
||||
|
||||
/* No such device (e.g., media were just removed) */
|
||||
if (!get_capacity(disk))
|
||||
|
@ -538,8 +524,6 @@ void del_gendisk(struct gendisk *disk)
|
|||
disk_stat_set_all(disk, 0);
|
||||
disk->stamp = 0;
|
||||
|
||||
devfs_remove_disk(disk);
|
||||
|
||||
kobject_uevent(&disk->kobj, KOBJ_REMOVE);
|
||||
if (disk->holder_dir)
|
||||
kobject_unregister(disk->holder_dir);
|
||||
|
|
|
@ -1,130 +0,0 @@
|
|||
/*
|
||||
* This tries to keep block devices away from devfs as much as possible.
|
||||
*/
|
||||
#include <linux/fs.h>
|
||||
#include <linux/devfs_fs_kernel.h>
|
||||
#include <linux/vmalloc.h>
|
||||
#include <linux/genhd.h>
|
||||
#include <linux/bitops.h>
|
||||
#include <linux/mutex.h>
|
||||
|
||||
|
||||
struct unique_numspace {
|
||||
u32 num_free; /* Num free in bits */
|
||||
u32 length; /* Array length in bytes */
|
||||
unsigned long *bits;
|
||||
struct semaphore mutex;
|
||||
};
|
||||
|
||||
static DEFINE_MUTEX(numspace_mutex);
|
||||
|
||||
static int expand_numspace(struct unique_numspace *s)
|
||||
{
|
||||
u32 length;
|
||||
void *bits;
|
||||
|
||||
if (s->length < 16)
|
||||
length = 16;
|
||||
else
|
||||
length = s->length << 1;
|
||||
|
||||
bits = vmalloc(length);
|
||||
if (!bits)
|
||||
return -ENOMEM;
|
||||
if (s->bits) {
|
||||
memcpy(bits, s->bits, s->length);
|
||||
vfree(s->bits);
|
||||
}
|
||||
|
||||
s->num_free = (length - s->length) << 3;
|
||||
s->bits = bits;
|
||||
memset(bits + s->length, 0, length - s->length);
|
||||
s->length = length;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int alloc_unique_number(struct unique_numspace *s)
|
||||
{
|
||||
int rval = 0;
|
||||
|
||||
mutex_lock(&numspace_mutex);
|
||||
if (s->num_free < 1)
|
||||
rval = expand_numspace(s);
|
||||
if (!rval) {
|
||||
rval = find_first_zero_bit(s->bits, s->length << 3);
|
||||
--s->num_free;
|
||||
__set_bit(rval, s->bits);
|
||||
}
|
||||
mutex_unlock(&numspace_mutex);
|
||||
|
||||
return rval;
|
||||
}
|
||||
|
||||
static void dealloc_unique_number(struct unique_numspace *s, int number)
|
||||
{
|
||||
int old_val;
|
||||
|
||||
if (number >= 0) {
|
||||
mutex_lock(&numspace_mutex);
|
||||
old_val = __test_and_clear_bit(number, s->bits);
|
||||
if (old_val)
|
||||
++s->num_free;
|
||||
mutex_unlock(&numspace_mutex);
|
||||
}
|
||||
}
|
||||
|
||||
static struct unique_numspace disc_numspace;
|
||||
static struct unique_numspace cdrom_numspace;
|
||||
|
||||
void devfs_add_partitioned(struct gendisk *disk)
|
||||
{
|
||||
char dirname[64], symlink[16];
|
||||
|
||||
devfs_mk_dir(disk->devfs_name);
|
||||
devfs_mk_bdev(MKDEV(disk->major, disk->first_minor),
|
||||
S_IFBLK|S_IRUSR|S_IWUSR,
|
||||
"%s/disc", disk->devfs_name);
|
||||
|
||||
disk->number = alloc_unique_number(&disc_numspace);
|
||||
|
||||
sprintf(symlink, "discs/disc%d", disk->number);
|
||||
sprintf(dirname, "../%s", disk->devfs_name);
|
||||
devfs_mk_symlink(symlink, dirname);
|
||||
|
||||
}
|
||||
|
||||
void devfs_add_disk(struct gendisk *disk)
|
||||
{
|
||||
devfs_mk_bdev(MKDEV(disk->major, disk->first_minor),
|
||||
(disk->flags & GENHD_FL_CD) ?
|
||||
S_IFBLK|S_IRUGO|S_IWUGO :
|
||||
S_IFBLK|S_IRUSR|S_IWUSR,
|
||||
"%s", disk->devfs_name);
|
||||
|
||||
if (disk->flags & GENHD_FL_CD) {
|
||||
char dirname[64], symlink[16];
|
||||
|
||||
disk->number = alloc_unique_number(&cdrom_numspace);
|
||||
|
||||
sprintf(symlink, "cdroms/cdrom%d", disk->number);
|
||||
sprintf(dirname, "../%s", disk->devfs_name);
|
||||
devfs_mk_symlink(symlink, dirname);
|
||||
}
|
||||
}
|
||||
|
||||
void devfs_remove_disk(struct gendisk *disk)
|
||||
{
|
||||
if (disk->minors != 1) {
|
||||
devfs_remove("discs/disc%d", disk->number);
|
||||
dealloc_unique_number(&disc_numspace, disk->number);
|
||||
devfs_remove("%s/disc", disk->devfs_name);
|
||||
}
|
||||
if (disk->flags & GENHD_FL_CD) {
|
||||
devfs_remove("cdroms/cdrom%d", disk->number);
|
||||
dealloc_unique_number(&cdrom_numspace, disk->number);
|
||||
}
|
||||
devfs_remove(disk->devfs_name);
|
||||
}
|
||||
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
|
||||
#ifdef CONFIG_DEVFS_FS
|
||||
void devfs_add_disk(struct gendisk *dev);
|
||||
void devfs_add_partitioned(struct gendisk *dev);
|
||||
void devfs_remove_disk(struct gendisk *dev);
|
||||
#else
|
||||
# define devfs_add_disk(disk) do { } while (0)
|
||||
# define devfs_add_partitioned(disk) do { } while (0)
|
||||
# define devfs_remove_disk(disk) do { } while (0)
|
||||
#endif
|
Loading…
Reference in New Issue
Block a user