[linux-lvm] 2.2.13ac5 with LVM
Patrick McCarty
mccartyp at apu.edu
Mon Oct 22 18:53:01 UTC 2001
Jason,
Thanks for the patch.
I've cleaned it up quite a bit, and attached my changes.
I just successfully built a 2.4.12ac5 kernel with it -- about to try it
out.
Thanks again!
-- Patrick
Thank you sir. May I have another?
-------------- next part --------------
diff -ruN md.old/lvm-snap.c md/lvm-snap.c
--- md.old/lvm-snap.c Mon Oct 22 18:18:14 2001
+++ md/lvm-snap.c Mon Oct 22 18:24:28 2001
@@ -438,7 +438,7 @@
int lvm_snapshot_alloc_iobuf_pages(struct kiobuf * iobuf, int sectors)
{
int bytes, nr_pages, err, i;
-
+
bytes = sectors * SECTOR_SIZE;
nr_pages = (bytes + ~PAGE_MASK) >> PAGE_SHIFT;
err = expand_kiobuf(iobuf, nr_pages);
@@ -511,9 +511,10 @@
int lvm_snapshot_alloc(lv_t * lv_snap)
{
int ret, max_sectors;
+ int nbhs = KIO_MAX_SECTORS;
/* allocate kiovec to do chunk io */
- ret = alloc_kiovec(1, &lv_snap->lv_iobuf);
+ ret = alloc_kiovec_sz(1, &lv_snap->lv_iobuf,&nbhs);
if (ret) goto out;
max_sectors = KIO_MAX_SECTORS << (PAGE_SHIFT-9);
@@ -522,7 +523,7 @@
if (ret) goto out_free_kiovec;
/* allocate kiovec to do exception table io */
- ret = alloc_kiovec(1, &lv_snap->lv_COW_table_iobuf);
+ ret = alloc_kiovec_sz(1, &lv_snap->lv_COW_table_iobuf,&nbhs);
if (ret) goto out_free_kiovec;
ret = lvm_snapshot_alloc_iobuf_pages(lv_snap->lv_COW_table_iobuf,
@@ -538,12 +539,12 @@
out_free_both_kiovecs:
unmap_kiobuf(lv_snap->lv_COW_table_iobuf);
- free_kiovec(1, &lv_snap->lv_COW_table_iobuf);
+ free_kiovec_sz(1, &lv_snap->lv_COW_table_iobuf,&nbhs);
lv_snap->lv_COW_table_iobuf = NULL;
out_free_kiovec:
unmap_kiobuf(lv_snap->lv_iobuf);
- free_kiovec(1, &lv_snap->lv_iobuf);
+ free_kiovec_sz(1, &lv_snap->lv_iobuf,&nbhs);
lv_snap->lv_iobuf = NULL;
if (lv_snap->lv_snapshot_hash_table != NULL)
vfree(lv_snap->lv_snapshot_hash_table);
@@ -553,6 +554,8 @@
void lvm_snapshot_release(lv_t * lv)
{
+ int nbhs = KIO_MAX_SECTORS;
+
if (lv->lv_block_exception)
{
vfree(lv->lv_block_exception);
@@ -568,14 +571,14 @@
{
kiobuf_wait_for_io(lv->lv_iobuf);
unmap_kiobuf(lv->lv_iobuf);
- free_kiovec(1, &lv->lv_iobuf);
+ free_kiovec_sz(1, &lv->lv_iobuf,&nbhs);
lv->lv_iobuf = NULL;
}
if (lv->lv_COW_table_iobuf)
{
kiobuf_wait_for_io(lv->lv_COW_table_iobuf);
unmap_kiobuf(lv->lv_COW_table_iobuf);
- free_kiovec(1, &lv->lv_COW_table_iobuf);
+ free_kiovec_sz(1, &lv->lv_COW_table_iobuf,&nbhs);
lv->lv_COW_table_iobuf = NULL;
}
}
diff -ruN md.old/lvm.c md/lvm.c
--- md.old/lvm.c Mon Oct 22 18:18:14 2001
+++ md/lvm.c Mon Oct 22 18:21:15 2001
@@ -432,8 +432,6 @@
*/
int lvm_init(void)
{
- struct gendisk *gendisk_ptr = NULL;
-
if (devfs_register_chrdev(LVM_CHAR_MAJOR,
lvm_name, &lvm_chr_fops) < 0) {
printk(KERN_ERR "%s -- devfs_register_chrdev failed\n",
@@ -455,18 +453,7 @@
lvm_geninit(&lvm_gendisk);
/* insert our gendisk at the corresponding major */
- if (gendisk_head != NULL) {
- gendisk_ptr = gendisk_head;
- while (gendisk_ptr->next != NULL &&
- gendisk_ptr->major > lvm_gendisk.major) {
- gendisk_ptr = gendisk_ptr->next;
- }
- lvm_gendisk.next = gendisk_ptr->next;
- gendisk_ptr->next = &lvm_gendisk;
- } else {
- gendisk_head = &lvm_gendisk;
- lvm_gendisk.next = NULL;
- }
+ add_gendisk(&lvm_gendisk);
#ifdef LVM_HD_NAME
/* reference from drivers/block/genhd.c */
@@ -499,7 +486,6 @@
static void lvm_cleanup(void)
{
- struct gendisk *gendisk_ptr = NULL, *gendisk_ptr_prev = NULL;
if (devfs_unregister_chrdev(LVM_CHAR_MAJOR, lvm_name) < 0)
printk(KERN_ERR "%s -- devfs_unregister_chrdev failed\n",
@@ -508,18 +494,7 @@
printk(KERN_ERR "%s -- devfs_unregister_blkdev failed\n",
lvm_name);
-
-
- gendisk_ptr = gendisk_ptr_prev = gendisk_head;
- while (gendisk_ptr != NULL) {
- if (gendisk_ptr == &lvm_gendisk)
- break;
- gendisk_ptr_prev = gendisk_ptr;
- gendisk_ptr = gendisk_ptr->next;
- }
- /* delete our gendisk from chain */
- if (gendisk_ptr == &lvm_gendisk)
- gendisk_ptr_prev->next = gendisk_ptr->next;
+ del_gendisk(&lvm_gendisk);
blk_size[MAJOR_NR] = NULL;
blksize_size[MAJOR_NR] = NULL;
More information about the linux-lvm
mailing list