NFS41: map NFS4ERR_LAYOUTUNAVAILABLE to ENODATA

Instead of mapping it to EIO that is a fatal error and
fails application. We'll go inband after getting
NFS4ERR_LAYOUTUNAVAILABLE.

Signed-off-by: Peng Tao <tao.peng@primarydata.com>
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
Peng Tao 2015-12-05 17:01:01 +08:00 committed by Trond Myklebust
parent d6c843b96e
commit 7c1e6e58e2
1 changed files with 9 additions and 0 deletions

View File

@ -7795,6 +7795,15 @@ static void nfs4_layoutget_done(struct rpc_task *task, void *calldata)
switch (task->tk_status) { switch (task->tk_status) {
case 0: case 0:
goto out; goto out;
/*
* NFS4ERR_LAYOUTUNAVAILABLE means we are not supposed to use pnfs
* on the file. set tk_status to -ENODATA to tell upper layer to
* retry go inband.
*/
case -NFS4ERR_LAYOUTUNAVAILABLE:
task->tk_status = -ENODATA;
goto out;
/* /*
* NFS4ERR_BADLAYOUT means the MDS cannot return a layout of * NFS4ERR_BADLAYOUT means the MDS cannot return a layout of
* length lgp->args.minlength != 0 (see RFC5661 section 18.43.3). * length lgp->args.minlength != 0 (see RFC5661 section 18.43.3).