Re: NFSv4.1 session reset needs to update ->rsize and ->wsize - how???

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Sep 4, 2018 at 8:04 PM NeilBrown <neilb@xxxxxxxx> wrote:
>
> On Tue, Sep 04 2018, Trond Myklebust wrote:
>
> > On Wed, 2018-09-05 at 08:47 +1000, NeilBrown wrote:
> >> With NFSv4.1, the server specifies max_rqst_sz and max_resp_sz in the
> >> reply to CREATE session.
> >>
> >> If the client finds it needs to call nfs4_reset_session(), it might
> >> get
> >> smaller sizes back, so any pending read/writes would need to be
> >> resized.
> >>
> >> However, I cannot see how the retry handling for reads/writes has any
> >> chance to change the size.  It looks like a request is broken up to
> >> match the original ->rsize and ->wsize, then those individual IO
> >> requests can be retried, but the higher level request is never
> >> re-evaluated in light of a new size.
> >>
> >> Am I missing something, or is this not supported at present?
> >> If it isn't supported, any suggestions on how best to handle a
> >> reduction of the rsize/wsize ??
> >>
> >
> > Why would a sane server want to do this?
>
> Why would a sane protocol support it? :-)
>
> I have a network trace of SLE11-SP4 (3.0 based) talking to "a NetApp
> appliance".
> It sends a 64K write and gets NFS4ERR_REQ_TOO_BIG.
> It then closes the file (getting NFS4ERR_SEQ_MISORDERED even though it
> used a seq number 1 more than the WRITE request), and then
> DESTROY_SESSION and CREATE_SESSION.
> The CREATE_SESSION gets "max req size" of 33812 and "max resp size" of
> 33672.
> It then opens the file again and retries the 64K write....
>
> I have a separate trace showing the initial mount where the sizes are 71680
> and 81920.
>
> I don't have a trace where it stops working, but reportedly writes work
> smoothly for some hours after a mount, but then suddenly stop working.
>
> The CREATE_SESSION *call* requests I see have the small (32K) sizes, but
> presumably they are the result of a previous CREATE_SESSION reply giving
> a small value.
>
> I just had a thought.
> If one session is shared by two "struct nfs_server" with different
> ->rsize or ->wsize, then the session might get set up with the smaller
> size, and the mount using the larger size will get confused.
> In 3.0 (and even 3.10) nfs4_init_session() limits the requested session
> parameters to ->rsize and ->wsize.
> That changed in 18aad3d552c7.
>
> Maybe I just need to remove that code from nfs4_init_session().
> I'll give it a try.
>

Neil, does the code have this commit?

commit 033853325fe3bdc70819a8b97915bd3bca41d3af
Author: Olga Kornievskaia <kolga@xxxxxxxxxx>
Date:   Wed Mar 8 14:39:15 2017 -0500

    NFSv4.1 respect server's max size in CREATE_SESSION

    Currently client doesn't respect max sizes server returns in CREATE_SESSION.
    nfs4_session_set_rwsize() gets called and server->rsize, server->wsize are 0
    so they never get set to the sizes returned by the server.

    Signed-off-by: Olga Kornievskaia <kolga@xxxxxxxxxx>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@xxxxxxxxxx>

> Thanks,
> NeilBrown



[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux