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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 17 Aug 2022 12:22:45 +0000 (14:22 +0200)
commit 7836d75467e9d214bdf5c693b32721de729a6e38 upstream.

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>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/nfs/flexfilelayout/flexfilelayout.c

index d383de00d4868fc569c7a9435868d8a7a26d6a7e..ceef75b4d2494928aa57b61d930264d323aa9aa7 100644 (file)
@@ -1140,6 +1140,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,
@@ -1245,6 +1247,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: