diff options
| -rw-r--r-- | fs/sysfs/symlink.c | 20 | ||||
| -rw-r--r-- | include/linux/sysfs.h | 8 |
2 files changed, 28 insertions, 0 deletions
diff --git a/fs/sysfs/symlink.c b/fs/sysfs/symlink.c index b6ebdaa00f37..f71246bebfe4 100644 --- a/fs/sysfs/symlink.c +++ b/fs/sysfs/symlink.c | |||
| @@ -109,6 +109,26 @@ int sysfs_create_link_nowarn(struct kobject *kobj, struct kobject *target, | |||
| 109 | } | 109 | } |
| 110 | 110 | ||
| 111 | /** | 111 | /** |
| 112 | * sysfs_delete_link - remove symlink in object's directory. | ||
| 113 | * @kobj: object we're acting for. | ||
| 114 | * @targ: object we're pointing to. | ||
| 115 | * @name: name of the symlink to remove. | ||
| 116 | * | ||
| 117 | * Unlike sysfs_remove_link sysfs_delete_link has enough information | ||
| 118 | * to successfully delete symlinks in tagged directories. | ||
| 119 | */ | ||
| 120 | void sysfs_delete_link(struct kobject *kobj, struct kobject *targ, | ||
| 121 | const char *name) | ||
| 122 | { | ||
| 123 | const void *ns = NULL; | ||
| 124 | spin_lock(&sysfs_assoc_lock); | ||
| 125 | if (targ->sd) | ||
| 126 | ns = targ->sd->s_ns; | ||
| 127 | spin_unlock(&sysfs_assoc_lock); | ||
| 128 | sysfs_hash_and_remove(kobj->sd, ns, name); | ||
| 129 | } | ||
| 130 | |||
| 131 | /** | ||
| 112 | * sysfs_remove_link - remove symlink in object's directory. | 132 | * sysfs_remove_link - remove symlink in object's directory. |
| 113 | * @kobj: object we're acting for. | 133 | * @kobj: object we're acting for. |
| 114 | * @name: name of the symlink to remove. | 134 | * @name: name of the symlink to remove. |
diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h index 1885d21b0c80..976c4664b216 100644 --- a/include/linux/sysfs.h +++ b/include/linux/sysfs.h | |||
| @@ -155,6 +155,9 @@ void sysfs_remove_link(struct kobject *kobj, const char *name); | |||
| 155 | int sysfs_rename_link(struct kobject *kobj, struct kobject *target, | 155 | int sysfs_rename_link(struct kobject *kobj, struct kobject *target, |
| 156 | const char *old_name, const char *new_name); | 156 | const char *old_name, const char *new_name); |
| 157 | 157 | ||
| 158 | void sysfs_delete_link(struct kobject *dir, struct kobject *targ, | ||
| 159 | const char *name); | ||
| 160 | |||
| 158 | int __must_check sysfs_create_group(struct kobject *kobj, | 161 | int __must_check sysfs_create_group(struct kobject *kobj, |
| 159 | const struct attribute_group *grp); | 162 | const struct attribute_group *grp); |
| 160 | int sysfs_update_group(struct kobject *kobj, | 163 | int sysfs_update_group(struct kobject *kobj, |
| @@ -269,6 +272,11 @@ static inline int sysfs_rename_link(struct kobject *k, struct kobject *t, | |||
| 269 | return 0; | 272 | return 0; |
| 270 | } | 273 | } |
| 271 | 274 | ||
| 275 | static inline void sysfs_delete_link(struct kobject *k, struct kobject *t, | ||
| 276 | const char *name) | ||
| 277 | { | ||
| 278 | } | ||
| 279 | |||
| 272 | static inline int sysfs_create_group(struct kobject *kobj, | 280 | static inline int sysfs_create_group(struct kobject *kobj, |
| 273 | const struct attribute_group *grp) | 281 | const struct attribute_group *grp) |
| 274 | { | 282 | { |
