Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dfa87c82 authored by Alan Stern's avatar Alan Stern Committed by Greg Kroah-Hartman
Browse files

sysfs: allow attributes to be added to groups



This patch (as860) adds two new sysfs routines:
sysfs_add_file_to_group() and sysfs_remove_file_from_group().
A later patch adds code that uses the new routines.

Signed-off-by: default avatarAlan Stern <stern@rowland.harvard.edu>
Cc: Maneesh Soni <maneesh@in.ibm.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent b5e795f8
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -501,6 +501,30 @@ int sysfs_create_file(struct kobject * kobj, const struct attribute * attr)
}


/**
 * sysfs_add_file_to_group - add an attribute file to a pre-existing group.
 * @kobj: object we're acting for.
 * @attr: attribute descriptor.
 * @group: group name.
 */
int sysfs_add_file_to_group(struct kobject *kobj,
		const struct attribute *attr, const char *group)
{
	struct dentry *dir;
	int error;

	dir = lookup_one_len(group, kobj->dentry, strlen(group));
	if (IS_ERR(dir))
		error = PTR_ERR(dir);
	else {
		error = sysfs_add_file(dir, attr, SYSFS_KOBJ_ATTR);
		dput(dir);
	}
	return error;
}
EXPORT_SYMBOL_GPL(sysfs_add_file_to_group);


/**
 * sysfs_update_file - update the modified timestamp on an object attribute.
 * @kobj: object we're acting for.
@@ -586,6 +610,26 @@ void sysfs_remove_file(struct kobject * kobj, const struct attribute * attr)
}


/**
 * sysfs_remove_file_from_group - remove an attribute file from a group.
 * @kobj: object we're acting for.
 * @attr: attribute descriptor.
 * @group: group name.
 */
void sysfs_remove_file_from_group(struct kobject *kobj,
		const struct attribute *attr, const char *group)
{
	struct dentry *dir;

	dir = lookup_one_len(group, kobj->dentry, strlen(group));
	if (!IS_ERR(dir)) {
		sysfs_hash_and_remove(dir, attr->name);
		dput(dir);
	}
}
EXPORT_SYMBOL_GPL(sysfs_remove_file_from_group);


EXPORT_SYMBOL_GPL(sysfs_create_file);
EXPORT_SYMBOL_GPL(sysfs_remove_file);
EXPORT_SYMBOL_GPL(sysfs_update_file);
+17 −0
Original line number Diff line number Diff line
@@ -126,6 +126,11 @@ void sysfs_remove_bin_file(struct kobject *kobj, struct bin_attribute *attr);
int __must_check sysfs_create_group(struct kobject *,
					const struct attribute_group *);
void sysfs_remove_group(struct kobject *, const struct attribute_group *);
int sysfs_add_file_to_group(struct kobject *kobj,
		const struct attribute *attr, const char *group);
void sysfs_remove_file_from_group(struct kobject *kobj,
		const struct attribute *attr, const char *group);

void sysfs_notify(struct kobject * k, char *dir, char *attr);


@@ -210,6 +215,18 @@ static inline void sysfs_remove_group(struct kobject * k, const struct attribute
	;
}

static inline int sysfs_add_file_to_group(struct kobject *kobj,
		const struct attribute *attr, const char *group)
{
	return 0;
}

static inline void sysfs_remove_file_from_group(struct kobject *kobj,
		const struct attribute *attr, const char *group);
{
	;
}

static inline void sysfs_notify(struct kobject * k, char *dir, char *attr)
{
}