linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Rick Macklem <rmacklem@uoguelph.ca>
To: Chuck Lever III <chuck.lever@oracle.com>,
	Trond Myklebust <trondmy@hammerspace.com>
Cc: Linux NFS Mailing List <linux-nfs@vger.kernel.org>
Subject: Re: knfsd server returns writeverf of all 0 bits (but was not rebooted)
Date: Mon, 13 Dec 2021 22:04:51 +0000	[thread overview]
Message-ID: <YQXPR0101MB096857EEACF04A6DF1FC6D9BDD749@YQXPR0101MB0968.CANPRD01.PROD.OUTLOOK.COM> (raw)
In-Reply-To: <CC76C3FE-1F85-412D-BD3E-13662E7721DA@oracle.com>

Chuck Lever III wrote:
>> On Dec 13, 2021, at 2:54 PM, Trond Myklebust <trondmy@hammerspace.com> wrote:
>>
>> On Mon, 2021-12-13 at 19:42 +0000, Chuck Lever III wrote:
>>> Hi Rick-
>>>
>>>> On Dec 9, 2021, at 6:15 PM, Rick Macklem <rmacklem@uoguelph.ca>
>>>> wrote:
>>>>
>>>> Hi,
>>>>
>>>> When testing against the knfsd in a Linux 5.15.1 kernel, I received
>>>> a
>>>> write reply with FILE_SYNC and a writeverf of all 0 bytes.
>>>> (Previous write verifiers were not all 0 bytes.)
>>>>
>>>> The server seemed to be functioning normally and had not rebooted.
>>>>
>>>> Is this intended behaviour?
>>>>
>>>> Normally I would not expect the writeverf in a Write operation
>>>> reply
>>>> to change unless the server had rebooted, but I can see there might
>>>> be circumstances where the knfsd server wants all non-FILE_SYNC
>>>> writes to be redone by the client and would choose to change the
>>>> writeverf.
>>>> However, changing it to all 0 bytes seems particularly odd?
>>>
>>> I don't immediately see a code path for WRITE or COMMIT that would
>>> set the verifier to zeroes. When Linux NFSD resets its write
>>> verifier,
>>> it sets it to the current time.
>>>
>>> Do you have a reproducer you can share?
>>>
>>
>> Rick is using FILE_SYNC, whereas nfsd_vfs_write() only actually sets
>> the boot verifier if the write is unstable or DATA_SYNC.
>
>It wasn't clear from Rick's note that the verifier change he
>observed was not permanent.
>
>So then the answer to "Is this intended behavior?" is "Yes,
>Linux NFSD returns an all-zero verifier for FILE_SYNC writes,
>since the client does not use the verifier in this case. The
>boot verifier for subsequent non-FILE_SYNC writes is not
>altered."
Yes, that is what I observed.

The good news is that the FreeBSD client can easily ignore
the writeverf reply for FILESYNC writes (ones where the
write request specifies FILESYNC and the reply is expected
to be FILESYNC). I have already patched the client for this case.

Although I agree that a write reply that is FILESYNC does not
need to be redone, no matter what happens to writeverf, I
do not see anything in RFC8881 that suggests it should be
ignored in this case or that the value of all 0 bytes is special.

My interpretation of RFC8881 is that the writeverf is global
for the server and any change would indicate all writes that
did not reply FILESYNC and have not been committed, must
be redone.
--> There is the weird case w.r.t. File Layout pNFS when
      "commit through MDS" is indicated, where the writeverf
      appears to be "per file" and not "per server". And I'll admit
      I don't really understand this, despite having read it.

Does this need to be discussed on nfsv4@ietf.org?

In any case, the FreeBSD client never does FILESYNC writes
by default and is now fixed to ignore the writeverf reply in
this case.

And what about the case where the client does a write
with UNSTABLE, but the server chooses to reply FILESYNC?
--> Is the writeverf ever going to be zero for that case?

Thanks, rick


--
Chuck Lever





      reply	other threads:[~2021-12-13 22:04 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-09 23:15 knfsd server returns writeverf of all 0 bits (but was not rebooted) Rick Macklem
2021-12-13 19:42 ` Chuck Lever III
2021-12-13 19:54   ` Trond Myklebust
2021-12-13 20:06     ` Chuck Lever III
2021-12-13 22:04       ` Rick Macklem [this message]

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=YQXPR0101MB096857EEACF04A6DF1FC6D9BDD749@YQXPR0101MB0968.CANPRD01.PROD.OUTLOOK.COM \
    --to=rmacklem@uoguelph.ca \
    --cc=chuck.lever@oracle.com \
    --cc=linux-nfs@vger.kernel.org \
    --cc=trondmy@hammerspace.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).