On Wed, 2024-02-07 at 14:58 -0500, Olga Kornievskaia wrote: > On Wed, Feb 7, 2024 at 2:51 PM Olga Kornievskaia > <olga.kornievskaia@xxxxxxxxx> wrote: > > > > On Wed, Feb 7, 2024 at 2:12 PM Trond Myklebust > > <trondmy@xxxxxxxxxxxxxxx> wrote: > > > > > > On Wed, 2024-02-07 at 13:29 -0500, Olga Kornievskaia wrote: > > > > From: Olga Kornievskaia <kolga@xxxxxxxxxx> > > > > > > > > Currently, if the server returns a partial layout, the client > > > > gets > > > > stuck asking for a layout indefinitely. Until we add support > > > > for > > > > partial layouts, treat partial layout as layout unavailable > > > > error. > > > > > > > > Signed-off-by: Olga Kornievskaia <kolga@xxxxxxxxxx> > > > > --- > > > > fs/nfs/nfs4proc.c | 6 ++++++ > > > > 1 file changed, 6 insertions(+) > > > > > > > > diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c > > > > index dae4c1b6cc1c..108bc7f3e8c2 100644 > > > > --- a/fs/nfs/nfs4proc.c > > > > +++ b/fs/nfs/nfs4proc.c > > > > @@ -9790,6 +9790,12 @@ nfs4_proc_layoutget(struct > > > > nfs4_layoutget > > > > *lgp, > > > > if (status != 0) > > > > goto out; > > > > > > > > + /* Since client does not support partial pnfs layout, > > > > then > > > > treat > > > > + * getting a partial layout as LAYOUTUNAVAILABLE error > > > > + */ > > > > + if (lgp->args.range.length != lgp->res.range.length) > > > > + task->tk_status = -NFS4ERR_LAYOUTUNAVAILABLE; > > > > > > > > > I think this case is better handled by allowing the caller to set > > > lgp- > > > > args.minlength to an appropriate minimum value. > > > > I do not understand what this suggestion means. What I can think of > > is > > that the caller would set an appropriate minimum value and the code > > here would check that the result is at least as large? > > A follow up question on a "minimum value". It seems that since the > client would then need to set it to the same value as the "length" > (ie > whole file layout value), yes? So it shifts the responsibility to the > server, disallowing it from returning a partial layout. > > > If so, can you explain why that's more desirable? Seems to me it'd > > be > > more lines for something that would be removed later? > What I'm saying is that the protocol expects the client to send the minimal acceptable layout length as a separate argument from the desired length. Right now, we set the minimal length in pnfs_alloc_init_layoutget_args() to be the smaller of PAGE_SIZE or the length of the I/O segment. The expectation is that all the pnfs drivers should be able to handle that. If you're telling me that there are drivers that do not handle being given a layout with the minimal length that is set in pnfs_alloc_init_layoutget_args(), then we should give them control over that value. > > > > > > > + > > > > if (task->tk_status < 0) { > > > > exception->retry = 1; > > > > status = nfs4_layoutget_handle_exception(task, > > > > lgp, > > > > exception); > > > > > > -- Trond Myklebust Linux NFS client maintainer, Hammerspace trond.myklebust@xxxxxxxxxxxxxxx