mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-03 18:20:25 +02:00 
			
		
		
		
	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: Sourabh Jain <sourabhjain@linux.ibm.com> [mpe: Fix compile error when CONFIG_SYSFS=n] Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20191211160910.21656-3-sourabhjain@linux.ibm.com
This commit is contained in:
		
							parent
							
								
									f52153ab38
								
							
						
					
					
						commit
						9255782f70
					
				
					 2 changed files with 37 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -424,6 +424,25 @@ EXPORT_SYMBOL_GPL(sysfs_remove_link_from_group);
 | 
			
		|||
int __compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj,
 | 
			
		||||
				      struct kobject *target_kobj,
 | 
			
		||||
				      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 *entry;
 | 
			
		||||
| 
						 | 
				
			
			@ -448,12 +467,15 @@ int __compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj,
 | 
			
		|||
		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)
 | 
			
		||||
		sysfs_warn_dup(kobj->sd, target_name);
 | 
			
		||||
		sysfs_warn_dup(kobj->sd, symlink_name);
 | 
			
		||||
 | 
			
		||||
	kernfs_put(entry);
 | 
			
		||||
	kernfs_put(target);
 | 
			
		||||
	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,
 | 
			
		|||
int __compat_only_sysfs_link_entry_to_kobj(struct kobject *kobj,
 | 
			
		||||
				      struct kobject *target_kobj,
 | 
			
		||||
				      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);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -508,6 +512,14 @@ static inline int __compat_only_sysfs_link_entry_to_kobj(
 | 
			
		|||
	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,
 | 
			
		||||
				const char *attr)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue