* [PATCH] NFSv4.1: nfs4_opendata_check_deleg needs to handle NFS4_OPEN_CLAIM_DELEG_CUR_FH
@ 2015-10-02 15:47 Trond Myklebust
2015-10-02 15:57 ` kbuild test robot
0 siblings, 1 reply; 3+ messages in thread
From: Trond Myklebust @ 2015-10-02 15:47 UTC (permalink / raw)
To: linux-nfs
We need to warn against broken NFSv4.1 servers that try to hand out
delegations in response to NFS4_OPEN_CLAIM_DELEG_CUR_FH.
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
---
fs/nfs/nfs4proc.c | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index f93b9cdb4934..56b0958b940f 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -1458,12 +1458,16 @@ nfs4_opendata_check_deleg(struct nfs4_opendata *data, struct nfs4_state *state)
if (delegation)
delegation_flags = delegation->flags;
rcu_read_unlock();
- if (data->o_arg.claim == NFS4_OPEN_CLAIM_DELEGATE_CUR) {
+ switch (data->o_arg.claim) {
+ case NFS4_OPEN_CLAIM_DELEGATE_CUR:
+ case NFS4_OPEN_CLAIM_DELEG_CUR_FH:
pr_err_ratelimited("NFS: Broken NFSv4 server %s is "
"returning a delegation for "
"OPEN(CLAIM_DELEGATE_CUR)\n",
clp->cl_hostname);
- } else if ((delegation_flags & 1UL<<NFS_DELEGATION_NEED_RECLAIM) == 0)
+ return;
+ }
+ if ((delegation_flags & 1UL<<NFS_DELEGATION_NEED_RECLAIM) == 0)
nfs_inode_set_delegation(state->inode,
data->owner->so_cred,
&data->o_res);
--
2.4.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] NFSv4.1: nfs4_opendata_check_deleg needs to handle NFS4_OPEN_CLAIM_DELEG_CUR_FH
2015-10-02 15:47 [PATCH] NFSv4.1: nfs4_opendata_check_deleg needs to handle NFS4_OPEN_CLAIM_DELEG_CUR_FH Trond Myklebust
@ 2015-10-02 15:57 ` kbuild test robot
2015-10-02 16:39 ` [PATCH v2] " Trond Myklebust
0 siblings, 1 reply; 3+ messages in thread
From: kbuild test robot @ 2015-10-02 15:57 UTC (permalink / raw)
To: Trond Myklebust; +Cc: kbuild-all, linux-nfs
[-- Attachment #1: Type: text/plain, Size: 2206 bytes --]
Hi Trond,
[auto build test results on v4.3-rc3 -- if it's inappropriate base, please ignore]
config: m68k-sun3_defconfig (attached as .config)
reproduce:
wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
make.cross ARCH=m68k
All warnings (new ones prefixed by >>):
fs/nfs/nfs4proc.c: In function 'nfs4_opendata_check_deleg':
>> fs/nfs/nfs4proc.c:1461:2: warning: enumeration value 'NFS4_OPEN_CLAIM_NULL' not handled in switch [-Wswitch]
switch (data->o_arg.claim) {
^
>> fs/nfs/nfs4proc.c:1461:2: warning: enumeration value 'NFS4_OPEN_CLAIM_PREVIOUS' not handled in switch [-Wswitch]
>> fs/nfs/nfs4proc.c:1461:2: warning: enumeration value 'NFS4_OPEN_CLAIM_DELEGATE_PREV' not handled in switch [-Wswitch]
>> fs/nfs/nfs4proc.c:1461:2: warning: enumeration value 'NFS4_OPEN_CLAIM_FH' not handled in switch [-Wswitch]
>> fs/nfs/nfs4proc.c:1461:2: warning: enumeration value 'NFS4_OPEN_CLAIM_DELEG_PREV_FH' not handled in switch [-Wswitch]
vim +/NFS4_OPEN_CLAIM_NULL +1461 fs/nfs/nfs4proc.c
1445 atomic_inc(&state->count);
1446 return state;
1447 }
1448
1449 static void
1450 nfs4_opendata_check_deleg(struct nfs4_opendata *data, struct nfs4_state *state)
1451 {
1452 struct nfs_client *clp = NFS_SERVER(state->inode)->nfs_client;
1453 struct nfs_delegation *delegation;
1454 int delegation_flags = 0;
1455
1456 rcu_read_lock();
1457 delegation = rcu_dereference(NFS_I(state->inode)->delegation);
1458 if (delegation)
1459 delegation_flags = delegation->flags;
1460 rcu_read_unlock();
> 1461 switch (data->o_arg.claim) {
1462 case NFS4_OPEN_CLAIM_DELEGATE_CUR:
1463 case NFS4_OPEN_CLAIM_DELEG_CUR_FH:
1464 pr_err_ratelimited("NFS: Broken NFSv4 server %s is "
1465 "returning a delegation for "
1466 "OPEN(CLAIM_DELEGATE_CUR)\n",
1467 clp->cl_hostname);
1468 return;
1469 }
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
[-- Attachment #2: .config.gz --]
[-- Type: application/octet-stream, Size: 10998 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* [PATCH v2] NFSv4.1: nfs4_opendata_check_deleg needs to handle NFS4_OPEN_CLAIM_DELEG_CUR_FH
2015-10-02 15:57 ` kbuild test robot
@ 2015-10-02 16:39 ` Trond Myklebust
0 siblings, 0 replies; 3+ messages in thread
From: Trond Myklebust @ 2015-10-02 16:39 UTC (permalink / raw)
To: linux-nfs
We need to warn against broken NFSv4.1 servers that try to hand out
delegations in response to NFS4_OPEN_CLAIM_DELEG_CUR_FH.
Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
---
fs/nfs/nfs4proc.c | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index f93b9cdb4934..12e9808d5df0 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -1458,12 +1458,18 @@ nfs4_opendata_check_deleg(struct nfs4_opendata *data, struct nfs4_state *state)
if (delegation)
delegation_flags = delegation->flags;
rcu_read_unlock();
- if (data->o_arg.claim == NFS4_OPEN_CLAIM_DELEGATE_CUR) {
+ switch (data->o_arg.claim) {
+ default:
+ break;
+ case NFS4_OPEN_CLAIM_DELEGATE_CUR:
+ case NFS4_OPEN_CLAIM_DELEG_CUR_FH:
pr_err_ratelimited("NFS: Broken NFSv4 server %s is "
"returning a delegation for "
"OPEN(CLAIM_DELEGATE_CUR)\n",
clp->cl_hostname);
- } else if ((delegation_flags & 1UL<<NFS_DELEGATION_NEED_RECLAIM) == 0)
+ return;
+ }
+ if ((delegation_flags & 1UL<<NFS_DELEGATION_NEED_RECLAIM) == 0)
nfs_inode_set_delegation(state->inode,
data->owner->so_cred,
&data->o_res);
--
2.4.3
^ permalink raw reply related [flat|nested] 3+ messages in thread
end of thread, other threads:[~2015-10-02 16:39 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-02 15:47 [PATCH] NFSv4.1: nfs4_opendata_check_deleg needs to handle NFS4_OPEN_CLAIM_DELEG_CUR_FH Trond Myklebust
2015-10-02 15:57 ` kbuild test robot
2015-10-02 16:39 ` [PATCH v2] " Trond Myklebust
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).