Linux NFS development
 help / color / mirror / Atom feed
From: Jeff Layton <jlayton@poochiereds.net>
To: Christian Robottom Reis <kiko@acm.org>
Cc: NFS List <linux-nfs@vger.kernel.org>
Subject: Re: Finding and breaking client locks
Date: Mon, 21 Mar 2016 17:27:35 -0400	[thread overview]
Message-ID: <20160321172735.7936f1f0@tlielax.poochiereds.net> (raw)
In-Reply-To: <20160321205637.GB5118@async.com.br>

On Mon, 21 Mar 2016 17:56:38 -0300
Christian Robottom Reis <kiko@acm.org> wrote:

> On Mon, Mar 21, 2016 at 02:55:00PM -0300, Christian Robottom Reis wrote:
> > > Alternately, there is the /proc/fs/nfsd/unlock_ip interface. Supposedly
> > > you can echo an address into there and it'll forcibly drop all of the
> > > locks that that that client holds. I've not used that so YMMV there.  
> > 
> > Oh! That's a very interesting, and I now see it documented here:
> > 
> >     http://people.redhat.com/rpeterso/Patches/NFS/NLM/004.txt  
> 
> On second look, I don't think that interface is meant to take a client
> IP, but rather a server IP:
> 
>   "They are intended to allow admin or user mode script to release NLM
>    locks based on either a path name or a server in-bound ip address[...]"
> 
> That's why echoing the client IP makes no difference.
> 
> I'm surprised -- so far I've found no facility for lock management
> server-side other than restarting the server.

Ahh that's exactly right -- my bad. I had forgotten that the idea there
was to use that for clustering.

And you're also correct that there is currently no facility for
administratively revoking locks. That's something that would be a nice
to have, if someone wanted to propose a sane interface and mechanism
for it. Solaris had such a thing, IIRC, but I don't know how it was
implemented.

There is one other option too -- you can send a SIGKILL to the lockd
kernel thread and it will drop _all_ of its locks. That sort of sucks
for all of the other clients, but it can unwedge things without
restarting NFS.

That said, your earlier email said:

> In the situation which happened today my guess (because it's a mbox
> file) is that a client ran something like mutt and the machine died
> somewhere during shutdown. It's my guess because AIUI the lock doesn't
> get stuck if the process is simply KILLed or crashes.

What should happen there is that the client notify the server when it
comes back up, so it can release its locks. That can fail to occur for
all sorts of reasons, and that leads exactly to the problem you have
now. It's also possible for the client to just drop off the net
indefinitely while holding locks in which case you're just out of luck.

It really is better to use NFSv4 if you can at all get away with it.
Lease-based locking puts the onus on the client to stay in contact with
the server if it wants to maintain its state.

-- 
Jeff Layton <jlayton@poochiereds.net>

  reply	other threads:[~2016-03-21 21:27 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-21 14:39 Finding and breaking client locks Christian Robottom Reis
2016-03-21 17:19 ` Jeff Layton
2016-03-21 17:55   ` Christian Robottom Reis
2016-03-21 20:56     ` Christian Robottom Reis
2016-03-21 21:27       ` Jeff Layton [this message]
2016-03-22  0:09         ` Christian Robottom Reis
2016-03-22  0:30           ` J. Bruce Fields
2016-03-31  5:11         ` NeilBrown
2016-03-31 20:52           ` Frank Filz
2016-03-22  0:58 ` Christian Robottom Reis
2016-03-31  5:07   ` NeilBrown
2016-03-31 13:34     ` Trond Myklebust
2016-03-31 22:40       ` NeilBrown

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=20160321172735.7936f1f0@tlielax.poochiereds.net \
    --to=jlayton@poochiereds.net \
    --cc=kiko@acm.org \
    --cc=linux-nfs@vger.kernel.org \
    /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