Hi Olga, On 06/23/2017 10:26 AM, Olga Kornievskaia wrote: > Commit fabbbee0eb0f "PNFS fix fallback to MDS if got error on > commit to DS" moved the pnfs_set_lo_fail() to unhandled errors > which was not correct and lead to a kernel oops on umount. > > Instead, fix the original EACCESS on commit to DS error by > getting the new layout and re-doing the IO. > > Fixes: fabbbee0eb0f ("PNFS fix fallback to MDS if got error on commit to DS") > Signed-off-by: Olga Kornievskaia <kolga@xxxxxxxxxx> > --- > fs/nfs/filelayout/filelayout.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c > index 61dcb4b..8075efe 100644 > --- a/fs/nfs/filelayout/filelayout.c > +++ b/fs/nfs/filelayout/filelayout.c > @@ -153,6 +153,7 @@ static int filelayout_async_handle_error(struct rpc_task *task, > case -NFS4ERR_RETRY_UNCACHED_REP: > break; > /* Invalidate Layout errors */ > + case -NFS4ERR_ACCESS: Should this be -EACCES instead? The fields right below this are using mapped errors based on the nfs_errtbl in nfs4xdr.c, so NFS4ERR_ACCESS might not ever get passed to this function. Thanks, Anna > case -NFS4ERR_PNFS_NO_LAYOUT: > case -ESTALE: /* mapped NFS4ERR_STALE */ > case -EBADHANDLE: /* mapped NFS4ERR_BADHANDLE */ > @@ -183,10 +184,10 @@ static int filelayout_async_handle_error(struct rpc_task *task, > task->tk_status); > nfs4_mark_deviceid_unavailable(devid); > pnfs_error_mark_layout_for_return(inode, lseg); > + pnfs_set_lo_fail(lseg); > rpc_wake_up(&tbl->slot_tbl_waitq); > /* fall through */ > default: > - pnfs_set_lo_fail(lseg); > reset: > dprintk("%s Retry through MDS. Error %d\n", __func__, > task->tk_status); > -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html