|
@@ -1807,10 +1807,19 @@ md_mismatches = __ATTR_RO(mismatch_cnt);
|
|
|
static struct attribute *md_default_attrs[] = {
|
|
|
&md_level.attr,
|
|
|
&md_raid_disks.attr,
|
|
|
+ NULL,
|
|
|
+};
|
|
|
+
|
|
|
+static struct attribute *md_redundancy_attrs[] = {
|
|
|
&md_scan_mode.attr,
|
|
|
&md_mismatches.attr,
|
|
|
NULL,
|
|
|
};
|
|
|
+static struct attribute_group md_redundancy_group = {
|
|
|
+ .name = NULL,
|
|
|
+ .attrs = md_redundancy_attrs,
|
|
|
+};
|
|
|
+
|
|
|
|
|
|
static ssize_t
|
|
|
md_attr_show(struct kobject *kobj, struct attribute *attr, char *page)
|
|
@@ -2047,6 +2056,8 @@ static int do_md_run(mddev_t * mddev)
|
|
|
bitmap_destroy(mddev);
|
|
|
return err;
|
|
|
}
|
|
|
+ if (mddev->pers->sync_request)
|
|
|
+ sysfs_create_group(&mddev->kobj, &md_redundancy_group);
|
|
|
atomic_set(&mddev->writes_pending,0);
|
|
|
mddev->safemode = 0;
|
|
|
mddev->safemode_timer.function = md_safemode_timeout;
|
|
@@ -2155,6 +2166,9 @@ static int do_md_stop(mddev_t * mddev, int ro)
|
|
|
set_disk_ro(disk, 0);
|
|
|
blk_queue_make_request(mddev->queue, md_fail_request);
|
|
|
mddev->pers->stop(mddev);
|
|
|
+ if (mddev->pers->sync_request)
|
|
|
+ sysfs_remove_group(&mddev->kobj, &md_redundancy_group);
|
|
|
+
|
|
|
module_put(mddev->pers->owner);
|
|
|
mddev->pers = NULL;
|
|
|
if (mddev->ro)
|