On 2022-10-20 22:20, Yang Yingliang wrote: > kset_register() is currently used in some places without calling > kset_put() in error path, because the callers think it should be > kset internal thing to do, but the driver core can not know what > caller doing with that memory at times. The memory could be freed > both in kset_put() and error path of caller, if it is called in > kset_register(). > > So make the function documentation more explicit about calling > kset_put() in the error path of caller. > > Signed-off-by: Yang Yingliang <yangyingliang@xxxxxxxxxx> > --- > lib/kobject.c | 3 +++ > 1 file changed, 3 insertions(+) > > diff --git a/lib/kobject.c b/lib/kobject.c > index a0b2dbfcfa23..6da04353d974 100644 > --- a/lib/kobject.c > +++ b/lib/kobject.c > @@ -834,6 +834,9 @@ EXPORT_SYMBOL_GPL(kobj_sysfs_ops); > /** > * kset_register() - Initialize and add a kset. > * @k: kset. > + * > + * If this function returns an error, kset_put() must be called to > + * properly clean up the memory associated with the object. > */ And I'd continue the sentence, with " ... with the object, for instance the memory for the kset.kobj.name when kobj_set_name(&kset.kobj, format, ...) was called before calling kset_register()." This makes it clear what we want to make sure is freed, in case of an early error from kset_register(). Regards, Luben > int kset_register(struct kset *k) > {