From: Doug Ledford <dledford@redhat.com>
To: maninder1.s@samsung.com
Cc: Sean Hefty <sean.hefty@intel.com>,
Or Gerlitz <ogerlitz@mellanox.com>,
David Miller <davem@davemloft.net>,
"roland@purestorage.com" <roland@purestorage.com>,
Matan Barak <matanb@mellanox.com>,
Moni Shoua <monis@mellanox.com>,
"jackm@dev.mellanox.co.il" <jackm@dev.mellanox.co.il>,
Yishai Hadas <yishaih@mellanox.com>,
"eranbe@mellanox.com" <eranbe@mellanox.com>,
Ira Weiny <ira.weiny@intel.com>,
linux-rdma <linux-rdma@vger.kernel.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
PANKAJ MISHRA <pankaj.m@samsung.com>
Subject: Re: [PATCH 1/1] infiniband: Remove redundant NULL check before kfree
Date: Wed, 08 Jul 2015 18:24:01 -0400 [thread overview]
Message-ID: <559DA301.20203@redhat.com> (raw)
In-Reply-To: <1037392254.437811436329408244.JavaMail.weblogic@ep2mlwas06a>
[-- Attachment #1: Type: text/plain, Size: 1912 bytes --]
On 07/08/2015 12:23 AM, Maninder Singh wrote:
> Hello,
>
>>> + for (i = 0; i < dev->caps.num_ports; i++)
>>> + kfree(dm[i]);
>>> goto out;
>>> }
>>> }
>>> --
>>> 1.7.9.5
>>>
>>
>> If you are going to change this, you might as well make it 100% correct:
>>
>> i—-;
>> while (i >= 0)
>> kfree(dm[i]);
>>
>> Then you don’t have to worry about whether kfree works on NULL, every item you free will be guaranteed to be non-NULL.
> Thanks for suggestion :)
> Sent new patch with described changes, I was thinking one more thing.
>
> In below code :-
> if (!ibdev->sriov.is_going_down)
> queue_work(ibdev->sriov.demux[i].ud_wq, &dm[i]->work);
> spin_unlock_irqrestore(&ibdev->sriov.going_down_lock, flags);
> }
> out:
> kfree(dm);
> return;
>
> dm is freed after queue_work, is it correct to free dm when other dm[i] are allocated ? i did not get it.
The dm is just there to give an easy way to refer to a variable number
of work structs. The flow is supposed to be something like this:
alloc(dm)
for(i=0;i<num_qps;i++)
dm[i] == alloc(work item);
for(i=0;i<num_qps;i++)
init dm[i] work item
queue dm[i] work item
free(dm)
In this scenario, all of the dm[i] items should be queued to delayed
work. When that work completes, it should then free these structs. So,
yes, the dm variable itself is just a temporary means of keeping all
those work struct pointers together. However, your question caused me
to look closely here, and I see that there is a bug. In particular, if
we check the sriov.is_going_down and as a result *don't* queue a work
item, then we end up leaking that work struct. In addition, I think
there is room to optimize this routine considerably. I'll post a patch
for that in a minute.
--
Doug Ledford <dledford@redhat.com>
GPG KeyID: 0E572FDD
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 884 bytes --]
next prev parent reply other threads:[~2015-07-08 22:24 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-07-08 4:23 [PATCH 1/1] infiniband: Remove redundant NULL check before kfree Maninder Singh
2015-07-08 22:24 ` Doug Ledford [this message]
-- strict thread matches above, loose matches on Subject: below --
2015-06-26 7:09 Maninder Singh
2015-07-07 18:53 ` Doug Ledford
2015-07-09 17:06 ` Christoph Lameter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=559DA301.20203@redhat.com \
--to=dledford@redhat.com \
--cc=davem@davemloft.net \
--cc=eranbe@mellanox.com \
--cc=ira.weiny@intel.com \
--cc=jackm@dev.mellanox.co.il \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-rdma@vger.kernel.org \
--cc=maninder1.s@samsung.com \
--cc=matanb@mellanox.com \
--cc=monis@mellanox.com \
--cc=ogerlitz@mellanox.com \
--cc=pankaj.m@samsung.com \
--cc=roland@purestorage.com \
--cc=sean.hefty@intel.com \
--cc=yishaih@mellanox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox