diff options
author | NeilBrown <neilb@suse.de> | 2006-02-02 17:28:05 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-02-02 18:07:12 -0500 |
commit | 978f946bb628ef228e13aadf4d4255b8727c4fc3 (patch) | |
tree | f50dbda1faae2962fdd8c6517d4bc65d3c168862 /drivers/md/md.c | |
parent | f0ca340cd20b350eab8288974e9a6077900846e8 (diff) |
[PATCH] md: Don't remove bitmap from md array when switching to read-only
While a read-only array doesn't not really need a bitmap, we should
not remove the bitmap when switching an array to read-only because
a/ There is no code to re-add the bitmap which switching to read-write,
b/ There is insufficient locking - the bitmap could be accessed while it is
being removed.
Cc: Reuben Farrelly <reuben-lkml@reub.net>
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/md/md.c')
-rw-r--r-- | drivers/md/md.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index 06dee51456e8..653d4dcbee23 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
@@ -2689,14 +2689,6 @@ static int do_md_stop(mddev_t * mddev, int ro) | |||
2689 | set_disk_ro(disk, 1); | 2689 | set_disk_ro(disk, 1); |
2690 | } | 2690 | } |
2691 | 2691 | ||
2692 | bitmap_destroy(mddev); | ||
2693 | if (mddev->bitmap_file) { | ||
2694 | atomic_set(&mddev->bitmap_file->f_dentry->d_inode->i_writecount, 1); | ||
2695 | fput(mddev->bitmap_file); | ||
2696 | mddev->bitmap_file = NULL; | ||
2697 | } | ||
2698 | mddev->bitmap_offset = 0; | ||
2699 | |||
2700 | /* | 2692 | /* |
2701 | * Free resources if final stop | 2693 | * Free resources if final stop |
2702 | */ | 2694 | */ |
@@ -2706,6 +2698,14 @@ static int do_md_stop(mddev_t * mddev, int ro) | |||
2706 | struct gendisk *disk; | 2698 | struct gendisk *disk; |
2707 | printk(KERN_INFO "md: %s stopped.\n", mdname(mddev)); | 2699 | printk(KERN_INFO "md: %s stopped.\n", mdname(mddev)); |
2708 | 2700 | ||
2701 | bitmap_destroy(mddev); | ||
2702 | if (mddev->bitmap_file) { | ||
2703 | atomic_set(&mddev->bitmap_file->f_dentry->d_inode->i_writecount, 1); | ||
2704 | fput(mddev->bitmap_file); | ||
2705 | mddev->bitmap_file = NULL; | ||
2706 | } | ||
2707 | mddev->bitmap_offset = 0; | ||
2708 | |||
2709 | ITERATE_RDEV(mddev,rdev,tmp) | 2709 | ITERATE_RDEV(mddev,rdev,tmp) |
2710 | if (rdev->raid_disk >= 0) { | 2710 | if (rdev->raid_disk >= 0) { |
2711 | char nm[20]; | 2711 | char nm[20]; |