On Sun, Apr 28, 2019 at 10:48:10AM +1000, Tobin C. Harding wrote:
> There is currently some confusion on how to wind back
> kobject_init_and_add() during the error paths in code that uses this
> function.
> 
> Add documentation to kobject_add() and kobject_del() to help clarify the
> usage.
> 
> Signed-off-by: Tobin C. Harding <[email protected]>
> ---
> 
> The assumption is that this is the correct usage, and that's what I've
> tried to document.  Is this correct?
> 
> void fn(void)
> {
>       int ret;
> 
>       ret = kobject_init_and_add(kobj, ktype, NULL, "foo");
>       if (ret) {
>               kobject_put(kobj);
>               return -1;

Don't make up error numbers, use a real one :)

>       }
> 
>       ret = some_init_fn();
>       if (ret)
>               goto err;
> 
>       ret = some_other_init_fn();
>       if (ret)
>               goto other_err;
> 
>       kobject_uevent(kobj, KOBJ_ADD);
>       return 0;
> 
> other_err:
>       other_clean_up_fn();
> err:
>       kobject_del(kobj);
>       return ret;
> }

Yes, this looks correct.

I've queued both of these patches up now, thanks!

greg k-h

Reply via email to