LKML Archive on lore.kernel.org help / color / mirror / Atom feed
From: Jeff Layton <jlayton@redhat.com> To: Neil Brown <neilb@suse.de> Cc: akpm@linux-foundation.org, linux-nfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 6/6] NLM: Add reference counting to lockd Date: Thu, 10 Jan 2008 06:58:14 -0500 [thread overview] Message-ID: <20080110065814.036be5e6@tleilax.poochiereds.net> (raw) In-Reply-To: <18309.37138.207880.305870@notabene.brown> On Thu, 10 Jan 2008 14:29:22 +1100 Neil Brown <neilb@suse.de> wrote: > On Tuesday January 8, jlayton@redhat.com wrote: > > ...and only have lockd exit when the last reference is dropped. > > > > The problem is this: > > > > When a lock that a client is blocking on comes free, lockd does > > this in nlmsvc_grant_blocked(): > > > > nlm_async_call(block->b_call, NLMPROC_GRANTED_MSG, > > &nlmsvc_grant_ops); > > > > the callback from this call is nlmsvc_grant_callback(). That > > function does this at the end to wake up lockd: > > > > svc_wake_up(block->b_daemon); > > Uhmmm... Maybe there is an easier way. > > block->b_daemon will always be nlmsvc_serv, so can we simply make this > > svc_wake_up(nlmsvc_serv); > with a little locking to make sure nlmsvc_serv is valid? > That's very close to my original patch to fix this problem. I just replaced svc_wake_up with a call to a new function that wakes up any lockd that happens to be up. I'm not sure that my original patch was careful enough with the locking though... > Actually svc_wake_up is only called from lockd and goes through > various hoops to find the right rqstp, which we could have known in > advance. > So store the rqstp in some global wrapped in a spinlock so we can > access it safely and just: > > spin_lock(whatever) > if (nlmsvc_rqstp) > wake_up(&nlmsvc_rqstp->rq_wait) > spin_unlock(whatever) > > > That seems a somewhat simpler way of avoiding the particular problem. > Yes. Much. > > Hmmm.... I guess that nlmsvc_grant_callback could then be run after > the 'lockd' module had been unloaded. > Maybe nlm_shutdown_hosts could call rpc_killall_tasks(host->h_rpcclnt) > on each host. That should ensure the callback wont happen afterwards. > > Maybe? > I think so. If we let lockd go down before all the RPC's are done, then the whole problem of accessing lockd data from them sounds like it could be a problem. If not now, then future changes could cause it. IIRC, The reason we don't get nlm_destroy_host done on each nlm_host in this situation is because the h_count is too high. Doing rpc_killall_tasks in this situation might fix that, but the logic in all of this is pretty convoluted. I'll see if I can cook up a new patchset that does this instead. -- Jeff Layton <jlayton@redhat.com>
next prev parent reply other threads:[~2008-01-10 11:58 UTC|newest] Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top 2008-01-08 19:33 [PATCH 0/6] Intro: convert lockd to kthread and fix use-after-free (try #6) Jeff Layton 2008-01-08 19:33 ` [PATCH 1/6] SUNRPC: spin svc_rqst initialization to its own function Jeff Layton 2008-01-08 19:33 ` [PATCH 2/6] SUNRPC: export svc_sock_update_bufs Jeff Layton 2008-01-08 19:33 ` [PATCH 3/6] NLM: Initialize completion variable in lockd_up Jeff Layton 2008-01-08 19:33 ` [PATCH 4/6] NLM: Have lockd call try_to_freeze Jeff Layton 2008-01-08 19:33 ` [PATCH 5/6] NLM: Convert lockd to use kthreads Jeff Layton 2008-01-08 19:33 ` [PATCH 6/6] NLM: Add reference counting to lockd Jeff Layton 2008-01-09 17:47 ` Christoph Hellwig 2008-01-09 18:36 ` Jeff Layton 2008-01-09 18:48 ` Christoph Hellwig 2008-01-09 18:59 ` Jeff Layton 2008-01-10 3:29 ` Neil Brown 2008-01-10 11:58 ` Jeff Layton [this message] 2008-01-09 17:45 ` [PATCH 5/6] NLM: Convert lockd to use kthreads Christoph Hellwig 2008-01-09 18:08 ` Jeff Layton 2008-01-09 17:35 ` [PATCH 3/6] NLM: Initialize completion variable in lockd_up Christoph Hellwig 2008-01-09 18:05 ` Jeff Layton 2008-01-09 18:14 ` Christoph Hellwig 2008-01-13 13:27 ` Jeff Layton 2008-01-13 18:17 ` Christoph Hellwig 2008-01-13 19:12 ` J. Bruce Fields 2008-01-14 14:24 ` Jeff Layton 2008-01-14 14:25 ` Christoph Hellwig 2008-03-15 3:44 ` Mike Snitzer 2008-03-15 6:34 ` Christoph Hellwig -- strict thread matches above, loose matches on Subject: below -- 2008-01-05 12:02 [PATCH 0/6] Intro: convert lockd to kthread and fix use-after-free (try #5) Jeff Layton 2008-01-05 12:02 ` [PATCH 1/6] SUNRPC: spin svc_rqst initialization to its own function Jeff Layton 2008-01-05 12:02 ` [PATCH 2/6] SUNRPC: export svc_sock_update_bufs Jeff Layton 2008-01-05 12:02 ` [PATCH 3/6] NLM: Initialize completion variable in lockd_up Jeff Layton 2008-01-05 12:02 ` [PATCH 4/6] NLM: Have lockd call try_to_freeze Jeff Layton 2008-01-05 12:02 ` [PATCH 5/6] NLM: Convert lockd to use kthreads Jeff Layton 2008-01-05 12:02 ` [PATCH 6/6] NLM: Add reference counting to lockd Jeff Layton 2008-01-08 6:46 ` Neil Brown 2008-01-08 13:26 ` Jeff Layton 2008-01-08 15:52 ` Wendy Cheng 2008-01-08 16:13 ` Jeff Layton 2008-01-08 16:13 ` Peter Staubach 2007-12-13 20:40 [PATCH 0/6] Intro: convert lockd to kthread and fix use-after-free Jeff Layton 2007-12-13 20:40 ` [PATCH 1/6] SUNRPC: Allow svc_pool_map_set_cpumask to work with any task Jeff Layton 2007-12-13 20:40 ` [PATCH 2/6] SUNRPC: Break up __svc_create_thread and make svc_create_kthread Jeff Layton 2007-12-13 20:40 ` [PATCH 3/6] NLM: Initialize completion variable in lockd_up Jeff Layton 2007-12-13 20:40 ` [PATCH 4/6] NLM: Have lockd call try_to_freeze Jeff Layton 2007-12-13 20:40 ` [PATCH 5/6] NLM: Convert lockd to use kthreads Jeff Layton 2007-12-13 20:40 ` [PATCH 6/6] NLM: Add reference counting to lockd 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=20080110065814.036be5e6@tleilax.poochiereds.net \ --to=jlayton@redhat.com \ --cc=akpm@linux-foundation.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-nfs@vger.kernel.org \ --cc=neilb@suse.de \ /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: linkBe 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).