Commit 9255782f authored by Sourabh Jain's avatar Sourabh Jain Committed by Michael Ellerman

sysfs: Wrap __compat_only_sysfs_link_entry_to_kobj function to change the symlink name

The __compat_only_sysfs_link_entry_to_kobj function creates a symlink
to a kobject but doesn't provide an option to change the symlink file
name.

This patch adds a wrapper function compat_only_sysfs_link_entry_to_kobj
that extends the __compat_only_sysfs_link_entry_to_kobj functionality
which allows function caller to customize the symlink name.
Signed-off-by: default avatarSourabh Jain <sourabhjain@linux.ibm.com>
[mpe: Fix compile error when CONFIG_SYSFS=n]
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/20191211160910.21656-3-sourabhjain@linux.ibm.com
parent f52153ab
...@@ -424,6 +424,25 @@ EXPORT_SYMBOL_GPL(sysfs_remove_link_from_group); ...@@ -424,6 +424,25 @@ EXPORT_SYMBOL_GPL(sysfs_remove_link_from_group);
int __compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj, int __compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj,
struct kobject *target_kobj, struct kobject *target_kobj,
const char *target_name) const char *target_name)
{
return compat_only_sysfs_link_entry_to_kobj(kobj, target_kobj,
target_name, NULL);
}
EXPORT_SYMBOL_GPL(__compat_only_sysfs_link_entry_to_kobj);
/**
* compat_only_sysfs_link_entry_to_kobj - add a symlink to a kobject pointing
* to a group or an attribute
* @kobj: The kobject containing the group.
* @target_kobj: The target kobject.
* @target_name: The name of the target group or attribute.
* @symlink_name: The name of the symlink file (target_name will be
* considered if symlink_name is NULL).
*/
int compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj,
struct kobject *target_kobj,
const char *target_name,
const char *symlink_name)
{ {
struct kernfs_node *target; struct kernfs_node *target;
struct kernfs_node *entry; struct kernfs_node *entry;
...@@ -448,12 +467,15 @@ int __compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj, ...@@ -448,12 +467,15 @@ int __compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj,
return -ENOENT; return -ENOENT;
} }
link = kernfs_create_link(kobj->sd, target_name, entry); if (!symlink_name)
symlink_name = target_name;
link = kernfs_create_link(kobj->sd, symlink_name, entry);
if (PTR_ERR(link) == -EEXIST) if (PTR_ERR(link) == -EEXIST)
sysfs_warn_dup(kobj->sd, target_name); sysfs_warn_dup(kobj->sd, symlink_name);
kernfs_put(entry); kernfs_put(entry);
kernfs_put(target); kernfs_put(target);
return PTR_ERR_OR_ZERO(link); return PTR_ERR_OR_ZERO(link);
} }
EXPORT_SYMBOL_GPL(__compat_only_sysfs_link_entry_to_kobj); EXPORT_SYMBOL_GPL(compat_only_sysfs_link_entry_to_kobj);
...@@ -300,6 +300,10 @@ void sysfs_remove_link_from_group(struct kobject *kobj, const char *group_name, ...@@ -300,6 +300,10 @@ void sysfs_remove_link_from_group(struct kobject *kobj, const char *group_name,
int __compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj, int __compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj,
struct kobject *target_kobj, struct kobject *target_kobj,
const char *target_name); const char *target_name);
int compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj,
struct kobject *target_kobj,
const char *target_name,
const char *symlink_name);
void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr); void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr);
...@@ -508,6 +512,14 @@ static inline int __compat_only_sysfs_link_entry_to_kobj( ...@@ -508,6 +512,14 @@ static inline int __compat_only_sysfs_link_entry_to_kobj(
return 0; return 0;
} }
static inline int compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj,
struct kobject *target_kobj,
const char *target_name,
const char *symlink_name)
{
return 0;
}
static inline void sysfs_notify(struct kobject *kobj, const char *dir, static inline void sysfs_notify(struct kobject *kobj, const char *dir,
const char *attr) const char *attr)
{ {
......
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