Skip to content

Commit

Permalink
dm sysfs: introduce ability to add writable attributes
Browse files Browse the repository at this point in the history
Add DM_ATTR_RW() macro and establish .store method in dm_sysfs_ops.

Signed-off-by: Mike Snitzer <[email protected]>
  • Loading branch information
snitm committed Apr 15, 2015
1 parent de3ec86 commit b898320
Showing 1 changed file with 27 additions and 5 deletions.
32 changes: 27 additions & 5 deletions drivers/md/dm-sysfs.c
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@
struct dm_sysfs_attr {
struct attribute attr;
ssize_t (*show)(struct mapped_device *, char *);
ssize_t (*store)(struct mapped_device *, char *);
ssize_t (*store)(struct mapped_device *, const char *, size_t count);
};

#define DM_ATTR_RO(_name) \
Expand Down Expand Up @@ -39,6 +39,31 @@ static ssize_t dm_attr_show(struct kobject *kobj, struct attribute *attr,
return ret;
}

#define DM_ATTR_RW(_name) \
struct dm_sysfs_attr dm_attr_##_name = \
__ATTR(_name, S_IRUGO | S_IWUSR, dm_attr_##_name##_show, dm_attr_##_name##_store)

static ssize_t dm_attr_store(struct kobject *kobj, struct attribute *attr,
const char *page, size_t count)
{
struct dm_sysfs_attr *dm_attr;
struct mapped_device *md;
ssize_t ret;

dm_attr = container_of(attr, struct dm_sysfs_attr, attr);
if (!dm_attr->store)
return -EIO;

md = dm_get_from_kobject(kobj);
if (!md)
return -EINVAL;

ret = dm_attr->store(md, page, count);
dm_put(md);

return ret;
}

static ssize_t dm_attr_name_show(struct mapped_device *md, char *buf)
{
if (dm_copy_name_and_uuid(md, buf, NULL))
Expand Down Expand Up @@ -77,12 +102,9 @@ static struct attribute *dm_attrs[] = {

static const struct sysfs_ops dm_sysfs_ops = {
.show = dm_attr_show,
.store = dm_attr_store,
};

/*
* dm kobject is embedded in mapped_device structure
* no need to define release function here
*/
static struct kobj_type dm_ktype = {
.sysfs_ops = &dm_sysfs_ops,
.default_attrs = dm_attrs,
Expand Down

0 comments on commit b898320

Please sign in to comment.