public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Stefan Achatz <stefan_achatz@web.de>
Cc: Greg Kroah-Hartman <gregkh@suse.de>,
	"Eric W. Biederman" <ebiederm@aristanetworks.com>,
	"Serge E. Hallyn" <serue@us.ibm.com>, Tejun Heo <tj@kernel.org>,
	Jiri Kosina <jkosina@suse.cz>,
	linux-input@vger.kernel.org, linux-kernel@vger.kernel.org,
	Benjamin Thery <benjamin.thery@bull.net>
Subject: Re: [PATCH 1/2] sysfs: Introducing sysfs_create_bin_group()
Date: Fri, 12 Nov 2010 10:57:00 -0800	[thread overview]
Message-ID: <20101112185700.GE1224@core.coreip.homeip.net> (raw)
In-Reply-To: <1289585918.2629.12.camel@neuromancer>

On Fri, Nov 12, 2010 at 07:18:38PM +0100, Stefan Achatz wrote:
> Implemented group functions for easier creation of multiple binary sysfs
> attributes similar to existing attribute_group handling functions.
> The code reuses struct attribute_group instead of inventing a new struct
> binary_attribute_group.
> 
> Signed-off-by: Stefan Achatz <erazor_de@users.sourceforge.net>

Looks good to me, thanks for implementing this.

> ---
>  fs/sysfs/group.c      |   76 ++++++++++++++++++++++++++++++++++++------------
>  include/linux/sysfs.h |   11 +++++++
>  2 files changed, 68 insertions(+), 19 deletions(-)
> 
> diff --git a/fs/sysfs/group.c b/fs/sysfs/group.c
> index 442f34f..841baed 100644
> --- a/fs/sysfs/group.c
> +++ b/fs/sysfs/group.c
> @@ -27,7 +27,7 @@ static void remove_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
>  }
>  
>  static int create_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
> -			const struct attribute_group *grp, int update)
> +			const struct attribute_group *grp, int update, int type)
>  {
>  	struct attribute *const* attr;
>  	int error = 0, i;
> @@ -45,7 +45,7 @@ static int create_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
>  			if (!mode)
>  				continue;
>  		}
> -		error = sysfs_add_file_mode(dir_sd, *attr, SYSFS_KOBJ_ATTR,
> +		error = sysfs_add_file_mode(dir_sd, *attr, type,
>  					    (*attr)->mode | mode);
>  		if (unlikely(error))
>  			break;
> @@ -57,7 +57,7 @@ static int create_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
>  
>  
>  static int internal_create_group(struct kobject *kobj, int update,
> -				 const struct attribute_group *grp)
> +				 const struct attribute_group *grp, int type)
>  {
>  	struct sysfs_dirent *sd;
>  	int error;
> @@ -75,7 +75,7 @@ static int internal_create_group(struct kobject *kobj, int update,
>  	} else
>  		sd = kobj->sd;
>  	sysfs_get(sd);
> -	error = create_files(sd, kobj, grp, update);
> +	error = create_files(sd, kobj, grp, update, type);
>  	if (error) {
>  		if (grp->name)
>  			sysfs_remove_subdir(sd);
> @@ -97,9 +97,16 @@ static int internal_create_group(struct kobject *kobj, int update,
>  int sysfs_create_group(struct kobject *kobj,
>  		       const struct attribute_group *grp)
>  {
> -	return internal_create_group(kobj, 0, grp);
> +	return internal_create_group(kobj, 0, grp, SYSFS_KOBJ_ATTR);
>  }
>  
> +int sysfs_create_bin_group(struct kobject *kobj,
> +			   const struct attribute_group *grp)
> +{
> +	return internal_create_group(kobj, 0, grp, SYSFS_KOBJ_BIN_ATTR);
> +}
> +EXPORT_SYMBOL_GPL(sysfs_create_bin_group);
> +
>  /**
>   * sysfs_update_group - given a directory kobject, create an attribute group
>   * @kobj:	The kobject to create the group on
> @@ -120,10 +127,15 @@ int sysfs_create_group(struct kobject *kobj,
>  int sysfs_update_group(struct kobject *kobj,
>  		       const struct attribute_group *grp)
>  {
> -	return internal_create_group(kobj, 1, grp);
> +	return internal_create_group(kobj, 1, grp, SYSFS_KOBJ_ATTR);
>  }
>  
> -
> +int sysfs_update_bin_group(struct kobject *kobj,
> +			   const struct attribute_group *grp)
> +{
> +	return internal_create_group(kobj, 1, grp, SYSFS_KOBJ_BIN_ATTR);
> +}
> +EXPORT_SYMBOL_GPL(sysfs_update_bin_group);
>  
>  void sysfs_remove_group(struct kobject * kobj, 
>  			const struct attribute_group * grp)
> @@ -148,17 +160,15 @@ void sysfs_remove_group(struct kobject * kobj,
>  	sysfs_put(sd);
>  }
>  
> -/**
> - * sysfs_merge_group - merge files into a pre-existing attribute group.
> - * @kobj:	The kobject containing the group.
> - * @grp:	The files to create and the attribute group they belong to.
> - *
> - * This function returns an error if the group doesn't exist or any of the
> - * files already exist in that group, in which case none of the new files
> - * are created.
> - */
> -int sysfs_merge_group(struct kobject *kobj,
> -		       const struct attribute_group *grp)
> +void sysfs_remove_bin_group(struct kobject * kobj,
> +			    const struct attribute_group * grp)
> +{
> +	sysfs_remove_group(kobj, grp);
> +}
> +EXPORT_SYMBOL_GPL(sysfs_remove_bin_group);
> +
> +int internal_merge_group(struct kobject *kobj,
> +		       const struct attribute_group *grp, int type)
>  {
>  	struct sysfs_dirent *dir_sd;
>  	int error = 0;
> @@ -173,7 +183,7 @@ int sysfs_merge_group(struct kobject *kobj,
>  		return -ENOENT;
>  
>  	for ((i = 0, attr = grp->attrs); *attr && !error; (++i, ++attr))
> -		error = sysfs_add_file(dir_sd, *attr, SYSFS_KOBJ_ATTR);
> +		error = sysfs_add_file(dir_sd, *attr, type);
>  	if (error) {
>  		while (--i >= 0)
>  			sysfs_hash_and_remove(dir_sd, NULL, (*--attr)->name);
> @@ -182,8 +192,30 @@ int sysfs_merge_group(struct kobject *kobj,
>  
>  	return error;
>  }
> +
> +/**
> + * sysfs_merge_group - merge files into a pre-existing attribute group.
> + * @kobj:	The kobject containing the group.
> + * @grp:	The files to create and the attribute group they belong to.
> + *
> + * This function returns an error if the group doesn't exist or any of the
> + * files already exist in that group, in which case none of the new files
> + * are created.
> + */
> +int sysfs_merge_group(struct kobject *kobj,
> +		       const struct attribute_group *grp)
> +{
> +	return internal_merge_group(kobj, grp, SYSFS_KOBJ_ATTR);
> +}
>  EXPORT_SYMBOL_GPL(sysfs_merge_group);
>  
> +int sysfs_merge_bin_group(struct kobject *kobj,
> +			  const struct attribute_group *grp)
> +{
> +	return internal_merge_group(kobj, grp, SYSFS_KOBJ_BIN_ATTR);
> +}
> +EXPORT_SYMBOL_GPL(sysfs_merge_bin_group);
> +
>  /**
>   * sysfs_unmerge_group - remove files from a pre-existing attribute group.
>   * @kobj:	The kobject containing the group.
> @@ -207,6 +239,12 @@ void sysfs_unmerge_group(struct kobject *kobj,
>  }
>  EXPORT_SYMBOL_GPL(sysfs_unmerge_group);
>  
> +void sysfs_unmerge_bin_group(struct kobject *kobj,
> +			     const struct attribute_group *grp)
> +{
> +	sysfs_unmerge_group(kobj, grp);
> +}
> +EXPORT_SYMBOL_GPL(sysfs_unmerge_bin_group);
>  
>  EXPORT_SYMBOL_GPL(sysfs_create_group);
>  EXPORT_SYMBOL_GPL(sysfs_update_group);
> diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
> index 30b8815..653b0b0 100644
> --- a/include/linux/sysfs.h
> +++ b/include/linux/sysfs.h
> @@ -169,6 +169,17 @@ int sysfs_merge_group(struct kobject *kobj,
>  void sysfs_unmerge_group(struct kobject *kobj,
>  		       const struct attribute_group *grp);
>  
> +int sysfs_create_bin_group(struct kobject *kobj,
> +			   const struct attribute_group *grp);
> +int sysfs_update_bin_group(struct kobject *kobj,
> +			   const struct attribute_group *grp);
> +void sysfs_remove_bin_group(struct kobject * kobj,
> +			const struct attribute_group * grp);
> +int sysfs_merge_bin_group(struct kobject *kobj,
> +		       const struct attribute_group *grp);
> +void sysfs_unmerge_bin_group(struct kobject *kobj,
> +		       const struct attribute_group *grp);
> +
>  void sysfs_notify(struct kobject *kobj, const char *dir, const char *attr);
>  void sysfs_notify_dirent(struct sysfs_dirent *sd);
>  struct sysfs_dirent *sysfs_get_dirent(struct sysfs_dirent *parent_sd,
> -- 
> 1.7.2.3
> 
> 
> 

-- 
Dmitry

  reply	other threads:[~2010-11-12 18:57 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-12 18:18 [PATCH 1/2] sysfs: Introducing sysfs_create_bin_group() Stefan Achatz
2010-11-12 18:57 ` Dmitry Torokhov [this message]
2010-11-12 19:29 ` Greg KH
2010-11-12 19:38   ` Dmitry Torokhov
2010-11-12 19:50     ` Greg KH
2010-11-12 20:02       ` Dmitry Torokhov
2010-11-15 13:49         ` Jiri Kosina
2010-11-15 13:51           ` Jiri Kosina

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20101112185700.GE1224@core.coreip.homeip.net \
    --to=dmitry.torokhov@gmail.com \
    --cc=benjamin.thery@bull.net \
    --cc=ebiederm@aristanetworks.com \
    --cc=gregkh@suse.de \
    --cc=jkosina@suse.cz \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=serue@us.ibm.com \
    --cc=stefan_achatz@web.de \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox