pNFS/flexfiles: Report RDMA connection errors to the server
authorTrond Myklebust <trond.myklebust@hammerspace.com>
Wed, 18 May 2022 20:09:06 +0000 (16:09 -0400)
committerTrond Myklebust <trond.myklebust@hammerspace.com>
Sun, 10 Jul 2022 23:00:53 +0000 (19:00 -0400)
The RPC/RDMA driver will return -EPROTO and -ENODEV as connection errors
under certain circumstances. Make sure that we handle them and report
them to the server. If not, we can end up cycling forever in a
LAYOUTGET/LAYOUTRETURN loop.

Fixes: a12f996d3413 ("NFSv4/pNFS: Use connections to a DS that are all of the same protocol family")
Cc: stable@vger.kernel.org # 5.11.x
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
fs/nfs/flexfilelayout/flexfilelayout.c

index 604be40..7d28556 100644 (file)
@@ -1131,6 +1131,8 @@ static int ff_layout_async_handle_error_v4(struct rpc_task *task,
        case -EIO:
        case -ETIMEDOUT:
        case -EPIPE:
+       case -EPROTO:
+       case -ENODEV:
                dprintk("%s DS connection error %d\n", __func__,
                        task->tk_status);
                nfs4_delete_deviceid(devid->ld, devid->nfs_client,
@@ -1236,6 +1238,8 @@ static void ff_layout_io_track_ds_error(struct pnfs_layout_segment *lseg,
                case -ENOBUFS:
                case -EPIPE:
                case -EPERM:
+               case -EPROTO:
+               case -ENODEV:
                        *op_status = status = NFS4ERR_NXIO;
                        break;
                case -EACCES: