Hi Linus,
I've updated my devfs for lvm patch to 2.4.0-test8pre.
Here it is.
Christoph
--
Always remember that you are unique. Just like everyone else.
--- linux.orig/drivers/block/lvm.c Fri Jul 14 14:38:29 2000
+++ linux/drivers/block/lvm.c Sun Sep 3 13:54:00 2000
@@ -299,6 +299,11 @@
static spinlock_t lvm_lock = SPIN_LOCK_UNLOCKED;
+static devfs_handle_t lvm_devfs_handle;
+static devfs_handle_t vg_devfs_handle[MAX_VG];
+static devfs_handle_t ch_devfs_handle[MAX_VG];
+static devfs_handle_t lv_devfs_handle[MAX_LV];
+
static struct file_operations lvm_chr_fops =
{
owner: THIS_MODULE,
@@ -358,13 +363,18 @@
printk(KERN_ERR "%s -- register_chrdev failed\n", lvm_name);
return -EIO;
}
- if (register_blkdev(MAJOR_NR, lvm_name, &lvm_blk_dops) < 0)
- {
+ if (register_blkdev(MAJOR_NR, lvm_name, &lvm_blk_dops) < 0) {
printk("%s -- register_blkdev failed\n", lvm_name);
if (unregister_chrdev(LVM_CHAR_MAJOR, lvm_name) < 0)
printk(KERN_ERR "%s -- unregister_chrdev failed\n", lvm_name);
return -EIO;
}
+
+ lvm_devfs_handle = devfs_register(
+ 0 , "lvm", 0, 0, LVM_CHAR_MAJOR,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP,
+ &lvm_chr_fops, NULL);
+
#if defined CONFIG_LVM_PROC_FS && defined CONFIG_PROC_FS
create_proc_info_entry(LVM_NAME, S_IFREG | S_IRUGO,
&proc_root, lvm_proc_get_info_ptr);
@@ -422,6 +432,8 @@
{
struct gendisk *gendisk_ptr = NULL, *gendisk_ptr_prev = NULL;
+ devfs_unregister (lvm_devfs_handle);
+
if (unregister_chrdev(LVM_CHAR_MAJOR, lvm_name) < 0) {
printk(KERN_ERR "%s -- unregister_chrdev failed\n", lvm_name);
}
@@ -1625,6 +1637,14 @@
kfree(vg_ptr);
return -EFAULT;
}
+
+ vg_devfs_handle[vg_ptr->vg_number] = devfs_mk_dir(0, vg_ptr->vg_name, NULL);
+ ch_devfs_handle[vg_ptr->vg_number] = devfs_register(
+ vg_devfs_handle[vg_ptr->vg_number] , "group",
+ DEVFS_FL_DEFAULT, LVM_CHAR_MAJOR, vg_ptr->vg_number,
+ S_IFCHR | S_IRUSR | S_IWUSR | S_IRGRP,
+ &lvm_chr_fops, NULL);
+
/* we are not that active so far... */
vg_ptr->vg_status &= ~VG_ACTIVE;
vg[VG_CHR(minor)] = vg_ptr;
@@ -1852,6 +1872,9 @@
/* let's go inactive */
vg_ptr->vg_status &= ~VG_ACTIVE;
+ devfs_unregister (ch_devfs_handle[vg_ptr->vg_number]);
+ devfs_unregister (vg_devfs_handle[vg_ptr->vg_number]);
+
/* free LVs */
/* first free snapshot logical volumes */
for (i = 0; i < vg_ptr->lv_max; i++) {
@@ -1907,6 +1930,7 @@
{
int l, le, l_new, p, size;
ulong lv_status_save;
+ char *lv_tmp, *lv_buf;
lv_block_exception_t *lvbe = lv->lv_block_exception;
vg_t *vg_ptr = vg[VG_CHR(minor)];
lv_t *lv_ptr = NULL;
@@ -2062,6 +2086,17 @@
vg_ptr->lv_cur++;
lv_ptr->lv_status = lv_status_save;
+ strtok(lv->lv_name, "/"); /* /dev */
+
+ while((lv_tmp = strtok(NULL, "/")) != NULL)
+ lv_buf = lv_tmp;
+
+ lv_devfs_handle[lv->lv_number] = devfs_register(
+ vg_devfs_handle[vg_ptr->vg_number], lv_buf,
+ DEVFS_FL_DEFAULT, LVM_BLK_MAJOR, lv->lv_number,
+ S_IFBLK | S_IRUSR | S_IWUSR | S_IRGRP,
+ &lvm_blk_dops, NULL);
+
/* optionally add our new snapshot LV */
if (lv_ptr->lv_access & LV_SNAPSHOT) {
/* sync the original logical volume */
@@ -2153,6 +2188,8 @@
lv_ptr->lv_snapshot_org->lv_access &= ~LV_SNAPSHOT_ORG;
lvm_snapshot_release(lv_ptr);
}
+
+ devfs_unregister(lv_devfs_handle[lv_ptr->lv_number]);
#ifdef DEBUG_KFREE
printk(KERN_DEBUG "%s -- kfree %d\n", lvm_name, __LINE__);
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
Please read the FAQ at http://www.tux.org/lkml/