]> git.hungrycats.org Git - linux/commitdiff
[PATCH] Fix module ref counting for md.
authorNeil Brown <neilb@cse.unsw.edu.au>
Sun, 31 Aug 2003 05:43:41 +0000 (22:43 -0700)
committerLinus Torvalds <torvalds@home.osdl.org>
Sun, 31 Aug 2003 05:43:41 +0000 (22:43 -0700)
We don't need to explicitly count references as:
 - refcounting already happens for opens of /dev/md?
 -  when an array is active, a daughter module is loaded which
      locks "md" in.
We just need to make sure we clean up properly on unload. (export_array)

Also, xor needs a null module_exit so that it can be unloaded.

drivers/md/md.c
drivers/md/xor.c

index c49e0d4216fbda3c45fa14d5774ba2e96e163228..cee67e74ecbaaffa8d3894eb72ec4918f6a2a9fc 100644 (file)
@@ -179,7 +179,6 @@ static void mddev_put(mddev_t *mddev)
                mddev_map[mdidx(mddev)] = NULL;
                blk_put_queue(mddev->queue);
                kfree(mddev);
-               MOD_DEC_USE_COUNT;
        }
        spin_unlock(&all_mddevs_lock);
 }
@@ -201,7 +200,6 @@ static mddev_t * mddev_find(int unit)
                mddev_map[unit] = new;
                list_add(&new->all_mddevs, &all_mddevs);
                spin_unlock(&all_mddevs_lock);
-               MOD_INC_USE_COUNT;
                return new;
        }
        spin_unlock(&all_mddevs_lock);
@@ -3590,6 +3588,7 @@ static __exit void md_exit(void)
                if (!disks[i])
                        continue;
                mddev = disk->private_data;
+               export_array(mddev);
                del_gendisk(disk);
                put_disk(disk);
                mddev_put(mddev);
index d625c9034a922d2e8e476db6a01b08acdd28b5dc..e2103a8bb75a0ecc8ce76cc9054118bc18e9fc34 100644 (file)
@@ -134,7 +134,10 @@ calibrate_xor_block(void)
        return 0;
 }
 
+static __exit void xor_exit(void) { }
+
 EXPORT_SYMBOL(xor_block);
 MODULE_LICENSE("GPL");
 
 module_init(calibrate_xor_block);
+module_exit(xor_exit);