]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - fs/sysfs/dir.c
sysfs: Make sysfs_rename safe with sysfs_dirents in rbtrees.
[karo-tx-linux.git] / fs / sysfs / dir.c
index 48ffbdf0d0178e65e333841d8e5f7fcd11a868ac..7fdf6a7b743663fe44a78ea12f9c9ec30eecfe5b 100644 (file)
@@ -865,15 +865,13 @@ int sysfs_rename(struct sysfs_dirent *sd,
                sd->s_name = new_name;
        }
 
-       /* Remove from old parent's list and insert into new parent's list. */
-       if (sd->s_parent != new_parent_sd) {
-               sysfs_unlink_sibling(sd);
-               sysfs_get(new_parent_sd);
-               sysfs_put(sd->s_parent);
-               sd->s_parent = new_parent_sd;
-               sysfs_link_sibling(sd);
-       }
+       /* Move to the appropriate place in the appropriate directories rbtree. */
+       sysfs_unlink_sibling(sd);
+       sysfs_get(new_parent_sd);
+       sysfs_put(sd->s_parent);
        sd->s_ns = new_ns;
+       sd->s_parent = new_parent_sd;
+       sysfs_link_sibling(sd);
 
        error = 0;
  out: