mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 23:22:31 +02:00
NFSv4: retry GETATTR if GET_DIR_DELEGATION failed
Currently, getting a directory delegation is opportinistic and gets
added to an existing GETATTR that's trying to retrieve some needed
attributes. However, GET_DIRDELEGATION can fail and that currently
causes a GETATTR to fail and an error is propagated to the user.
Instead, the original GETATTR should be retried without requesting
a directory delegation. Also, now chosing to clear asking for
the direct delegation for this specific inode.
Fixes: 156b094829 ("NFS: Request a directory delegation on ACCESS, CREATE, and UNLINK")
Signed-off-by: Olga Kornievskaia <okorniev@redhat.com>
Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
parent
4fa7ab8d29
commit
515af10044
|
|
@ -4469,6 +4469,13 @@ static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
|||
case -ENOTSUPP:
|
||||
case -EOPNOTSUPP:
|
||||
server->caps &= ~NFS_CAP_DIR_DELEG;
|
||||
break;
|
||||
case -NFS4ERR_INVAL:
|
||||
case -NFS4ERR_IO:
|
||||
case -NFS4ERR_DIRDELEG_UNAVAIL:
|
||||
case -NFS4ERR_NOTDIR:
|
||||
clear_bit(NFS_INO_REQ_DIR_DELEG, &(NFS_I(inode)->flags));
|
||||
status = -EAGAIN;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -4490,6 +4497,7 @@ int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
|
|||
default:
|
||||
err = nfs4_handle_exception(server, err, &exception);
|
||||
break;
|
||||
case -EAGAIN:
|
||||
case -ENOTSUPP:
|
||||
case -EOPNOTSUPP:
|
||||
exception.retry = true;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user