@@ -856,7 +856,13 @@ void mddev_unlock(struct mddev *mddev)
856
856
sysfs_remove_group (& mddev -> kobj , & md_redundancy_group );
857
857
if (mddev -> sysfs_action )
858
858
sysfs_put (mddev -> sysfs_action );
859
+ if (mddev -> sysfs_completed )
860
+ sysfs_put (mddev -> sysfs_completed );
861
+ if (mddev -> sysfs_degraded )
862
+ sysfs_put (mddev -> sysfs_degraded );
859
863
mddev -> sysfs_action = NULL ;
864
+ mddev -> sysfs_completed = NULL ;
865
+ mddev -> sysfs_degraded = NULL ;
860
866
}
861
867
}
862
868
mddev -> sysfs_active = 0 ;
@@ -4074,6 +4080,8 @@ level_store(struct mddev *mddev, const char *buf, size_t len)
4074
4080
pr_warn ("md: cannot register extra attributes for %s\n" ,
4075
4081
mdname (mddev ));
4076
4082
mddev -> sysfs_action = sysfs_get_dirent (mddev -> kobj .sd , "sync_action" );
4083
+ mddev -> sysfs_completed = sysfs_get_dirent_safe (mddev -> kobj .sd , "sync_completed" );
4084
+ mddev -> sysfs_degraded = sysfs_get_dirent_safe (mddev -> kobj .sd , "degraded" );
4077
4085
}
4078
4086
if (oldpers -> sync_request != NULL &&
4079
4087
pers -> sync_request == NULL ) {
@@ -5589,14 +5597,9 @@ static void md_free(struct kobject *ko)
5589
5597
5590
5598
if (mddev -> sysfs_state )
5591
5599
sysfs_put (mddev -> sysfs_state );
5592
- if (mddev -> sysfs_completed )
5593
- sysfs_put (mddev -> sysfs_completed );
5594
- if (mddev -> sysfs_degraded )
5595
- sysfs_put (mddev -> sysfs_degraded );
5596
5600
if (mddev -> sysfs_level )
5597
5601
sysfs_put (mddev -> sysfs_level );
5598
5602
5599
-
5600
5603
if (mddev -> gendisk )
5601
5604
del_gendisk (mddev -> gendisk );
5602
5605
if (mddev -> queue )
@@ -5764,8 +5767,6 @@ static int md_alloc(dev_t dev, char *name)
5764
5767
if (!error && mddev -> kobj .sd ) {
5765
5768
kobject_uevent (& mddev -> kobj , KOBJ_ADD );
5766
5769
mddev -> sysfs_state = sysfs_get_dirent_safe (mddev -> kobj .sd , "array_state" );
5767
- mddev -> sysfs_completed = sysfs_get_dirent_safe (mddev -> kobj .sd , "sync_completed" );
5768
- mddev -> sysfs_degraded = sysfs_get_dirent_safe (mddev -> kobj .sd , "degraded" );
5769
5770
mddev -> sysfs_level = sysfs_get_dirent_safe (mddev -> kobj .sd , "level" );
5770
5771
}
5771
5772
mddev_put (mddev );
@@ -6043,6 +6044,8 @@ int md_run(struct mddev *mddev)
6043
6044
pr_warn ("md: cannot register extra attributes for %s\n" ,
6044
6045
mdname (mddev ));
6045
6046
mddev -> sysfs_action = sysfs_get_dirent_safe (mddev -> kobj .sd , "sync_action" );
6047
+ mddev -> sysfs_completed = sysfs_get_dirent_safe (mddev -> kobj .sd , "sync_completed" );
6048
+ mddev -> sysfs_degraded = sysfs_get_dirent_safe (mddev -> kobj .sd , "degraded" );
6046
6049
} else if (mddev -> ro == 2 ) /* auto-readonly not meaningful */
6047
6050
mddev -> ro = 0 ;
6048
6051
0 commit comments