mirror of
https://github.com/torvalds/linux
synced 2024-10-15 15:59:15 +00:00
sysfs: Add sysfs_update_groups function
Adding sysfs_update_groups function to update multiple groups. sysfs_update_groups - given a directory kobject, create a bunch of attribute groups @kobj: The kobject to update the group on @groups: The attribute groups to update, NULL terminated This function update a bunch of attribute groups. If an error occurs when updating a group, all previously updated groups will be removed together with already existing (not updated) attributes. Signed-off-by: Jiri Olsa <jolsa@kernel.org> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Reviewed-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Arnaldo Carvalho de Melo <acme@kernel.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Link: https://lkml.kernel.org/r/20190512155518.21468-2-jolsa@kernel.org Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
parent
6e86d3db5f
commit
aac1f7f95f
|
@ -175,6 +175,26 @@ int sysfs_create_group(struct kobject *kobj,
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(sysfs_create_group);
|
EXPORT_SYMBOL_GPL(sysfs_create_group);
|
||||||
|
|
||||||
|
static int internal_create_groups(struct kobject *kobj, int update,
|
||||||
|
const struct attribute_group **groups)
|
||||||
|
{
|
||||||
|
int error = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if (!groups)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (i = 0; groups[i]; i++) {
|
||||||
|
error = internal_create_group(kobj, update, groups[i]);
|
||||||
|
if (error) {
|
||||||
|
while (--i >= 0)
|
||||||
|
sysfs_remove_group(kobj, groups[i]);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sysfs_create_groups - given a directory kobject, create a bunch of attribute groups
|
* sysfs_create_groups - given a directory kobject, create a bunch of attribute groups
|
||||||
* @kobj: The kobject to create the group on
|
* @kobj: The kobject to create the group on
|
||||||
|
@ -191,24 +211,28 @@ EXPORT_SYMBOL_GPL(sysfs_create_group);
|
||||||
int sysfs_create_groups(struct kobject *kobj,
|
int sysfs_create_groups(struct kobject *kobj,
|
||||||
const struct attribute_group **groups)
|
const struct attribute_group **groups)
|
||||||
{
|
{
|
||||||
int error = 0;
|
return internal_create_groups(kobj, 0, groups);
|
||||||
int i;
|
|
||||||
|
|
||||||
if (!groups)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
for (i = 0; groups[i]; i++) {
|
|
||||||
error = sysfs_create_group(kobj, groups[i]);
|
|
||||||
if (error) {
|
|
||||||
while (--i >= 0)
|
|
||||||
sysfs_remove_group(kobj, groups[i]);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return error;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(sysfs_create_groups);
|
EXPORT_SYMBOL_GPL(sysfs_create_groups);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* sysfs_update_groups - given a directory kobject, create a bunch of attribute groups
|
||||||
|
* @kobj: The kobject to update the group on
|
||||||
|
* @groups: The attribute groups to update, NULL terminated
|
||||||
|
*
|
||||||
|
* This function update a bunch of attribute groups. If an error occurs when
|
||||||
|
* updating a group, all previously updated groups will be removed together
|
||||||
|
* with already existing (not updated) attributes.
|
||||||
|
*
|
||||||
|
* Returns 0 on success or error code from sysfs_update_group on failure.
|
||||||
|
*/
|
||||||
|
int sysfs_update_groups(struct kobject *kobj,
|
||||||
|
const struct attribute_group **groups)
|
||||||
|
{
|
||||||
|
return internal_create_groups(kobj, 1, groups);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(sysfs_update_groups);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* sysfs_update_group - given a directory kobject, update an attribute group
|
* sysfs_update_group - given a directory kobject, update an attribute group
|
||||||
* @kobj: The kobject to update the group on
|
* @kobj: The kobject to update the group on
|
||||||
|
|
|
@ -268,6 +268,8 @@ int __must_check sysfs_create_group(struct kobject *kobj,
|
||||||
const struct attribute_group *grp);
|
const struct attribute_group *grp);
|
||||||
int __must_check sysfs_create_groups(struct kobject *kobj,
|
int __must_check sysfs_create_groups(struct kobject *kobj,
|
||||||
const struct attribute_group **groups);
|
const struct attribute_group **groups);
|
||||||
|
int __must_check sysfs_update_groups(struct kobject *kobj,
|
||||||
|
const struct attribute_group **groups);
|
||||||
int sysfs_update_group(struct kobject *kobj,
|
int sysfs_update_group(struct kobject *kobj,
|
||||||
const struct attribute_group *grp);
|
const struct attribute_group *grp);
|
||||||
void sysfs_remove_group(struct kobject *kobj,
|
void sysfs_remove_group(struct kobject *kobj,
|
||||||
|
@ -433,6 +435,12 @@ static inline int sysfs_create_groups(struct kobject *kobj,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int sysfs_update_groups(struct kobject *kobj,
|
||||||
|
const struct attribute_group **groups)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static inline int sysfs_update_group(struct kobject *kobj,
|
static inline int sysfs_update_group(struct kobject *kobj,
|
||||||
const struct attribute_group *grp)
|
const struct attribute_group *grp)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue