sysfs: Add support for permanently empty directories to serve as mount points.
Add two functions sysfs_create_mount_point and sysfs_remove_mount_point that hang a permanently empty directory off of a kobject or remove a permanently emptpy directory hanging from a kobject. Export these new functions so modular filesystems can use them. Cc: stable@vger.kernel.org Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Signed-off-by: "Eric W. Biederman" <ebiederm@xmission.com>
This commit is contained in:
parent
ea015218f2
commit
87d2846fcf
|
@ -121,3 +121,37 @@ int sysfs_move_dir_ns(struct kobject *kobj, struct kobject *new_parent_kobj,
|
|||
|
||||
return kernfs_rename_ns(kn, new_parent, kn->name, new_ns);
|
||||
}
|
||||
|
||||
/**
|
||||
* sysfs_create_mount_point - create an always empty directory
|
||||
* @parent_kobj: kobject that will contain this always empty directory
|
||||
* @name: The name of the always empty directory to add
|
||||
*/
|
||||
int sysfs_create_mount_point(struct kobject *parent_kobj, const char *name)
|
||||
{
|
||||
struct kernfs_node *kn, *parent = parent_kobj->sd;
|
||||
|
||||
kn = kernfs_create_empty_dir(parent, name);
|
||||
if (IS_ERR(kn)) {
|
||||
if (PTR_ERR(kn) == -EEXIST)
|
||||
sysfs_warn_dup(parent, name);
|
||||
return PTR_ERR(kn);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sysfs_create_mount_point);
|
||||
|
||||
/**
|
||||
* sysfs_remove_mount_point - remove an always empty directory.
|
||||
* @parent_kobj: kobject that will contain this always empty directory
|
||||
* @name: The name of the always empty directory to remove
|
||||
*
|
||||
*/
|
||||
void sysfs_remove_mount_point(struct kobject *parent_kobj, const char *name)
|
||||
{
|
||||
struct kernfs_node *parent = parent_kobj->sd;
|
||||
|
||||
kernfs_remove_by_name_ns(parent, name, NULL);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(sysfs_remove_mount_point);
|
||||
|
|
|
@ -210,6 +210,10 @@ int __must_check sysfs_rename_dir_ns(struct kobject *kobj, const char *new_name,
|
|||
int __must_check sysfs_move_dir_ns(struct kobject *kobj,
|
||||
struct kobject *new_parent_kobj,
|
||||
const void *new_ns);
|
||||
int __must_check sysfs_create_mount_point(struct kobject *parent_kobj,
|
||||
const char *name);
|
||||
void sysfs_remove_mount_point(struct kobject *parent_kobj,
|
||||
const char *name);
|
||||
|
||||
int __must_check sysfs_create_file_ns(struct kobject *kobj,
|
||||
const struct attribute *attr,
|
||||
|
@ -298,6 +302,17 @@ static inline int sysfs_move_dir_ns(struct kobject *kobj,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline int sysfs_create_mount_point(struct kobject *parent_kobj,
|
||||
const char *name)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void sysfs_remove_mount_point(struct kobject *parent_kobj,
|
||||
const char *name)
|
||||
{
|
||||
}
|
||||
|
||||
static inline int sysfs_create_file_ns(struct kobject *kobj,
|
||||
const struct attribute *attr,
|
||||
const void *ns)
|
||||
|
|
Loading…
Reference in New Issue