|
@@ -386,7 +386,9 @@ static void mddev_put(mddev_t *mddev)
|
|
|
if (!atomic_dec_and_lock(&mddev->active, &all_mddevs_lock))
|
|
|
return;
|
|
|
if (!mddev->raid_disks && list_empty(&mddev->disks) &&
|
|
|
- !mddev->hold_active) {
|
|
|
+ mddev->ctime == 0 && !mddev->hold_active) {
|
|
|
+ /* Array is not configured at all, and not held active,
|
|
|
+ * so destroy it */
|
|
|
list_del(&mddev->all_mddevs);
|
|
|
if (mddev->gendisk) {
|
|
|
/* we did a probe so need to clean up.
|
|
@@ -5262,6 +5264,10 @@ static int set_array_info(mddev_t * mddev, mdu_array_info_t *info)
|
|
|
mddev->minor_version = info->minor_version;
|
|
|
mddev->patch_version = info->patch_version;
|
|
|
mddev->persistent = !info->not_persistent;
|
|
|
+ /* ensure mddev_put doesn't delete this now that there
|
|
|
+ * is some minimal configuration.
|
|
|
+ */
|
|
|
+ mddev->ctime = get_seconds();
|
|
|
return 0;
|
|
|
}
|
|
|
mddev->major_version = MD_MAJOR_VERSION;
|