From: Oliver Schinagl <oliver+list@schinagl.nl>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-kernel@vger.kernel.org, linux@roeck-us.net, khali@linux-fr.org
Subject: Re: [PATCH v2 5/7] sysfs: add support for binary attributes in groups
Date: Thu, 11 Jul 2013 13:45:53 +0200 [thread overview]
Message-ID: <51DE9AF1.90105@schinagl.nl> (raw)
In-Reply-To: <1373502965-1683-6-git-send-email-gregkh@linuxfoundation.org>
[-- Attachment #1: Type: text/plain, Size: 4291 bytes --]
On 11-07-13 02:36, Greg Kroah-Hartman wrote:
> groups should be able to support binary attributes, just like it
> supports "normal" attributes. This lets us only handle one type of
> structure, groups, throughout the driver core and subsystems, making
> binary attributes a "full fledged" part of the driver model, and not
> something just "tacked on".
However when only using binary attributes it warns and doesn't create
anything. The attached patch fixes that.
>
> Reported-by: Oliver Schinagl <oliver+list@schinagl.nl>
If I may be so bold and ask to change my e-mail address to
<oliver@schinagl.nl> that would be kind. I use the +list delimiter to
put all the mailing list mails in a separate mailbox.
> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> ---
> fs/sysfs/group.c | 66 +++++++++++++++++++++++++++++++++++----------------
> include/linux/sysfs.h | 4 ++--
> 2 files changed, 48 insertions(+), 22 deletions(-)
>
> diff --git a/fs/sysfs/group.c b/fs/sysfs/group.c
> index aec3d5c..e5719c6 100644
> --- a/fs/sysfs/group.c
> +++ b/fs/sysfs/group.c
> @@ -20,38 +20,64 @@ static void remove_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
> const struct attribute_group *grp)
> {
> struct attribute *const* attr;
> - int i;
> + struct bin_attribute *const* bin_attr;
>
> - for (i = 0, attr = grp->attrs; *attr; i++, attr++)
> - sysfs_hash_and_remove(dir_sd, NULL, (*attr)->name);
> + if (grp->attrs)
> + for (attr = grp->attrs; *attr; attr++)
> + sysfs_hash_and_remove(dir_sd, NULL, (*attr)->name);
> + if (grp->bin_attrs)
> + for (bin_attr = grp->bin_attrs; *bin_attr; bin_attr++)
> + sysfs_remove_bin_file(kobj, *bin_attr);
> }
>
> static int create_files(struct sysfs_dirent *dir_sd, struct kobject *kobj,
> const struct attribute_group *grp, int update)
> {
> struct attribute *const* attr;
> + struct bin_attribute *const* bin_attr;
> int error = 0, i;
>
> - for (i = 0, attr = grp->attrs; *attr && !error; i++, attr++) {
> - umode_t mode = 0;
> + if (grp->attrs) {
> + for (i = 0, attr = grp->attrs; *attr && !error; i++, attr++) {
> + umode_t mode = 0;
> +
> + /*
> + * In update mode, we're changing the permissions or
> + * visibility. Do this by first removing then
> + * re-adding (if required) the file.
> + */
> + if (update)
> + sysfs_hash_and_remove(dir_sd, NULL,
> + (*attr)->name);
> + if (grp->is_visible) {
> + mode = grp->is_visible(kobj, *attr, i);
> + if (!mode)
> + continue;
> + }
> + error = sysfs_add_file_mode(dir_sd, *attr,
> + SYSFS_KOBJ_ATTR,
> + (*attr)->mode | mode);
> + if (unlikely(error))
> + break;
> + }
> + if (error) {
> + remove_files(dir_sd, kobj, grp);
> + goto exit;
> + }
> + }
>
> - /* in update mode, we're changing the permissions or
> - * visibility. Do this by first removing then
> - * re-adding (if required) the file */
> - if (update)
> - sysfs_hash_and_remove(dir_sd, NULL, (*attr)->name);
> - if (grp->is_visible) {
> - mode = grp->is_visible(kobj, *attr, i);
> - if (!mode)
> - continue;
> + if (grp->bin_attrs) {
> + for (bin_attr = grp->bin_attrs; *bin_attr; bin_attr++) {
> + if (update)
> + sysfs_remove_bin_file(kobj, *bin_attr);
> + error = sysfs_create_bin_file(kobj, *bin_attr);
> + if (error)
> + break;
> }
> - error = sysfs_add_file_mode(dir_sd, *attr, SYSFS_KOBJ_ATTR,
> - (*attr)->mode | mode);
> - if (unlikely(error))
> - break;
> + if (error)
> + remove_files(dir_sd, kobj, grp);
> }
> - if (error)
> - remove_files(dir_sd, kobj, grp);
> +exit:
> return error;
> }
>
> diff --git a/include/linux/sysfs.h b/include/linux/sysfs.h
> index d50a96b..2c3b6a3 100644
> --- a/include/linux/sysfs.h
> +++ b/include/linux/sysfs.h
> @@ -21,6 +21,7 @@
>
> struct kobject;
> struct module;
> +struct bin_attribute;
> enum kobj_ns_type;
>
> struct attribute {
> @@ -59,10 +60,9 @@ struct attribute_group {
> umode_t (*is_visible)(struct kobject *,
> struct attribute *, int);
> struct attribute **attrs;
> + struct bin_attribute **bin_attrs;
> };
>
> -
> -
> /**
> * Use these macros to make defining attributes easier. See include/linux/device.h
> * for examples..
>
[-- Attachment #2: 0001-sysfs-prevent-warning-when-only-using-binary-attribu.patch --]
[-- Type: text/x-patch, Size: 1104 bytes --]
>From 5a4066011878134c1ab9412bc147c28c30f0fa4b Mon Sep 17 00:00:00 2001
From: Oliver Schinagl <oliver@schinagl.nl>
Date: Thu, 11 Jul 2013 13:40:20 +0200
Subject: [PATCH] sysfs: prevent warning when only using binary attributes
When only using bin_attrs instead of attrs the kernel prints a warning
and refuses to create the sysfs entry. This fixes that.
Signed-off-by: Oliver Schinagl <oliver@schinagl.nl>
---
fs/sysfs/group.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/fs/sysfs/group.c b/fs/sysfs/group.c
index e5719c6..09a1a25 100644
--- a/fs/sysfs/group.c
+++ b/fs/sysfs/group.c
@@ -93,8 +93,8 @@ static int internal_create_group(struct kobject *kobj, int update,
/* Updates may happen before the object has been instantiated */
if (unlikely(update && !kobj->sd))
return -EINVAL;
- if (!grp->attrs) {
- WARN(1, "sysfs: attrs not set by subsystem for group: %s/%s\n",
+ if (!grp->attrs && !grp->bin_attrs) {
+ WARN(1, "sysfs: (bin_)attrs not set by subsystem for group: %s/%s\n",
kobj->name, grp->name ? "" : grp->name);
return -EINVAL;
}
--
1.8.1.5
next prev parent reply other threads:[~2013-07-11 11:47 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-10 20:05 Driver core and sysfs changes for attribute groups Greg Kroah-Hartman
2013-07-10 20:05 ` [PATCH 1/6] sysfs.h: add __ATTR_RW() macro Greg Kroah-Hartman
2013-07-10 20:05 ` [PATCH 2/6] sysfs.h: add ATTRIBUTE_GROUPS() macro Greg Kroah-Hartman
2013-07-10 20:05 ` [PATCH 3/6] sysfs.h: add BIN_ATTR macro Greg Kroah-Hartman
2013-07-10 20:05 ` [PATCH 4/6] driver core: add DEVICE_ATTR_RW and DEVICE_ATTR_RO macros Greg Kroah-Hartman
2013-07-10 20:05 ` [PATCH 5/6] sysfs: add support for binary attributes in groups Greg Kroah-Hartman
2013-07-10 20:05 ` [PATCH 6/6] driver core: Introduce device_create_groups Greg Kroah-Hartman
2013-07-10 20:17 ` Driver core and sysfs changes for attribute groups Oliver Schinagl
2013-07-10 22:04 ` Guenter Roeck
2013-07-10 22:23 ` Greg Kroah-Hartman
2013-07-10 22:34 ` Guenter Roeck
2013-07-10 22:05 ` [PATCH 7/6] driver core: add default groups to struct class Greg Kroah-Hartman
2013-07-10 22:18 ` Guenter Roeck
2013-07-10 22:24 ` Greg Kroah-Hartman
2013-07-10 22:20 ` [PATCH 7/6 v2] " Greg KH
2013-07-11 0:35 ` [PATCH v2 0/7] Driver core and sysfs changes for attribute groups Greg Kroah-Hartman
2013-07-11 0:35 ` [PATCH v2 1/7] sysfs.h: add __ATTR_RW() macro Greg Kroah-Hartman
2013-07-11 0:36 ` [PATCH v2 2/7] sysfs.h: add ATTRIBUTE_GROUPS() macro Greg Kroah-Hartman
2013-07-11 11:58 ` Oliver Schinagl
2013-07-11 17:06 ` Greg Kroah-Hartman
2013-07-11 20:09 ` Oliver Schinagl
2013-07-11 20:26 ` Greg Kroah-Hartman
2013-07-11 20:55 ` Oliver Schinagl
2013-07-14 22:55 ` Oliver Schinagl
2013-07-14 23:06 ` Greg Kroah-Hartman
2013-07-11 12:03 ` Oliver Schinagl
2013-07-11 17:08 ` Greg Kroah-Hartman
2013-07-11 0:36 ` [PATCH v2 3/7] sysfs.h: add BIN_ATTR macro Greg Kroah-Hartman
2013-07-11 0:36 ` [PATCH v2 4/7] driver core: device.h: add RW and RO attribute macros Greg Kroah-Hartman
2013-07-11 0:36 ` [PATCH v2 5/7] sysfs: add support for binary attributes in groups Greg Kroah-Hartman
2013-07-11 11:45 ` Oliver Schinagl [this message]
2013-07-11 16:59 ` Greg Kroah-Hartman
2013-07-11 0:36 ` [PATCH v2 6/7] driver core: Introduce device_create_groups Greg Kroah-Hartman
2013-07-11 0:36 ` [PATCH v2 7/7] driver core: add default groups to struct class Greg Kroah-Hartman
2013-07-11 5:23 ` [PATCH v2 0/7] Driver core and sysfs changes for attribute groups Guenter Roeck
2013-07-11 6:28 ` Greg Kroah-Hartman
2013-07-11 11:14 ` Oliver Schinagl
2013-07-14 17:27 ` Guenter Roeck
2013-07-14 17:32 ` Greg Kroah-Hartman
2013-07-14 18:32 ` Guenter Roeck
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=51DE9AF1.90105@schinagl.nl \
--to=oliver+list@schinagl.nl \
--cc=gregkh@linuxfoundation.org \
--cc=khali@linux-fr.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@roeck-us.net \
/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