]> Pileus Git - ~andy/linux/blobdiff - fs/sysfs/file.c
kernfs, sysfs, driver-core: implement kernfs_remove_self() and its wrappers
[~andy/linux] / fs / sysfs / file.c
index 810cf6e613e5142de7be542da24c34073fffc376..1b8b91b67fdb7a4b192b9568ad1d85defdcd863a 100644 (file)
@@ -372,6 +372,29 @@ void sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr,
 }
 EXPORT_SYMBOL_GPL(sysfs_remove_file_ns);
 
+/**
+ * sysfs_remove_file_self - remove an object attribute from its own method
+ * @kobj: object we're acting for
+ * @attr: attribute descriptor
+ *
+ * See kernfs_remove_self() for details.
+ */
+bool sysfs_remove_file_self(struct kobject *kobj, const struct attribute *attr)
+{
+       struct kernfs_node *parent = kobj->sd;
+       struct kernfs_node *kn;
+       bool ret;
+
+       kn = kernfs_find_and_get(parent, attr->name);
+       if (WARN_ON_ONCE(!kn))
+               return false;
+
+       ret = kernfs_remove_self(kn);
+
+       kernfs_put(kn);
+       return ret;
+}
+
 void sysfs_remove_files(struct kobject *kobj, const struct attribute **ptr)
 {
        int i;