[PATCH 1/2] staging: remove null checks before kfree

Ilia Mirkin imirkin at alum.mit.edu
Thu Feb 24 19:08:27 UTC 2011


On Thu, Feb 24, 2011 at 5:25 PM, Steven Rostedt <rostedt at goodmis.org> wrote:
> On Thu, 2011-02-24 at 09:06 -0800, Greg KH wrote:
>> On Thu, Feb 24, 2011 at 11:08:29AM -0500, Steven Rostedt wrote:
>> > On Tue, Feb 22, 2011 at 03:53:40AM -0500, Ilia Mirkin wrote:
>> > > This patch was created with the following semantic patch:
>> > >
>> > > // <smpl>
>> > > @@
>> > > expression E;
>> > > @@
>> > >
>> > > - if (E != NULL) kfree(E);
>> > > + kfree(E);
>> > > // </smpl>
>> >
>> > OK, so when will we be removing the unlikely() from the implementations
>> > of kfree()?
>> >
>> >     if (unlikely(ZERO_OR_NULL_PTR(block)))
>> >                     return;
>>
>> Have you run the tool that checks for unlikely being true here?  Odds
>> are, even with all of these changes, the large majority of the time
>> kfree is called, it has a valid pointer.
>
> Crap, all my saved output files were in the /tmp directory and has since
> been purged. I can reboot into the unlikely tracing kernel again, but
> that may have to wait. I usually just do that at end of year as a
> cleanup.
>
> I can't remember exactly where kfree came in, but IIRC it was on the
> list. Maybe not that high though.

FWIW my reasoning for doing this was that generally the reason you're
freeing something is because you allocated it, so kfree(NULL) happens
rarely -- error paths, conditional features, etc. If you actually
expect the argument to be NULL often, then you would do something like
if (unlikely(x)) kfree(x). This is done a few times in the core
kernel. I think it makes more sense for kfree to keep the unlikely
since in cold paths it won't matter and in hot paths where it is often
NULL, there should be a conditional at the call site. [I'm sure you'll
note the lack of an attached benchmark... this is just what makes
sense to me.]

  -ilia



More information about the devel mailing list