Hi Jon, On Wed, Feb 19, 2020 at 03:58:18AM -0700, Jonathan Corbet wrote: > On Thu, 13 Feb 2020 18:23:11 +0530 > Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> wrote: > > > Eventhough the current documentation explains that the reference count > > gets incremented by both kref_init() and kref_get(), it is often > > misunderstood that only one instance of kref_put() is needed in the > > example code. So let's clarify that a bit. > > > > Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@xxxxxxxxxx> > > --- > > Documentation/kref.txt | 4 ++++ > > 1 file changed, 4 insertions(+) > > > > diff --git a/Documentation/kref.txt b/Documentation/kref.txt > > index 3af384156d7e..c61eea6f1bf2 100644 > > --- a/Documentation/kref.txt > > +++ b/Documentation/kref.txt > > @@ -128,6 +128,10 @@ since we already have a valid pointer that we own a refcount for. The > > put needs no lock because nothing tries to get the data without > > already holding a pointer. > > > > +In the above example, kref_put() will be called 2 times in both success > > +and error paths. This is necessary because the reference count got > > +incremented 2 times by kref_init() and kref_get(). > > Out of curiosity, where have you seen this misunderstanding happening? > I'm not really opposed to this change, but I don't understand why it's > really needed. > Jakub mistakenly spotted one refcounting issue in one of my patchset: https://lkml.org/lkml/2020/2/3/926 Then I tried to show him the kernel doc for kref and that's where I got this example code slightly confusing. And while looking into the log, I noticed that someone deleted the kref_put in error path mistakenly and that commit got reverted after that. This issue was even discussed in stack overflow. http://stackoverflow.com/questions/20093127/why-kref-doc-of-linux-kernel-omits-kref-put-when-kthread-run-fail So I thought about making it more clear of why the kref_put is needed in error path. Thanks, Mani > Thanks, > > jon