From: Jason Gunthorpe <jgunthorpe@obsidianresearch.com>
To: Haggai Eran <haggaie@mellanox.com>
Cc: Doug Ledford <dledford@redhat.com>,
linux-rdma@vger.kernel.org, netdev@vger.kernel.org,
Liran Liss <liranl@mellanox.com>,
Guy Shapiro <guysh@mellanox.com>,
Shachar Raindel <raindel@mellanox.com>,
Yotam Kenneth <yotamke@mellanox.com>
Subject: Re: [PATCH v3 for-next 05/13] IB/cm: Reference count ib_cm_ids
Date: Wed, 13 May 2015 10:58:23 -0600 [thread overview]
Message-ID: <20150513165823.GA20343@obsidianresearch.com> (raw)
In-Reply-To: <55532566.9040105@mellanox.com>
On Wed, May 13, 2015 at 01:20:22PM +0300, Haggai Eran wrote:
> > If you want to share listening CM IDs, then do exactly and only
> > that. Use the existing ref count scheme for keeping track of the
> > kfree/etc,
> The existing reference count scheme is for synchronization in
> cm_destroy_id. The function waits for active handlers to complete
> before
Pedantically, this is true
> destroying the id. Decrementing ref_count to zero doesn't cause the id
> to be freed.
Think it through. cm_destroy_id does this:
cm_deref_id(cm_id_priv);
wait_for_completion(&cm_id_priv->comp);
The cm_create_cm_id/cm_destroy_id pair holds a value in refcount.
The only way refcount can go zero is if cm_destroy_id is waiting in
wait_for_completion. So setting the refcount to zero always triggers a
(possibly async) kfree.
> > and add some kind of sharable listen ref count.
> That's basically what the patch does. I can change it from a kref to a
> direct reference count if you prefer.
As I've said, idiomatically I prefer to see kref used to manage object
life time exclusively, not as a general purpose counter.
In this case the share count should be protected by the existing spin
lock.
> > Early exit
> > from cm_destroy_id when the there are still people listening.
> >
> > That sounds like it keeps the basic rule of cm_destroy_id being
> > properly paired with the alloc, and allows listen sharing without the
> > confusion of what does multiple destroy mean.
>
> Won't you find it confusing if a call to ib_destroy_cm_id is successful
> but the id actually continues to live?
No.. As the caller, I don't care what the cm layer is doing behind the scenes.
The lifetime if each cm_id is clearly defined:
cm_create_cm_id()
cm_ref_id() / cm_deref_id()
cm_destroy_id()
The fact the CM might share a listen (and only a listen) ID behind the
scenes is not the caller's problem. That is an implementation choice,
each caller stands alone and uses the API properly, assuming it is the
only user of the returned cm_id.
The caller relies on cm_destroy_id being synchronous.
> I prefer the API to explicitly show that you are only decreasing the
> reference count and that the id might not be destroyed immediately.
No, that is fuzzy thinking, and lead to this patch that tried to have
both a ib_cm_id_put and cm_destroy_id being used at once. That is broken.
As discussed, we can't easily convert all call sites of cm_destroy_id
to ib_cm_id_put because 1) We loose the error code and 2) The put_X
idiom is async while cm_destory_id users expect sync.
So the best choice is to retain the cm_create_cm_id()/cm_destroy_id()
pairing, and have cm_destroy_id 'do the right thing' when presented
with a shared listen to destroy -> decrease the share count and free
the underlying listen when no more shares are left.
That said: Are you sure this is going to work? Are all the listen
specific cases of cm_destroy_id OK with not doing the
wait_for_completion and cm_dqueue_work *for stuff related to that
client* ?
If not you'll have to change the patch to create multiple cm_id's for
the same listen and iterate over all of them.
Jason
next prev parent reply other threads:[~2015-05-13 16:58 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-10 10:26 [PATCH v3 for-next 00/13] Add network namespace support in the RDMA-CM Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 01/13] IB/core: Use SRCU when reading client_list or device_list Haggai Eran
2015-05-11 18:18 ` Jason Gunthorpe
2015-05-12 6:07 ` Haggai Eran
2015-05-12 18:23 ` Jason Gunthorpe
2015-05-13 8:10 ` Haggai Eran
[not found] ` <555306E7.9020000-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-05-13 15:57 ` Jason Gunthorpe
2015-05-14 10:35 ` Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 02/13] IB/addr: Pass network namespace as a parameter Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 05/13] IB/cm: Reference count ib_cm_ids Haggai Eran
[not found] ` <1431253604-9214-6-git-send-email-haggaie-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-05-11 18:34 ` Jason Gunthorpe
2015-05-12 6:50 ` Haggai Eran
[not found] ` <5551A2CB.1010407-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-05-12 18:54 ` Jason Gunthorpe
[not found] ` <20150512185447.GA3503-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-13 10:20 ` Haggai Eran
2015-05-13 16:58 ` Jason Gunthorpe [this message]
[not found] ` <20150513165823.GA20343-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-14 6:48 ` Haggai Eran
2015-05-15 19:11 ` Hefty, Sean
[not found] ` <1828884A29C6694DAF28B7E6B8A82373A8FDC0C3-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-05-17 6:27 ` Haggai Eran
2015-05-19 19:23 ` Jason Gunthorpe
[not found] ` <20150519192353.GA23612-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-19 22:52 ` Hefty, Sean
[not found] ` <1828884A29C6694DAF28B7E6B8A82373A8FDD412-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-05-19 23:46 ` Jason Gunthorpe
[not found] ` <20150519234654.GA26634-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-20 0:49 ` Hefty, Sean
2015-05-21 6:51 ` Haggai Eran
[not found] ` <555D806B.1090002-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-05-21 12:56 ` Hefty, Sean
[not found] ` <1431253604-9214-1-git-send-email-haggaie-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-05-10 10:26 ` [PATCH v3 for-next 03/13] IB/core: Find the network namespace matching connection parameters Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 04/13] IB/ipoib: Return IPoIB devices " Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 06/13] IB/cm: API to retrieve existing listening CM IDs Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 07/13] IB/cm: Expose service ID in request events Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 08/13] IB/cma: Refactor RDMA IP CM private-data parsing code Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 09/13] IB/cma: Add compare_data checks to the RDMA CM module Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 10/13] IB/cma: Separate port allocation to network namespaces Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 11/13] IB/cma: Share CM IDs between namespaces Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 12/13] IB/cma: Add support for network namespaces Haggai Eran
2015-05-10 10:26 ` [PATCH v3 for-next 13/13] IB/ucma: Take the network namespace from the process Haggai Eran
2015-05-12 17:52 ` [PATCH v3 for-next 00/13] Add network namespace support in the RDMA-CM Hefty, Sean
[not found] ` <1828884A29C6694DAF28B7E6B8A82373A8FD7B85-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-05-13 8:50 ` Haggai Eran
[not found] ` <55531073.1000305-VPRAkNaXOzVWk0Htik3J/w@public.gmane.org>
2015-05-13 16:45 ` Hefty, Sean
[not found] ` <1828884A29C6694DAF28B7E6B8A82373A8FDA13B-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-05-13 17:18 ` Jason Gunthorpe
[not found] ` <20150513171823.GB20343-ePGOBjL8dl3ta4EC/59zMFaTQe2KTcn/@public.gmane.org>
2015-05-13 17:30 ` Hefty, Sean
[not found] ` <1828884A29C6694DAF28B7E6B8A82373A8FDA1AB-P5GAC/sN6hkd3b2yrw5b5LfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2015-05-14 5:35 ` Haggai Eran
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=20150513165823.GA20343@obsidianresearch.com \
--to=jgunthorpe@obsidianresearch.com \
--cc=dledford@redhat.com \
--cc=guysh@mellanox.com \
--cc=haggaie@mellanox.com \
--cc=linux-rdma@vger.kernel.org \
--cc=liranl@mellanox.com \
--cc=netdev@vger.kernel.org \
--cc=raindel@mellanox.com \
--cc=yotamke@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;
as well as URLs for NNTP newsgroup(s).