Pull acpi-debug into release branch
[sfrench/cifs-2.6.git] / Documentation / filesystems / configfs / configfs_example.c
index f3c6e4946f983a3e10a8b61ae9b0975440f453fa..25151fd5c2c6f032a0cc95d57d213d7fa4fcdf18 100644 (file)
@@ -264,15 +264,23 @@ static struct config_item_type simple_child_type = {
 };
 
 
+struct simple_children {
+       struct config_group group;
+};
+
+static inline struct simple_children *to_simple_children(struct config_item *item)
+{
+       return item ? container_of(to_config_group(item), struct simple_children, group) : NULL;
+}
+
 static struct config_item *simple_children_make_item(struct config_group *group, const char *name)
 {
        struct simple_child *simple_child;
 
-       simple_child = kmalloc(sizeof(struct simple_child), GFP_KERNEL);
+       simple_child = kzalloc(sizeof(struct simple_child), GFP_KERNEL);
        if (!simple_child)
                return NULL;
 
-       memset(simple_child, 0, sizeof(struct simple_child));
 
        config_item_init_type_name(&simple_child->item, name,
                                   &simple_child_type);
@@ -304,7 +312,13 @@ static ssize_t simple_children_attr_show(struct config_item *item,
 "items have only one attribute that is readable and writeable.\n");
 }
 
+static void simple_children_release(struct config_item *item)
+{
+       kfree(to_simple_children(item));
+}
+
 static struct configfs_item_operations simple_children_item_ops = {
+       .release        = simple_children_release,
        .show_attribute = simple_children_attr_show,
 };
 
@@ -320,6 +334,7 @@ static struct config_item_type simple_children_type = {
        .ct_item_ops    = &simple_children_item_ops,
        .ct_group_ops   = &simple_children_group_ops,
        .ct_attrs       = simple_children_attrs,
+       .ct_owner       = THIS_MODULE,
 };
 
 static struct configfs_subsystem simple_children_subsys = {
@@ -344,20 +359,15 @@ static struct configfs_subsystem simple_children_subsys = {
  * children of its own.
  */
 
-struct simple_children {
-       struct config_group group;
-};
-
 static struct config_group *group_children_make_group(struct config_group *group, const char *name)
 {
        struct simple_children *simple_children;
 
-       simple_children = kmalloc(sizeof(struct simple_children),
+       simple_children = kzalloc(sizeof(struct simple_children),
                                  GFP_KERNEL);
        if (!simple_children)
                return NULL;
 
-       memset(simple_children, 0, sizeof(struct simple_children));
 
        config_group_init_type_name(&simple_children->group, name,
                                    &simple_children_type);
@@ -403,6 +413,7 @@ static struct config_item_type group_children_type = {
        .ct_item_ops    = &group_children_item_ops,
        .ct_group_ops   = &group_children_group_ops,
        .ct_attrs       = group_children_attrs,
+       .ct_owner       = THIS_MODULE,
 };
 
 static struct configfs_subsystem group_children_subsys = {
@@ -440,7 +451,7 @@ static int __init configfs_example_init(void)
                subsys = example_subsys[i];
 
                config_group_init(&subsys->su_group);
-               init_MUTEX(&subsys->su_sem);
+               mutex_init(&subsys->su_mutex);
                ret = configfs_register_subsystem(subsys);
                if (ret) {
                        printk(KERN_ERR "Error %d while registering subsystem %s\n",