I suggest to improve implementation details another bit at a few source code places. Examples: … > +++ b/drivers/mtd/mtd_virt_concat.c > @@ -0,0 +1,254 @@ … > +static int mtd_virt_concat_create_item(struct device_node *parts, > + unsigned int count) > +{ + struct mtd_virt_concat_node *item __free(kfree) = kzalloc(sizeof(*item), GFP_KERNEL); … > +int mtd_virt_concat_node_create(void) > +{ … +e_nomem: + ret = -ENOMEM; +put_parts: + of_node_put(parts); > +destroy_items: > + mtd_virt_concat_destroy_items(); > + > + return ret; > +} … Regards, Markus