summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/sysfs/group.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/fs/sysfs/group.c b/fs/sysfs/group.c
index 1898a10e38ce..3796afdff40c 100644
--- a/fs/sysfs/group.c
+++ b/fs/sysfs/group.c
@@ -206,6 +206,15 @@ void sysfs_remove_group(struct kobject *kobj,
struct sysfs_dirent *dir_sd = kobj->sd;
struct sysfs_dirent *sd;
+ /*
+ * Sysfs directories are now removed recursively by
+ * sysfs_remove_dir(). This means that the function can be called
+ * for a group whose sysfs entry is already removed. In that case
+ * all its groups are guaranteed to be already removed.
+ */
+ if (dir_sd->s_flags & SYSFS_FLAG_REMOVED)
+ return;
+
if (grp->name) {
sd = sysfs_get_dirent(dir_sd, grp->name);
if (!sd) {