git://git.onelab.eu
/
linux-2.6.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Revert to Fedora kernel-2.6.17-1.2187_FC5 patched with vs2.0.2.1; there are too many...
[linux-2.6.git]
/
fs
/
partitions
/
check.c
diff --git
a/fs/partitions/check.c
b/fs/partitions/check.c
index
51c6a74
..
7ef1f09
100644
(file)
--- a/
fs/partitions/check.c
+++ b/
fs/partitions/check.c
@@
-18,8
+18,10
@@
#include <linux/fs.h>
#include <linux/kmod.h>
#include <linux/ctype.h>
#include <linux/fs.h>
#include <linux/kmod.h>
#include <linux/ctype.h>
+#include <linux/devfs_fs_kernel.h>
#include "check.h"
#include "check.h"
+#include "devfs.h"
#include "acorn.h"
#include "amiga.h"
#include "acorn.h"
#include "amiga.h"
@@
-159,11
+161,18
@@
check_partition(struct gendisk *hd, struct block_device *bdev)
if (!state)
return NULL;
if (!state)
return NULL;
- disk_name(hd, 0, state->name);
- printk(KERN_INFO " %s:", state->name);
- if (isdigit(state->name[strlen(state->name)-1]))
+#ifdef CONFIG_DEVFS_FS
+ if (hd->devfs_name[0] != '\0') {
+ printk(KERN_INFO " /dev/%s:", hd->devfs_name);
sprintf(state->name, "p");
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]) {
state->limit = hd->minors;
i = res = 0;
while (!res && check_part[i]) {
@@
-319,7
+328,7
@@
void delete_partition(struct gendisk *disk, int part)
p->nr_sects = 0;
p->ios[0] = p->ios[1] = 0;
p->sectors[0] = p->sectors[1] = 0;
p->nr_sects = 0;
p->ios[0] = p->ios[1] = 0;
p->sectors[0] = p->sectors[1] = 0;
-
sysfs_remove_link(&p->kobj, "subsystem"
);
+
devfs_remove("%s/part%d", disk->devfs_name, part
);
if (p->holder_dir)
kobject_unregister(p->holder_dir);
kobject_uevent(&p->kobj, KOBJ_REMOVE);
if (p->holder_dir)
kobject_unregister(p->holder_dir);
kobject_uevent(&p->kobj, KOBJ_REMOVE);
@@
-339,7
+348,10
@@
void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len)
p->start_sect = start;
p->nr_sects = len;
p->partno = part;
p->start_sect = start;
p->nr_sects = len;
p->partno = part;
- p->policy = disk->policy;
+
+ devfs_mk_bdev(MKDEV(disk->major, disk->first_minor + part),
+ S_IFBLK|S_IRUSR|S_IWUSR,
+ "%s/part%d", disk->devfs_name, part);
if (isdigit(disk->kobj.name[strlen(disk->kobj.name)-1]))
snprintf(p->kobj.name,KOBJ_NAME_LEN,"%sp%d",disk->kobj.name,part);
if (isdigit(disk->kobj.name[strlen(disk->kobj.name)-1]))
snprintf(p->kobj.name,KOBJ_NAME_LEN,"%sp%d",disk->kobj.name,part);
@@
-351,7
+363,6
@@
void add_partition(struct gendisk *disk, int part, sector_t start, sector_t len)
kobject_add(&p->kobj);
if (!disk->part_uevent_suppress)
kobject_uevent(&p->kobj, KOBJ_ADD);
kobject_add(&p->kobj);
if (!disk->part_uevent_suppress)
kobject_uevent(&p->kobj, KOBJ_ADD);
- sysfs_create_link(&p->kobj, &block_subsys.kset.kobj, "subsystem");
partition_sysfs_add_subdir(p);
disk->part[part-1] = p;
}
partition_sysfs_add_subdir(p);
disk->part[part-1] = p;
}
@@
-387,7
+398,6
@@
static void disk_sysfs_symlinks(struct gendisk *disk)
kfree(disk_name);
}
}
kfree(disk_name);
}
}
- sysfs_create_link(&disk->kobj, &block_subsys.kset.kobj, "subsystem");
}
/* Not exported, helper to add_disk(). */
}
/* Not exported, helper to add_disk(). */
@@
-410,8
+420,14
@@
void register_disk(struct gendisk *disk)
disk_sysfs_add_subdirs(disk);
/* No minors to use for partitions */
disk_sysfs_add_subdirs(disk);
/* No minors to use for partitions */
- if (disk->minors == 1)
+ if (disk->minors == 1) {
+ if (disk->devfs_name[0] != '\0')
+ devfs_add_disk(disk);
goto exit;
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))
/* No such device (e.g., media were just removed) */
if (!get_capacity(disk))
@@
-465,10
+481,6
@@
int rescan_partitions(struct gendisk *disk, struct block_device *bdev)
sector_t from = state->parts[p].from;
if (!size)
continue;
sector_t from = state->parts[p].from;
if (!size)
continue;
- if (from + size > get_capacity(disk)) {
- printk(" %s: p%d exceeds device capacity\n",
- disk->disk_name, p);
- }
add_partition(disk, p, from, size);
#ifdef CONFIG_BLK_DEV_MD
if (state->parts[p].flags)
add_partition(disk, p, from, size);
#ifdef CONFIG_BLK_DEV_MD
if (state->parts[p].flags)
@@
-484,8
+496,8
@@
unsigned char *read_dev_sector(struct block_device *bdev, sector_t n, Sector *p)
struct address_space *mapping = bdev->bd_inode->i_mapping;
struct page *page;
struct address_space *mapping = bdev->bd_inode->i_mapping;
struct page *page;
- page = read_
mapping
_page(mapping, (pgoff_t)(n >> (PAGE_CACHE_SHIFT-9)),
-
NULL);
+ page = read_
cache
_page(mapping, (pgoff_t)(n >> (PAGE_CACHE_SHIFT-9)),
+
(filler_t *)mapping->a_ops->readpage,
NULL);
if (!IS_ERR(page)) {
wait_on_page_locked(page);
if (!PageUptodate(page))
if (!IS_ERR(page)) {
wait_on_page_locked(page);
if (!PageUptodate(page))
@@
-519,6
+531,8
@@
void del_gendisk(struct gendisk *disk)
disk_stat_set_all(disk, 0);
disk->stamp = 0;
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);
kobject_uevent(&disk->kobj, KOBJ_REMOVE);
if (disk->holder_dir)
kobject_unregister(disk->holder_dir);
@@
-534,6
+548,5
@@
void del_gendisk(struct gendisk *disk)
put_device(disk->driverfs_dev);
disk->driverfs_dev = NULL;
}
put_device(disk->driverfs_dev);
disk->driverfs_dev = NULL;
}
- sysfs_remove_link(&disk->kobj, "subsystem");
kobject_del(&disk->kobj);
}
kobject_del(&disk->kobj);
}