Re: [PATCH 1/1] NFSv4.1/pnfs: error gracefully on partial pnfs layout
From: Trond Myklebust <hidden>
Date: 2024-02-07 20:22:58
On Wed, 2024-02-07 at 14:58 -0500, Olga Kornievskaia wrote:
On Wed, Feb 7, 2024 at 2:51 PM Olga Kornievskaia [off-list ref] wrote:quoted
On Wed, Feb 7, 2024 at 2:12 PM Trond Myklebust [off-list ref] wrote:quoted
On Wed, 2024-02-07 at 13:29 -0500, Olga Kornievskaia wrote:quoted
From: Olga Kornievskaia <redacted> 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 <redacted> --- 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(structnfs4_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-quoted
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.quoted
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.
quoted
quoted
quoted
+ 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@hammerspace.com