diff options
Diffstat (limited to 'fs/sysfs/file.c')
| -rw-r--r-- | fs/sysfs/file.c | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/fs/sysfs/file.c b/fs/sysfs/file.c index 810cf6e613e5..1b8b91b67fdb 100644 --- a/fs/sysfs/file.c +++ b/fs/sysfs/file.c | |||
| @@ -372,6 +372,29 @@ void sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr, | |||
| 372 | } | 372 | } |
| 373 | EXPORT_SYMBOL_GPL(sysfs_remove_file_ns); | 373 | EXPORT_SYMBOL_GPL(sysfs_remove_file_ns); |
| 374 | 374 | ||
| 375 | /** | ||
| 376 | * sysfs_remove_file_self - remove an object attribute from its own method | ||
| 377 | * @kobj: object we're acting for | ||
| 378 | * @attr: attribute descriptor | ||
| 379 | * | ||
| 380 | * See kernfs_remove_self() for details. | ||
| 381 | */ | ||
| 382 | bool sysfs_remove_file_self(struct kobject *kobj, const struct attribute *attr) | ||
| 383 | { | ||
| 384 | struct kernfs_node *parent = kobj->sd; | ||
| 385 | struct kernfs_node *kn; | ||
| 386 | bool ret; | ||
| 387 | |||
| 388 | kn = kernfs_find_and_get(parent, attr->name); | ||
| 389 | if (WARN_ON_ONCE(!kn)) | ||
| 390 | return false; | ||
| 391 | |||
| 392 | ret = kernfs_remove_self(kn); | ||
| 393 | |||
| 394 | kernfs_put(kn); | ||
| 395 | return ret; | ||
| 396 | } | ||
| 397 | |||
| 375 | void sysfs_remove_files(struct kobject *kobj, const struct attribute **ptr) | 398 | void sysfs_remove_files(struct kobject *kobj, const struct attribute **ptr) |
| 376 | { | 399 | { |
| 377 | int i; | 400 | int i; |
