diff options
| author | NeilBrown <neilb@suse.de> | 2008-03-04 17:29:31 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2008-03-04 19:35:18 -0500 |
| commit | d0fae18f1b53a1d39135a968792be034bdf7ff26 (patch) | |
| tree | 3448dab652696848df47dcafb7772220b9e58e4f | |
| parent | a1801f858e57f87a7f79914346921cc729632295 (diff) | |
md: clean up irregularity with raid autodetect
When a raid1 array is stopped, all components currently get added to the list
for auto-detection. However we should really only add components that were
found by autodetection in the first place. So add a flag to record that
information, and use it.
Signed-off-by: Neil Brown <neilb@suse.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
| -rw-r--r-- | drivers/md/md.c | 4 | ||||
| -rw-r--r-- | include/linux/raid/md_k.h | 1 |
2 files changed, 4 insertions, 1 deletions
diff --git a/drivers/md/md.c b/drivers/md/md.c index b375de5c1af2..a71241c5ae72 100644 --- a/drivers/md/md.c +++ b/drivers/md/md.c | |||
| @@ -1503,7 +1503,8 @@ static void export_rdev(mdk_rdev_t * rdev) | |||
| 1503 | free_disk_sb(rdev); | 1503 | free_disk_sb(rdev); |
| 1504 | list_del_init(&rdev->same_set); | 1504 | list_del_init(&rdev->same_set); |
| 1505 | #ifndef MODULE | 1505 | #ifndef MODULE |
| 1506 | md_autodetect_dev(rdev->bdev->bd_dev); | 1506 | if (test_bit(AutoDetected, &rdev->flags)) |
| 1507 | md_autodetect_dev(rdev->bdev->bd_dev); | ||
| 1507 | #endif | 1508 | #endif |
| 1508 | unlock_rdev(rdev); | 1509 | unlock_rdev(rdev); |
| 1509 | kobject_put(&rdev->kobj); | 1510 | kobject_put(&rdev->kobj); |
| @@ -6025,6 +6026,7 @@ static void autostart_arrays(int part) | |||
| 6025 | MD_BUG(); | 6026 | MD_BUG(); |
| 6026 | continue; | 6027 | continue; |
| 6027 | } | 6028 | } |
| 6029 | set_bit(AutoDetected, &rdev->flags); | ||
| 6028 | list_add(&rdev->same_set, &pending_raid_disks); | 6030 | list_add(&rdev->same_set, &pending_raid_disks); |
| 6029 | i_passed++; | 6031 | i_passed++; |
| 6030 | } | 6032 | } |
diff --git a/include/linux/raid/md_k.h b/include/linux/raid/md_k.h index 85a068bab625..7bb6d1abf71e 100644 --- a/include/linux/raid/md_k.h +++ b/include/linux/raid/md_k.h | |||
| @@ -83,6 +83,7 @@ struct mdk_rdev_s | |||
| 83 | #define BarriersNotsupp 5 /* BIO_RW_BARRIER is not supported */ | 83 | #define BarriersNotsupp 5 /* BIO_RW_BARRIER is not supported */ |
| 84 | #define AllReserved 6 /* If whole device is reserved for | 84 | #define AllReserved 6 /* If whole device is reserved for |
| 85 | * one array */ | 85 | * one array */ |
| 86 | #define AutoDetected 7 /* added by auto-detect */ | ||
| 86 | 87 | ||
| 87 | int desc_nr; /* descriptor index in the superblock */ | 88 | int desc_nr; /* descriptor index in the superblock */ |
| 88 | int raid_disk; /* role of device in array */ | 89 | int raid_disk; /* role of device in array */ |
