@@ -876,7 +876,13 @@ void mddev_unlock(struct mddev *mddev)
876
876
sysfs_remove_group (& mddev -> kobj , & md_redundancy_group );
877
877
if (mddev -> sysfs_action )
878
878
sysfs_put (mddev -> sysfs_action );
879
+ if (mddev -> sysfs_completed )
880
+ sysfs_put (mddev -> sysfs_completed );
881
+ if (mddev -> sysfs_degraded )
882
+ sysfs_put (mddev -> sysfs_degraded );
879
883
mddev -> sysfs_action = NULL ;
884
+ mddev -> sysfs_completed = NULL ;
885
+ mddev -> sysfs_degraded = NULL ;
880
886
}
881
887
}
882
888
mddev -> sysfs_active = 0 ;
@@ -4094,6 +4100,8 @@ level_store(struct mddev *mddev, const char *buf, size_t len)
4094
4100
pr_warn ("md: cannot register extra attributes for %s\n" ,
4095
4101
mdname (mddev ));
4096
4102
mddev -> sysfs_action = sysfs_get_dirent (mddev -> kobj .sd , "sync_action" );
4103
+ mddev -> sysfs_completed = sysfs_get_dirent_safe (mddev -> kobj .sd , "sync_completed" );
4104
+ mddev -> sysfs_degraded = sysfs_get_dirent_safe (mddev -> kobj .sd , "degraded" );
4097
4105
}
4098
4106
if (oldpers -> sync_request != NULL &&
4099
4107
pers -> sync_request == NULL ) {
@@ -5609,14 +5617,9 @@ static void md_free(struct kobject *ko)
5609
5617
5610
5618
if (mddev -> sysfs_state )
5611
5619
sysfs_put (mddev -> sysfs_state );
5612
- if (mddev -> sysfs_completed )
5613
- sysfs_put (mddev -> sysfs_completed );
5614
- if (mddev -> sysfs_degraded )
5615
- sysfs_put (mddev -> sysfs_degraded );
5616
5620
if (mddev -> sysfs_level )
5617
5621
sysfs_put (mddev -> sysfs_level );
5618
5622
5619
-
5620
5623
if (mddev -> gendisk )
5621
5624
del_gendisk (mddev -> gendisk );
5622
5625
if (mddev -> queue )
@@ -5783,8 +5786,6 @@ static int md_alloc(dev_t dev, char *name)
5783
5786
if (!error && mddev -> kobj .sd ) {
5784
5787
kobject_uevent (& mddev -> kobj , KOBJ_ADD );
5785
5788
mddev -> sysfs_state = sysfs_get_dirent_safe (mddev -> kobj .sd , "array_state" );
5786
- mddev -> sysfs_completed = sysfs_get_dirent_safe (mddev -> kobj .sd , "sync_completed" );
5787
- mddev -> sysfs_degraded = sysfs_get_dirent_safe (mddev -> kobj .sd , "degraded" );
5788
5789
mddev -> sysfs_level = sysfs_get_dirent_safe (mddev -> kobj .sd , "level" );
5789
5790
}
5790
5791
mddev_put (mddev );
@@ -6064,6 +6065,8 @@ int md_run(struct mddev *mddev)
6064
6065
pr_warn ("md: cannot register extra attributes for %s\n" ,
6065
6066
mdname (mddev ));
6066
6067
mddev -> sysfs_action = sysfs_get_dirent_safe (mddev -> kobj .sd , "sync_action" );
6068
+ mddev -> sysfs_completed = sysfs_get_dirent_safe (mddev -> kobj .sd , "sync_completed" );
6069
+ mddev -> sysfs_degraded = sysfs_get_dirent_safe (mddev -> kobj .sd , "degraded" );
6067
6070
} else if (mddev -> ro == 2 ) /* auto-readonly not meaningful */
6068
6071
mddev -> ro = 0 ;
6069
6072
0 commit comments