pNFS/flexfiles: delete deviceid, don't mark inactive
authorWeston Andros Adamson <dros@primarydata.com>
Wed, 14 Dec 2016 21:31:55 +0000 (16:31 -0500)
committerTrond Myklebust <trond.myklebust@primarydata.com>
Mon, 19 Dec 2016 22:29:45 +0000 (17:29 -0500)
Instead of marking a device inactive, remove it from the cache entirely.

Flexfiles has a way to report errors back to the server, so we don't want
to stop devices from being tried again for 120 seconds.

Signed-off-by: Weston Andros Adamson <dros@primarydata.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
fs/nfs/flexfilelayout/flexfilelayout.c
fs/nfs/flexfilelayout/flexfilelayoutdev.c

index 9e111d07f66747b200051955d9c21997187d4002..45962fe5098c6ff9e87a1a23158409841ad02033 100644 (file)
@@ -1126,7 +1126,8 @@ static int ff_layout_async_handle_error_v4(struct rpc_task *task,
        case -EPIPE:
                dprintk("%s DS connection error %d\n", __func__,
                        task->tk_status);
-               nfs4_mark_deviceid_unavailable(devid);
+               nfs4_delete_deviceid(devid->ld, devid->nfs_client,
+                               &devid->deviceid);
                rpc_wake_up(&tbl->slot_tbl_waitq);
                /* fall through */
        default:
@@ -1175,7 +1176,8 @@ static int ff_layout_async_handle_error_v3(struct rpc_task *task,
        default:
                dprintk("%s DS connection error %d\n", __func__,
                        task->tk_status);
-               nfs4_mark_deviceid_unavailable(devid);
+               nfs4_delete_deviceid(devid->ld, devid->nfs_client,
+                               &devid->deviceid);
        }
        /* FIXME: Need to prevent infinite looping here. */
        return -NFS4ERR_RESET_TO_PNFS;
index 3cc39d1c1206512b4b58b189f7bd39be20a4611a..e5a6f248697b369003e89ed526608d7cd2a296eb 100644 (file)
@@ -177,7 +177,7 @@ out_err:
 static void ff_layout_mark_devid_invalid(struct pnfs_layout_segment *lseg,
                struct nfs4_deviceid_node *devid)
 {
-       nfs4_mark_deviceid_unavailable(devid);
+       nfs4_delete_deviceid(devid->ld, devid->nfs_client, &devid->deviceid);
        if (!ff_layout_has_available_ds(lseg))
                pnfs_error_mark_layout_for_return(lseg->pls_layout->plh_inode,
                                lseg);