diff options
author | Tejun Heo <tj@kernel.org> | 2013-11-23 17:21:51 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-11-27 16:57:57 -0500 |
commit | 890ece160c6465b49c42975d529c3481d89da8f5 (patch) | |
tree | 77cc4d36a9d32d0055a752cae5e3a95806dc87d7 /fs/sysfs | |
parent | 5d0e26bb59a680a5d97db5b6629941603e8de229 (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>
Diffstat (limited to 'fs/sysfs')
-rw-r--r-- | fs/sysfs/dir.c | 23 | ||||
-rw-r--r-- | fs/sysfs/symlink.c | 2 | ||||
-rw-r--r-- | fs/sysfs/sysfs.h | 3 |
3 files changed, 16 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 | ||
935 | int 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 | */ | ||
942 | int 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 | ||
987 | int sysfs_move_dir_ns(struct kobject *kobj, struct kobject *new_parent_kobj, | 994 | int 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 | ||
231 | out: | 231 | out: |
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); | |||
185 | int sysfs_create_subdir(struct kobject *kobj, const char *name, | 185 | int sysfs_create_subdir(struct kobject *kobj, const char *name, |
186 | struct sysfs_dirent **p_sd); | 186 | struct sysfs_dirent **p_sd); |
187 | 187 | ||
188 | int sysfs_rename(struct sysfs_dirent *sd, struct sysfs_dirent *new_parent_sd, | ||
189 | const char *new_name, const void *new_ns); | ||
190 | |||
191 | static inline struct sysfs_dirent *__sysfs_get(struct sysfs_dirent *sd) | 188 | static inline struct sysfs_dirent *__sysfs_get(struct sysfs_dirent *sd) |
192 | { | 189 | { |
193 | if (sd) { | 190 | if (sd) { |