Thread (7 messages) 7 messages, 2 authors, 2024-02-07

Re: [PATCH 1/1] NFSv4.1/pnfs: error gracefully on partial pnfs layout

From: Olga Kornievskaia <hidden>
Date: 2024-02-07 19:51:20

On Wed, Feb 7, 2024 at 2:12 PM Trond Myklebust [off-list ref] wrote:
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(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-
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?

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?
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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help