linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Stanislav Kinsbursky <skinsbursky@parallels.com>
To: "Myklebust, Trond" <Trond.Myklebust@netapp.com>
Cc: "Schumaker, Bryan" <Bryan.Schumaker@netapp.com>,
	"linux-nfs@vger.kernel.org" <linux-nfs@vger.kernel.org>,
	Pavel Emelianov <xemul@parallels.com>,
	"neilb@suse.de" <neilb@suse.de>,
	"netdev@vger.kernel.org" <netdev@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	"bfields@fieldses.org" <bfields@fieldses.org>,
	"davem@davemloft.net" <davem@davemloft.net>
Subject: Re: [PATCH v4 1/8] SUNRPC: introduce helpers for reference counted rpcbind clients
Date: Tue, 20 Sep 2011 21:26:45 +0400	[thread overview]
Message-ID: <4E78CCD5.9080704@parallels.com> (raw)
In-Reply-To: <2E1EB2CF9ED1CB4AA966F0EB76EAB4430B47FE1E@SACMVEXC2-PRD.hq.netapp.com>

20.09.2011 21:13, Myklebust, Trond пишет:
>> -----Original Message-----
>> From: Stanislav Kinsbursky [mailto:skinsbursky@parallels.com]
>> Sent: Tuesday, September 20, 2011 12:21 PM
>> To: Myklebust, Trond
>> Cc: Schumaker, Bryan; linux-nfs@vger.kernel.org; Pavel Emelianov;
>> neilb@suse.de; netdev@vger.kernel.org; linux-kernel@vger.kernel.org;
>> bfields@fieldses.org; davem@davemloft.net
>> Subject: Re: [PATCH v4 1/8] SUNRPC: introduce helpers for reference
>> counted rpcbind clients
>>
>> 20.09.2011 18:38, Myklebust, Trond пишет:
>>>> -----Original Message-----
>>>> From: Stanislav Kinsbursky [mailto:skinsbursky@parallels.com]
>>>> Sent: Tuesday, September 20, 2011 10:35 AM
>>>> To: Myklebust, Trond
>>>> Cc: Schumaker, Bryan; linux-nfs@vger.kernel.org; Pavel Emelianov;
>>>> neilb@suse.de; netdev@vger.kernel.org; linux-kernel@vger.kernel.org;
>>>> bfields@fieldses.org; davem@davemloft.net
>>>> Subject: Re: [PATCH v4 1/8] SUNRPC: introduce helpers for reference
>>>> counted rpcbind clients
>>>>
>>>> 20.09.2011 18:14, Myklebust, Trond пишет:
>>>>
>>>>>>>
>>>>>>> Doesn't it  need to be protected by rpcb_clnt_lock too?
>>>>>>>
>>>>>>
>>>>>> Nope from my pow. It's protected by rpcb_create_local_mutex. I.e.
>>>>>> no one will change rpcb_users since it's zero. If it's non zero -
>>>>>> we willn't get to rpcb_set_local().
>>>>>
>>>>> OK, so you are saying that the rpcb_users++ below could be replaced
>>>>> by
>>>> rpcb_users=1?
>>>>>
>>>>
>>>> Yes, you right.
>>>>
>>>>> In that case, don't you need a smp_wmb() between the setting of
>>>> rpcb_local_clnt/4 and the setting of rpcb_users? Otherwise, how do
>>>> you guarantee that rpcb_users != 0 implies rpbc_local_clnt/4 != NULL?
>>>>>
>>>>
>>>> We check rpcb_users under spinlock. Gain spinlock forces memory
>>>> barrier, doesn't it?
>>>
>>> Yes, and so you don't need an smp_rmb() on the reader side. However,
>> you still need to ensure that the processor which _sets_ the rpcb_users and
>> rpcb_local_clnt/4 actually writes them in the correct order.
>>>
>>
>> Trond, I've thought again and realized, that even if these writes (rpcb_users
>> and rpbc_local_clnt/4) will be done in reversed order, then no barrier
>> required here.
>> Because if we have another process trying to create those clients (it can't use
>> them since it's not started yet) on other CPU, than it's waiting on creation
>> mutex. When it will gain the mutex, we will have required memory barrier
>> for us.
>>
>> Or I missed something in your explanation?
>
> You need to ensure that if someone calls rpcb_get_local() and gets a positive result, then they can rely on rpcb_local_clnt/4 being non-zero. Without the write barrier, that is not the case.
>

In current context we can be sure, that between rpcb_get_local() and first 
dereference of rpcb_local_clnt/4 we have at least one spinlock 
(svc_xprt_class_lock in svc_create_xprt).
But I understand, that we can't relay on it since this code can be changed in 
future.
So I'll add barrier there.

> Without that guarantee, you can't really ensure that rpcb_put_local() will work as expected either, since it will be possible to trigger the --rpcb_users == 0 case without shutting down rpcb_local_clnt/4 (because clnt/clnt4 == 0).
>

Yes, you right. But it doesn't mean, that we require barrier here, because we 
don't need this garantee you are talking about.
We can be sure, that we always see right rpcb_users value. It means that, if we 
set this value to zero, then no other running services left and no references to 
those clients can occur.
And even if we have another process which is going to create new service right 
now on another CPU, then this process will see that no rpcbind users present and 
will create new clients and assign them to global variables prior to any use of 
this clients can occur.
And this assign will be done with barrier as we agreed earlier.

> Cheers
>    Trond
>


-- 
Best regards,
Stanislav Kinsbursky

  reply	other threads:[~2011-09-20 17:27 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-09-20 10:13 [PATCH v4 0/8] SUNRPC: make rpcbind clients allocated and destroyed dynamically Stanislav Kinsbursky
2011-09-20 10:13 ` [PATCH v4 1/8] SUNRPC: introduce helpers for reference counted rpcbind clients Stanislav Kinsbursky
2011-09-20 13:05   ` Bryan Schumaker
2011-09-20 13:15     ` Myklebust, Trond
2011-09-20 13:34       ` Stanislav Kinsbursky
2011-09-20 14:14         ` Myklebust, Trond
2011-09-20 14:35           ` Stanislav Kinsbursky
2011-09-20 14:38             ` Myklebust, Trond
2011-09-20 15:03               ` Stanislav Kinsbursky
2011-09-20 16:20               ` Stanislav Kinsbursky
2011-09-20 17:13                 ` Myklebust, Trond
2011-09-20 17:26                   ` Stanislav Kinsbursky [this message]
2011-09-20 13:49   ` [PATCH v5 " Stanislav Kinsbursky
2011-09-20 14:24     ` Jeff Layton
2011-09-20 14:41       ` Myklebust, Trond
2011-09-20 15:58         ` Stanislav Kinsbursky
2011-09-20 14:43       ` Stanislav Kinsbursky
2011-09-20 14:58         ` Bryan Schumaker
2011-09-20 15:38           ` Stanislav Kinsbursky
2011-09-20 16:06             ` Bryan Schumaker
2011-09-20 15:11         ` Jeff Layton
2011-09-20 16:20           ` Stanislav Kinsbursky
2011-09-21  9:07     ` [PATCH v6 " Stanislav Kinsbursky
2011-09-23 14:41       ` Stanislav Kinsbursky
2011-09-23 17:26         ` Myklebust, Trond
2011-09-20 10:13 ` [PATCH v4 2/8] SUNRPC: use rpcbind reference counting helpers Stanislav Kinsbursky
2011-09-20 10:13 ` [PATCH v4 3/8] SUNRPC: introduce svc helpers for prepairing rpcbind infrastructure Stanislav Kinsbursky
2011-09-20 10:14 ` [PATCH v4 4/8] SUNRPC: setup rpcbind clients if service requires it Stanislav Kinsbursky
2011-09-20 11:22   ` Jeff Layton
2011-09-20 10:14 ` [PATCH v4 5/8] SUNRPC: cleanup service destruction Stanislav Kinsbursky
2011-09-20 10:14 ` [PATCH v4 6/8] NFSd: call svc rpcbind cleanup explicitly Stanislav Kinsbursky
2011-09-20 10:14 ` [PATCH v4 7/8] SUNRPC: remove rpcbind clients creation during service registering Stanislav Kinsbursky
2011-09-20 10:14 ` [PATCH v4 8/8] SUNRPC: remove rpcbind clients destruction on module cleanup Stanislav Kinsbursky
2011-09-20 11:24 ` [PATCH v4 0/8] SUNRPC: make rpcbind clients allocated and destroyed dynamically Jeff Layton

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=4E78CCD5.9080704@parallels.com \
    --to=skinsbursky@parallels.com \
    --cc=Bryan.Schumaker@netapp.com \
    --cc=Trond.Myklebust@netapp.com \
    --cc=bfields@fieldses.org \
    --cc=davem@davemloft.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-nfs@vger.kernel.org \
    --cc=neilb@suse.de \
    --cc=netdev@vger.kernel.org \
    --cc=xemul@parallels.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).