[PATCH] devfs support for LVM

From: Christoph Hellwig (hch@ns.lst.de)
Date: Tue Sep 05 2000 - 09:46:40 EST


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 majordomo@vger.kernel.org Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Thu Sep 07 2000 - 21:00:23 EST