linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Gefei Li <gefeili.2013@gmail.com>
To: "J. Bruce Fields" <bfields@fieldses.org>
Cc: linux-nfs@vger.kernel.org
Subject: Re: linux NFS client lock file cannot get a expected response
Date: Tue, 19 Feb 2019 10:09:25 +0800	[thread overview]
Message-ID: <CANidX5RjDwJ=yN=aG_D+pQ4fzJ-gXrdqbmwin9eOkyerCU6QRA@mail.gmail.com> (raw)
In-Reply-To: <20190218202146.GB5879@fieldses.org>

Thanks a lot for your reply! I tried to capture and analyse the
network packets with wireshark and find that a NFS4ERR_LOCKED(10012)
replied in my experiment 2.2(open with O_SYNC and write) Write
response. Does this mean that my NFS server uses mandatory locking?

But something unexpected is that an EAGAIN(Resource temporarily
unavailable) returned in user space, I think an EACCES/EIO is better
for locked situations, what's your idea about this?

>> You're checking the file content on the server somehow?
I close my lock program in my first shell, and check from both
server-side(use notepad to view the file) and client-side(cat/vim to
view the file), the file content remained unchanged.

Best Regards,
Gefei

On Tue, Feb 19, 2019 at 4:22 AM J. Bruce Fields <bfields@fieldses.org> wrote:
>
> On Mon, Feb 18, 2019 at 05:11:47PM +0800, Gefei Li wrote:
> > I am recently testing linux nfs lock with NFS share from a WinServer
> > 2016. I tried to write a file which has already been locked with fcntl
> > exclusively, but the response of `write` syscall is neither
> > `Permission denied`, nor successfully written with file content
> > changed. Here is several experiments I did:
> >
> > The first shell runs c program, calling `fcntl` to lock file
> > exclusively “fcntl(fd, F_SETLKW, &fl)”
> >
> > 2.1 The second shell tried to open with flag O_RDWR, and write a
> > buffer to the same file, write returned the correct bytes written, but
> > the file content remained unchanged.
>
> You're checking the file content on the server somehow?
>
> The client's caching the write--it returns success to the application
> and then sends the actual write to the server later.  Anything else will
> hurt performance of a lot of applications.
>
> > 2.2 The second shell tried to open with flag O_RDWR|O_SYNC, write the
> > same buffer to the same file, write operation returned EAGAIN
> > 2.3 The same operation on ext4 file system gives me a expected
> > behavior the same as advisory lock expressed, successfully written
> > with file content changed.
> >
> > I reviewed NFS 4.1 protocol(RFC 5661 page 185), the nfs server can
> > determine whether byte range lock can be either mandatory or advisory,
> > but I think 2.1 and 2.2 gives me some unexpected behavior as these
> > two.. What’s your idea about this? Can you give me some tips to work
> > this out?
>
> There's also section 10.3.3, but I never understood how that was really
> supposed to work.  It recommends the client turn off caching when
> mandatory locking is in effect--but the only way it gives the client
> that mandatory locking is in effect is by seeing an ERR_LOCKED reply to
> a READ or WRITE, and by that point it's too late.
>
> Anyway, as far as I can tell the results you report are what's expected.
>
> --b.
>
> > Looking forward for your reply. Thanks in advance!
> >
> > BTW, my linux kernel version is 4.15.0, linux release: ubuntu 16.04
> > from Azure marketplace, my nfs-common version is
> > "nfs-common/xenial-updates,now 1:1.2.8-9ubuntu12.1 amd64" from ubuntu
> > apt repo.
> >
> > Thanks,
> > Gefei

  reply	other threads:[~2019-02-19  2:09 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-02-18  9:11 linux NFS client lock file cannot get a expected response Gefei Li
2019-02-18 20:21 ` J. Bruce Fields
2019-02-19  2:09   ` Gefei Li [this message]
2019-02-19 15:38     ` J. Bruce Fields

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='CANidX5RjDwJ=yN=aG_D+pQ4fzJ-gXrdqbmwin9eOkyerCU6QRA@mail.gmail.com' \
    --to=gefeili.2013@gmail.com \
    --cc=bfields@fieldses.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;
as well as URLs for NNTP newsgroup(s).