24.03.2021 00:19, Dmitry Osipenko пишет: >> + if (!kobj) >> + goto out; >> + >> + kobj->cma = cma; >> + cma->kobj = kobj; >> + if (kobject_init_and_add(&cma->kobj->kobj, &cma_ktype, >> + cma_kobj_root, "%s", cma->name)) { >> + kobject_put(&cma->kobj->kobj); >> + goto out; >> + } >> + } >> + >> + return 0; >> +out: >> + kobject_put(cma_kobj_root); >> + >> + return -ENOMEM; > kobject_init_and_add returns a error code, it could be different from > ENOMEM. Won't hurt to propagate the proper error code. > I think it will be cleaner to write it like this: cma_kobj = kzalloc(sizeof(*cma_kobj), GFP_KERNEL); if (!cma_kobj) { kobject_put(cma_kobj_root); return -ENOMEM; } cma_kobj->cma = cma; err = kobject_init_and_add(&cma_kobj->kobj, &cma_ktype, cma_kobj_root, "%s", cma->name); if (err) { kobject_put(&cma_kobj->kobj); kobject_put(cma_kobj_root); return err; } } return 0; }