@@ -856,7 +856,13 @@ void mddev_unlock(struct mddev *mddev)
856856 sysfs_remove_group (& mddev -> kobj , & md_redundancy_group );
857857 if (mddev -> sysfs_action )
858858 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 );
859863 mddev -> sysfs_action = NULL ;
864+ mddev -> sysfs_completed = NULL ;
865+ mddev -> sysfs_degraded = NULL ;
860866 }
861867 }
862868 mddev -> sysfs_active = 0 ;
@@ -4074,6 +4080,8 @@ level_store(struct mddev *mddev, const char *buf, size_t len)
40744080 pr_warn ("md: cannot register extra attributes for %s\n" ,
40754081 mdname (mddev ));
40764082 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" );
40774085 }
40784086 if (oldpers -> sync_request != NULL &&
40794087 pers -> sync_request == NULL ) {
@@ -5589,14 +5597,9 @@ static void md_free(struct kobject *ko)
55895597
55905598 if (mddev -> sysfs_state )
55915599 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 );
55965600 if (mddev -> sysfs_level )
55975601 sysfs_put (mddev -> sysfs_level );
55985602
5599-
56005603 if (mddev -> gendisk )
56015604 del_gendisk (mddev -> gendisk );
56025605 if (mddev -> queue )
@@ -5764,8 +5767,6 @@ static int md_alloc(dev_t dev, char *name)
57645767 if (!error && mddev -> kobj .sd ) {
57655768 kobject_uevent (& mddev -> kobj , KOBJ_ADD );
57665769 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" );
57695770 mddev -> sysfs_level = sysfs_get_dirent_safe (mddev -> kobj .sd , "level" );
57705771 }
57715772 mddev_put (mddev );
@@ -6043,6 +6044,8 @@ int md_run(struct mddev *mddev)
60436044 pr_warn ("md: cannot register extra attributes for %s\n" ,
60446045 mdname (mddev ));
60456046 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" );
60466049 } else if (mddev -> ro == 2 ) /* auto-readonly not meaningful */
60476050 mddev -> ro = 0 ;
60486051
0 commit comments