Skip to content

Commit bd3b04b

Browse files
author
Trond Myklebust
committed
NFSv4: Handle NFS4ERR_NOTSUPP errors for directory delegations
The error NFS4ERR_NOTSUPP will be returned for operations that are legal, but not supported by the server. Fixes: 156b094 ("NFS: Request a directory delegation on ACCESS, CREATE, and UNLINK") Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
1 parent 0b873de commit bd3b04b

1 file changed

Lines changed: 17 additions & 8 deletions

File tree

fs/nfs/nfs4proc.c

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4533,12 +4533,17 @@ static int _nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
45334533
status = nfs4_do_call_sync(server->client, server, &msg,
45344534
&args.seq_args, &res.seq_res, task_flags);
45354535
if (args.get_dir_deleg) {
4536-
if (status == -EOPNOTSUPP) {
4536+
switch (status) {
4537+
case 0:
4538+
if (gdd_res.status != GDD4_OK)
4539+
break;
4540+
status = nfs_inode_set_delegation(
4541+
inode, current_cred(), FMODE_READ,
4542+
&gdd_res.deleg, 0, NFS4_OPEN_DELEGATE_READ);
4543+
break;
4544+
case -ENOTSUPP:
4545+
case -EOPNOTSUPP:
45374546
server->caps &= ~NFS_CAP_DIR_DELEG;
4538-
} else if (status == 0 && gdd_res.status == GDD4_OK) {
4539-
status = nfs_inode_set_delegation(inode, current_cred(),
4540-
FMODE_READ, &gdd_res.deleg,
4541-
0, NFS4_OPEN_DELEGATE_READ);
45424547
}
45434548
}
45444549
return status;
@@ -4554,10 +4559,14 @@ int nfs4_proc_getattr(struct nfs_server *server, struct nfs_fh *fhandle,
45544559
do {
45554560
err = _nfs4_proc_getattr(server, fhandle, fattr, inode);
45564561
trace_nfs4_getattr(server, fhandle, fattr, err);
4557-
if (err == -EOPNOTSUPP)
4558-
exception.retry = true;
4559-
else
4562+
switch (err) {
4563+
default:
45604564
err = nfs4_handle_exception(server, err, &exception);
4565+
break;
4566+
case -ENOTSUPP:
4567+
case -EOPNOTSUPP:
4568+
exception.retry = true;
4569+
}
45614570
} while (exception.retry);
45624571
return err;
45634572
}

0 commit comments

Comments
 (0)