aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2013-11-23 17:21:51 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-11-27 16:57:57 -0500
commit890ece160c6465b49c42975d529c3481d89da8f5 (patch)
tree77cc4d36a9d32d0055a752cae5e3a95806dc87d7
parent5d0e26bb59a680a5d97db5b6629941603e8de229 (diff)
sysfs, kernfs: introduce kernfs_rename[_ns]()
Introduce kernfs rename interface, krenfs_rename[_ns](). This is just rename of sysfs_rename(). No functional changes. Function comment is added to kernfs_rename_ns() and @new_parent_sd is renamed to @new_parent for consistency with other kernfs interfaces. v2: Dummy implementation for !CONFIG_SYSFS updated to return -ENOSYS. Signed-off-by: Tejun Heo <tj@kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--fs/sysfs/dir.c23
-rw-r--r--fs/sysfs/symlink.c2
-rw-r--r--fs/sysfs/sysfs.h3
-rw-r--r--include/linux/kernfs.h7
4 files changed, 23 insertions, 12 deletions
diff --git a/fs/sysfs/dir.c b/fs/sysfs/dir.c
index edbde4e6e5e0..5ba896630d04 100644
--- a/fs/sysfs/dir.c
+++ b/fs/sysfs/dir.c
@@ -932,20 +932,27 @@ void sysfs_remove_dir(struct kobject *kobj)
932 } 932 }
933} 933}
934 934
935int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd, 935/**
936 const char *new_name, const void *new_ns) 936 * kernfs_rename_ns - move and rename a kernfs_node
937 * @sd: target node
938 * @new_parent: new parent to put @sd under
939 * @new_name: new name
940 * @new_ns: new namespace tag
941 */
942int kernfs_rename_ns(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent,
943 const char *new_name, const void *new_ns)
937{ 944{
938 int error; 945 int error;
939 946
940 mutex_lock(&sysfs_mutex); 947 mutex_lock(&sysfs_mutex);
941 948
942 error = 0; 949 error = 0;
943 if ((sd->s_parent == new_parent_sd) && (sd->s_ns == new_ns) && 950 if ((sd->s_parent == new_parent) && (sd->s_ns == new_ns) &&
944 (strcmp(sd->s_name, new_name) == 0)) 951 (strcmp(sd->s_name, new_name) == 0))
945 goto out; /* nothing to rename */ 952 goto out; /* nothing to rename */
946 953
947 error = -EEXIST; 954 error = -EEXIST;
948 if (sysfs_find_dirent(new_parent_sd, new_name, new_ns)) 955 if (sysfs_find_dirent(new_parent, new_name, new_ns))
949 goto out; 956 goto out;
950 957
951 /* rename sysfs_dirent */ 958 /* rename sysfs_dirent */
@@ -963,11 +970,11 @@ int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd,
963 * Move to the appropriate place in the appropriate directories rbtree. 970 * Move to the appropriate place in the appropriate directories rbtree.
964 */ 971 */
965 sysfs_unlink_sibling(sd); 972 sysfs_unlink_sibling(sd);
966 sysfs_get(new_parent_sd); 973 sysfs_get(new_parent);
967 sysfs_put(sd->s_parent); 974 sysfs_put(sd->s_parent);
968 sd->s_ns = new_ns; 975 sd->s_ns = new_ns;
969 sd->s_hash = sysfs_name_hash(sd->s_name, sd->s_ns); 976 sd->s_hash = sysfs_name_hash(sd->s_name, sd->s_ns);
970 sd->s_parent = new_parent_sd; 977 sd->s_parent = new_parent;
971 sysfs_link_sibling(sd); 978 sysfs_link_sibling(sd);
972 979
973 error = 0; 980 error = 0;
@@ -981,7 +988,7 @@ int sysfs_rename_dir_ns(struct kobject *kobj, const char *new_name,
981{ 988{
982 struct sysfs_dirent *parent_sd = kobj->sd->s_parent; 989 struct sysfs_dirent *parent_sd = kobj->sd->s_parent;
983 990
984 return sysfs_rename(kobj->sd, parent_sd, new_name, new_ns); 991 return kernfs_rename_ns(kobj->sd, parent_sd, new_name, new_ns);
985} 992}
986 993
987int sysfs_move_dir_ns(struct kobject *kobj, struct kobject *new_parent_kobj, 994int sysfs_move_dir_ns(struct kobject *kobj, struct kobject *new_parent_kobj,
@@ -994,7 +1001,7 @@ int sysfs_move_dir_ns(struct kobject *kobj, struct kobject *new_parent_kobj,
994 new_parent_sd = new_parent_kobj && new_parent_kobj->sd ? 1001 new_parent_sd = new_parent_kobj && new_parent_kobj->sd ?
995 new_parent_kobj->sd : &sysfs_root; 1002 new_parent_kobj->sd : &sysfs_root;
996 1003
997 return sysfs_rename(sd, new_parent_sd, sd->s_name, new_ns); 1004 return kernfs_rename_ns(sd, new_parent_sd, sd->s_name, new_ns);
998} 1005}
999 1006
1000/** 1007/**
diff --git a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c
index 41138e91947a..0922c53bd757 100644
--- a/fs/sysfs/symlink.c
+++ b/fs/sysfs/symlink.c
@@ -226,7 +226,7 @@ int sysfs_rename_link_ns(struct kobject *kobj, struct kobject *targ,
226 if (sd->s_symlink.target_sd->s_dir.kobj != targ) 226 if (sd->s_symlink.target_sd->s_dir.kobj != targ)
227 goto out; 227 goto out;
228 228
229 result = sysfs_rename(sd, parent_sd, new, new_ns); 229 result = kernfs_rename_ns(sd, parent_sd, new, new_ns);
230 230
231out: 231out:
232 sysfs_put(sd); 232 sysfs_put(sd);
diff --git a/fs/sysfs/sysfs.h b/fs/sysfs/sysfs.h
index 97625b15ca03..8b3fc210b90d 100644
--- a/fs/sysfs/sysfs.h
+++ b/fs/sysfs/sysfs.h
@@ -185,9 +185,6 @@ void release_sysfs_dirent(struct sysfs_dirent *sd);
185int sysfs_create_subdir(struct kobject *kobj, const char *name, 185int sysfs_create_subdir(struct kobject *kobj, const char *name,
186 struct sysfs_dirent **p_sd); 186 struct sysfs_dirent **p_sd);
187 187
188int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd,
189 const char *new_name, const void *new_ns);
190
191static inline struct sysfs_dirent *__sysfs_get(struct sysfs_dirent *sd) 188static inline struct sysfs_dirent *__sysfs_get(struct sysfs_dirent *sd)
192{ 189{
193 if (sd) { 190 if (sd) {
diff --git a/include/linux/kernfs.h b/include/linux/kernfs.h
index fe6290d41776..803d9600cf72 100644
--- a/include/linux/kernfs.h
+++ b/include/linux/kernfs.h
@@ -20,6 +20,8 @@ struct sysfs_dirent *kernfs_create_link(struct sysfs_dirent *parent,
20void kernfs_remove(struct sysfs_dirent *sd); 20void kernfs_remove(struct sysfs_dirent *sd);
21int kernfs_remove_by_name_ns(struct sysfs_dirent *parent, const char *name, 21int kernfs_remove_by_name_ns(struct sysfs_dirent *parent, const char *name,
22 const void *ns); 22 const void *ns);
23int kernfs_rename_ns(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent,
24 const char *new_name, const void *new_ns);
23 25
24#else /* CONFIG_SYSFS */ 26#else /* CONFIG_SYSFS */
25 27
@@ -34,6 +36,11 @@ static inline int kernfs_remove_by_name_ns(struct sysfs_dirent *parent,
34 const char *name, const void *ns) 36 const char *name, const void *ns)
35{ return -ENOSYS; } 37{ return -ENOSYS; }
36 38
39static inline int kernfs_rename_ns(struct sysfs_dirent *sd,
40 struct sysfs_dirent *new_parent,
41 const char *new_name, const void *new_ns)
42{ return -ENOSYS; }
43
37#endif /* CONFIG_SYSFS */ 44#endif /* CONFIG_SYSFS */
38 45
39static inline int kernfs_remove_by_name(struct sysfs_dirent *parent, 46static inline int kernfs_remove_by_name(struct sysfs_dirent *parent,