Commit 807d1d29 authored by Bart Van Assche's avatar Bart Van Assche Committed by Greg Kroah-Hartman
Browse files

scsi: sysfs: Introduce sysfs_{un,}break_active_protection()

commit 2afc9166


Introduce these two functions and export them such that the next patch
can add calls to these functions from the SCSI core.
Signed-off-by: default avatarBart Van Assche <>
Acked-by: default avatarTejun Heo <>
Acked-by: default avatarGreg Kroah-Hartman <>
Cc: <>
Signed-off-by: default avatarMartin K. Petersen <>
Signed-off-by: default avatarGreg Kroah-Hartman <>
parent 373a1411
......@@ -405,6 +405,50 @@ int sysfs_chmod_file(struct kobject *kobj, const struct attribute *attr,
* sysfs_break_active_protection - break "active" protection
* @kobj: The kernel object @attr is associated with.
* @attr: The attribute to break the "active" protection for.
* With sysfs, just like kernfs, deletion of an attribute is postponed until
* all active .show() and .store() callbacks have finished unless this function
* is called. Hence this function is useful in methods that implement self
* deletion.
struct kernfs_node *sysfs_break_active_protection(struct kobject *kobj,
const struct attribute *attr)
struct kernfs_node *kn;
kn = kernfs_find_and_get(kobj->sd, attr->name);
if (kn)
return kn;
* sysfs_unbreak_active_protection - restore "active" protection
* @kn: Pointer returned by sysfs_break_active_protection().
* Undo the effects of sysfs_break_active_protection(). Since this function
* calls kernfs_put() on the kernfs node that corresponds to the 'attr'
* argument passed to sysfs_break_active_protection() that attribute may have
* been removed between the sysfs_break_active_protection() and
* sysfs_unbreak_active_protection() calls, it is not safe to access @kn after
* this function has returned.
void sysfs_unbreak_active_protection(struct kernfs_node *kn)
struct kobject *kobj = kn->parent->priv;
* sysfs_remove_file_ns - remove an object attribute with a custom ns tag
* @kobj: object we're acting for
......@@ -237,6 +237,9 @@ int __must_check sysfs_create_files(struct kobject *kobj,
const struct attribute **attr);
int __must_check sysfs_chmod_file(struct kobject *kobj,
const struct attribute *attr, umode_t mode);
struct kernfs_node *sysfs_break_active_protection(struct kobject *kobj,
const struct attribute *attr);
void sysfs_unbreak_active_protection(struct kernfs_node *kn);
void sysfs_remove_file_ns(struct kobject *kobj, const struct attribute *attr,
const void *ns);
bool sysfs_remove_file_self(struct kobject *kobj, const struct attribute *attr);
......@@ -350,6 +353,17 @@ static inline int sysfs_chmod_file(struct kobject *kobj,
return 0;
static inline struct kernfs_node *
sysfs_break_active_protection(struct kobject *kobj,
const struct attribute *attr)
return NULL;
static inline void sysfs_unbreak_active_protection(struct kernfs_node *kn)
static inline void sysfs_remove_file_ns(struct kobject *kobj,
const struct attribute *attr,
const void *ns)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment