* [PATCH 0/21] nfsd41-for-2.6.30 review cleanup
@ 2009-04-02 22:33 Benny Halevy
2009-04-02 22:37 ` [PATCH 01/21] SQUASHME: nfsd41: conditionally decode_sequence in nfs4_xdr_dec_cb_recall Benny Halevy
` (21 more replies)
0 siblings, 22 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:33 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: pNFS Mailing List, NFS list, Andy Adamson
Bruce,
The following patches fix non-DRC review comments.
They are untested yet, but I wanted to send them out ASAP
so that people will have some time to comment on them before I
squash them in.
[PATCH 01/21] SQUASHME: nfsd41: conditionally decode_sequence in nfs4_xdr_dec_cb_recall
[PATCH 02/21] nfsd41: control nfsv4.1 svc via /proc/fs/nfsd/versions
[PATCH 03/21] SQUASHME: nfsd41: disable support for minorversion by default
[PATCH 04/21] SQUASHME: nfs41: reverse EXCHGID4_INVAL_FLAG_MASK_{A,R}
[PATCH 05/21] SQUASHME: nfsd41: reverse use of EXCHGID4_INVAL_FLAG_MASK_A
[PATCH 06/21] SQUASHME: nfsd41: simplify match_clientid_establishment logic
[PATCH 07/21] SQUASHME: simplify nfsd4_encode_sequence error handling
[PATCH 08/21] SQUASHME: simplify nfsd4_encode_create_session error handling
[PATCH 09/21] SQUASHME: simplify nfsd4_encode_exchange_id error handling
[PATCH 10/21] SQUASHME: nfsd41: document unenforced nfs41 compound ordering rules.
[PATCH 11/21] SQUASHME: nfsd41: embed an xdr_netobj in nfsd4_exchange_id
[PATCH 12/21] SQUASHME: nfsd41: return nfserr_serverfault for spa_how == SP4_MACH_CRED
[PATCH 13/21] SQUASHME: nfsd41: fix comment style in init_forechannel_attrs
[PATCH 14/21] SQUASHME: nfsd41: allocate struct nfsd4_session and slot table in one piece
[PATCH 15/21] SQUASHME: nfsd41: no need to INIT_LIST_HEAD in alloc_init_session just prior to list_add
[PATCH 16/21] SQUASHME: nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1
[PATCH 17/21] nfsd: pass nfsd4_compound_state* to nfs4_preprocess_{state,seq}id_op
[PATCH 18/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op
[PATCH 19/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op
[PATCH 20/21] SQUASHME: Revert "nfsd41: Add Kconfig symbols for NFSv4.1"
[PATCH 21/21] SQUASHME: get rid of CONFIG_NFSD_V4_1
The review comments that were fixed are listed below.
Benny
================================================================================
Re: [pnfs] [PATCH 0/47] NFSv4.1 Sessions server code for 2.6.30
fix nfs4_xdr_dec_cb_recall rpc_res==NULL case
[PATCH 01/21] SQUASHME: nfsd41: conditionally decode_sequence in nfs4_xdr_dec_cb_recall
================================================================================
Re: [PATCH v2 04/47] nfs41: common protocol definitions
> Would it be less confusing just to use !EXCHGID_FLAG_MASK_A and
> !EXCHGID_FLAG_MASK_R everywhere?
[PATCH 04/21] SQUASHME: nfs41: reverse EXCHGID4_INVAL_FLAG_MASK_{A,R}
[PATCH 05/21] SQUASHME: nfsd41: reverse use of EXCHGID4_INVAL_FLAG_MASK_A
================================================================================
Re: [PATCH v2 06/47] nfsd41: Add Kconfig symbols for NFSv4.1
> Stupid question: do we need CONFIG_NFSD_V4_1 at all? How many people
> > will want to build a kernel with v4.0 but not v4.1?
> (And: do we have an interface that allows turning off 4.1 at run-time?
> > > That's more important than the config option.)
[PATCH 02/21] nfsd41: control nfsv4.1 svc via /proc/fs/nfsd/versions
[PATCH 20/21] SQUASHME: Revert "nfsd41: Add Kconfig symbols for NFSv4.1"
[PATCH 21/21] SQUASHME: get rid of CONFIG_NFSD_V4_1
================================================================================
Re: [PATCH v2 07/47] nfsd41: define nfs41 error codes
fix NFSERR_REPLAY_ME on rebase
Fixed in rebase
================================================================================
RE: [pnfs] [PATCH v2 15/47] nfsd41: exchange_id operation
> Would it simplify things just to embed an xdr_netobj in
> nfsd4_exchange_id?
[PATCH 11/21] SQUASHME: nfsd41: embed an xdr_netobj in nfsd4_exchange_id
================================================================================
RE: [pnfs] [PATCH v2 15/47] nfsd41: exchange_id operation (cont.)
>> + /* Currently only support SP4_NONE */
>> >> + if (exid->spa_how != SP4_NONE)
>> >> + return nfserr_encr_alg_unsupp;
> >
> > Isn't support for the others mandatory? Let's just make this
> > serverfault, in that case--this is a bug in the server. It'll be a
> > reminder that we need to fix this....
True. nfserr_encr_alg_unsupp is valid only for ssp_encr_algs.
Andy, I believe you're the author of this. OK with you to return
nfserr_serverfault instead?
[PATCH 12/21] SQUASHME: nfsd41: return nfserr_serverfault for spa_how == SP4_MACH_CRED
================================================================================
Re: [pnfs] [PATCH v2 16/47] nfsd41: match clientid establishment method
simplify match_clientid_establishment, bool use_exchange_id
[PATCH 06/21] SQUASHME: nfsd41: simplify match_clientid_establishment logic
================================================================================
Re: [PATCH v2 17/47] nfsd41: sequence operation
nfsd4_encode_sequence
> + if (nfserr)
> > + goto out;
Just 'return nfserr'. I don't see the point of the goto if it's
literally just replacing a return.
[PATCH 07/21] SQUASHME: simplify nfsd4_encode_sequence error handling
[PATCH 08/21] SQUASHME: simplify nfsd4_encode_create_session error handling
[PATCH 09/21] SQUASHME: simplify nfsd4_encode_exchange_id error handling
================================================================================
Re: [pnfs] [PATCH v2 18/47] nfsd41: enforce NFS4ERR_SEQUENCE_POS operation order rules
update Doc and wiki TODO about need to enforce rules for EXCHANGE_ID as
last op and NFS4ERR_NOT_ONLY_OP.
[PATCH 10/21] SQUASHME: nfsd41: document unenforced nfs41 compound ordering rules.
================================================================================
Re: [PATCH v2 23/47] nfsd41: create_session operation
fixup style comments.
[PATCH 13/21] SQUASHME: nfsd41: fix comment style in init_forechannel_attrs
fix alloc_init_session
[PATCH 14/21] SQUASHME: nfsd41: allocate struct nfsd4_session and slot table in one piece
[PATCH 15/21] SQUASHME: nfsd41: no need to INIT_LIST_HEAD in alloc_init_session just prior to list_add
================================================================================
Re: [PATCH v2 27/47] nfsd41: stateid handling
> + status = nfsd4_process_open1(rqstp, open);
Seems all your using is the cstate--maybe pass that instead?
[PATCH 16/21] SQUASHME: nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1
================================================================================
Re: [PATCH v2 27/47] nfsd41: stateid handling (cont.)
> + if (nfsd4_has_session(cstate))
> > + flags |= HAS_SESSION;
> > nfs4_lock_state();
> > /* check stateid */
> > if ((status = nfs4_preprocess_stateid_op(&cstate->current_fh,
You could pass the cstate to preprocess_stateid_op instead of
current_fh, and let it do the nfsd4_has_session check instead of making
all the callers do it.
[PATCH 17/21] nfsd: pass nfsd4_compound_state* to nfs4_preprocess_{state,seq}id_op
[PATCH 18/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op
[PATCH 19/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op
^ permalink raw reply [flat|nested] 25+ messages in thread
* [PATCH 01/21] SQUASHME: nfsd41: conditionally decode_sequence in nfs4_xdr_dec_cb_recall
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
@ 2009-04-02 22:37 ` Benny Halevy
2009-04-02 22:37 ` [PATCH 02/21] nfsd41: control nfsv4.1 svc via /proc/fs/nfsd/versions Benny Halevy
` (20 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:37 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
squash into "nfsd41: cb_recall callback"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4callback.c | 8 +++++---
1 files changed, 5 insertions(+), 3 deletions(-)
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index 02e0a61..10c6a80 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -441,9 +441,11 @@ nfs4_xdr_dec_cb_recall(struct rpc_rqst *rqstp, __be32 *p,
status = decode_cb_compound_hdr(&xdr, &hdr);
if (status)
goto out;
- status = decode_cb_sequence(&xdr, rpc_res->res_seq, rqstp);
- if (status)
- goto out;
+ if (rpc_res && rpc_res->res_seq) {
+ status = decode_cb_sequence(&xdr, rpc_res->res_seq, rqstp);
+ if (status)
+ goto out;
+ }
status = decode_cb_op_hdr(&xdr, OP_CB_RECALL);
out:
return status;
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 02/21] nfsd41: control nfsv4.1 svc via /proc/fs/nfsd/versions
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
2009-04-02 22:37 ` [PATCH 01/21] SQUASHME: nfsd41: conditionally decode_sequence in nfs4_xdr_dec_cb_recall Benny Halevy
@ 2009-04-02 22:37 ` Benny Halevy
2009-04-02 22:37 ` [PATCH 03/21] SQUASHME: nfsd41: disable support for minorversion by default Benny Halevy
` (19 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:37 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
This will allow us to get rid of CONFIG_NFSD_V4_1
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4proc.c | 2 +-
fs/nfsd/nfsctl.c | 26 +++++++++++++++++++++++---
fs/nfsd/nfssvc.c | 24 ++++++++++++++++++++++++
include/linux/nfsd/nfsd.h | 2 ++
4 files changed, 50 insertions(+), 4 deletions(-)
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index a393d38..7619970 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -943,7 +943,7 @@ nfsd4_proc_compound(struct svc_rqst *rqstp,
* According to RFC3010, this takes precedence over all other errors.
*/
status = nfserr_minor_vers_mismatch;
- if (args->minorversion > NFSD_SUPPORTED_MINOR_VERSION)
+ if (args->minorversion > nfsd_supported_minorversion)
goto out;
if (!nfs41_op_ordering_ok(args)) {
diff --git a/fs/nfsd/nfsctl.c b/fs/nfsd/nfsctl.c
index 4adebb6..a9b8c75 100644
--- a/fs/nfsd/nfsctl.c
+++ b/fs/nfsd/nfsctl.c
@@ -792,8 +792,9 @@ out_free:
static ssize_t __write_versions(struct file *file, char *buf, size_t size)
{
char *mesg = buf;
- char *vers, sign;
+ char *vers, *minorp, sign;
int len, num;
+ unsigned minor;
ssize_t tlen = 0;
char *sep;
@@ -814,9 +815,20 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
do {
sign = *vers;
if (sign == '+' || sign == '-')
- num = simple_strtol((vers+1), NULL, 0);
+ num = simple_strtol((vers+1), &minorp, 0);
else
- num = simple_strtol(vers, NULL, 0);
+ num = simple_strtol(vers, &minorp, 0);
+ if (*minorp == '.') {
+ if (num < 4)
+ return -EINVAL;
+ minor = simple_strtoul(minorp+1, NULL, 0);
+ if (minor == 0)
+ return -EINVAL;
+ if (nfsd_minorversion(minor, sign == '-' ?
+ NFSD_CLEAR : NFSD_SET) < 0)
+ return -EINVAL;
+ goto next;
+ }
switch(num) {
case 2:
case 3:
@@ -826,6 +838,7 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
default:
return -EINVAL;
}
+ next:
vers += len + 1;
tlen += len;
} while ((len = qword_get(&mesg, vers, size)) > 0);
@@ -844,6 +857,13 @@ static ssize_t __write_versions(struct file *file, char *buf, size_t size)
num);
sep = " ";
}
+ if (nfsd_vers(4, NFSD_AVAIL))
+ for (minor = 1; minor <= NFSD_SUPPORTED_MINOR_VERSION; minor++)
+ len += sprintf(buf+len, " %c4.%u",
+ (nfsd_vers(4, NFSD_TEST) &&
+ nfsd_minorversion(minor, NFSD_TEST)) ?
+ '+' : '-',
+ minor);
len += sprintf(buf+len, "\n");
return len;
}
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
index ab60320..097dc55 100644
--- a/fs/nfsd/nfssvc.c
+++ b/fs/nfsd/nfssvc.c
@@ -121,6 +121,8 @@ struct svc_program nfsd_program = {
};
+u32 nfsd_supported_minorversion = NFSD_SUPPORTED_MINOR_VERSION;
+
int nfsd_vers(int vers, enum vers_op change)
{
if (vers < NFSD_MINVERS || vers >= NFSD_NRVERS)
@@ -147,6 +149,28 @@ int nfsd_vers(int vers, enum vers_op change)
}
return 0;
}
+
+int nfsd_minorversion(u32 minorversion, enum vers_op change)
+{
+ if (minorversion > NFSD_SUPPORTED_MINOR_VERSION)
+ return -1;
+ switch(change) {
+ case NFSD_SET:
+ nfsd_supported_minorversion = minorversion;
+ break;
+ case NFSD_CLEAR:
+ if (minorversion == 0)
+ return -1;
+ nfsd_supported_minorversion = minorversion - 1;
+ break;
+ case NFSD_TEST:
+ return minorversion <= nfsd_supported_minorversion;
+ case NFSD_AVAIL:
+ return minorversion <= NFSD_SUPPORTED_MINOR_VERSION;
+ }
+ return 0;
+}
+
/*
* Maximum number of nfsd processes
*/
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h
index b9e6682..27b9cf5 100644
--- a/include/linux/nfsd/nfsd.h
+++ b/include/linux/nfsd/nfsd.h
@@ -57,6 +57,7 @@ typedef int (*nfsd_dirop_t)(struct inode *, struct dentry *, int, int);
extern struct svc_program nfsd_program;
extern struct svc_version nfsd_version2, nfsd_version3,
nfsd_version4;
+extern u32 nfsd_supported_minorversion;
extern struct mutex nfsd_mutex;
extern struct svc_serv *nfsd_serv;
@@ -153,6 +154,7 @@ int nfsd_set_posix_acl(struct svc_fh *, int, struct posix_acl *);
enum vers_op {NFSD_SET, NFSD_CLEAR, NFSD_TEST, NFSD_AVAIL };
int nfsd_vers(int vers, enum vers_op change);
+int nfsd_minorversion(u32 minorversion, enum vers_op change);
void nfsd_reset_versions(void);
int nfsd_create_serv(void);
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 03/21] SQUASHME: nfsd41: disable support for minorversion by default
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
2009-04-02 22:37 ` [PATCH 01/21] SQUASHME: nfsd41: conditionally decode_sequence in nfs4_xdr_dec_cb_recall Benny Halevy
2009-04-02 22:37 ` [PATCH 02/21] nfsd41: control nfsv4.1 svc via /proc/fs/nfsd/versions Benny Halevy
@ 2009-04-02 22:37 ` Benny Halevy
2009-04-02 22:37 ` [PATCH 04/21] SQUASHME: nfs41: reverse EXCHGID4_INVAL_FLAG_MASK_{A,R} Benny Halevy
` (18 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:37 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
Use user mode nfs-utils (rpc.nfsd option) to enable.
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfssvc.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
index 097dc55..1f26d9f 100644
--- a/fs/nfsd/nfssvc.c
+++ b/fs/nfsd/nfssvc.c
@@ -121,7 +121,7 @@ struct svc_program nfsd_program = {
};
-u32 nfsd_supported_minorversion = NFSD_SUPPORTED_MINOR_VERSION;
+u32 nfsd_supported_minorversion;
int nfsd_vers(int vers, enum vers_op change)
{
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 04/21] SQUASHME: nfs41: reverse EXCHGID4_INVAL_FLAG_MASK_{A,R}
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (2 preceding siblings ...)
2009-04-02 22:37 ` [PATCH 03/21] SQUASHME: nfsd41: disable support for minorversion by default Benny Halevy
@ 2009-04-02 22:37 ` Benny Halevy
2009-04-02 22:37 ` [PATCH 05/21] SQUASHME: nfsd41: reverse use of EXCHGID4_INVAL_FLAG_MASK_A Benny Halevy
` (17 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:37 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
As per Bruce's review comment.
squash into "nfs41: common protocol definitions"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
include/linux/nfs4.h | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/include/linux/nfs4.h b/include/linux/nfs4.h
index 5756359..e3f0cbc 100644
--- a/include/linux/nfs4.h
+++ b/include/linux/nfs4.h
@@ -115,8 +115,8 @@
* they're set in the argument or response, have separate
* invalid flag masks for arg (_A) and resp (_R).
*/
-#define EXCHGID4_INVAL_FLAG_MASK_A 0xBFF8FFFC
-#define EXCHGID4_INVAL_FLAG_MASK_R 0x7FF8FFFC
+#define EXCHGID4_FLAG_MASK_A 0x40070003
+#define EXCHGID4_FLAG_MASK_R 0x80070003
#define SEQ4_STATUS_CB_PATH_DOWN 0x00000001
#define SEQ4_STATUS_CB_GSS_CONTEXTS_EXPIRING 0x00000002
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 05/21] SQUASHME: nfsd41: reverse use of EXCHGID4_INVAL_FLAG_MASK_A
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (3 preceding siblings ...)
2009-04-02 22:37 ` [PATCH 04/21] SQUASHME: nfs41: reverse EXCHGID4_INVAL_FLAG_MASK_{A,R} Benny Halevy
@ 2009-04-02 22:37 ` Benny Halevy
2009-04-02 22:37 ` [PATCH 06/21] SQUASHME: nfsd41: simplify match_clientid_establishment logic Benny Halevy
` (16 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:37 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
As per Bruce's review comment.
squash into "nfsd41: exchange_id operation"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4state.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index b7c4ed0..445cf94 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -1222,7 +1222,7 @@ nfsd4_exchange_id(struct svc_rqst *rqstp,
__func__, rqstp, exid, clname.len, clname.data,
ip_addr, exid->flags, exid->spa_how);
- if (!check_name(clname) || (exid->flags & EXCHGID4_INVAL_FLAG_MASK_A))
+ if (!check_name(clname) || (exid->flags & ~EXCHGID4_FLAG_MASK_A))
return nfserr_inval;
/* Currently only support SP4_NONE */
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 06/21] SQUASHME: nfsd41: simplify match_clientid_establishment logic
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (4 preceding siblings ...)
2009-04-02 22:37 ` [PATCH 05/21] SQUASHME: nfsd41: reverse use of EXCHGID4_INVAL_FLAG_MASK_A Benny Halevy
@ 2009-04-02 22:37 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 07/21] SQUASHME: simplify nfsd4_encode_sequence error handling Benny Halevy
` (15 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:37 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
As per Bruce's review comment.
squash into "nfsd41: match clientid establishment method"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4state.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 445cf94..6ae12ff 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -876,12 +876,17 @@ find_unconfirmed_client(clientid_t *clid)
* Return 1 iff clp's clientid establishment method matches the use_exchange_id
* parameter. Matching is based on the fact the at least one of the
* EXCHGID4_FLAG_USE_{NON_PNFS,PNFS_MDS,PNFS_DS} flags must be set for v4.1
+ *
+ * FIXME: we need to unify the clientid namespaces for nfsv4.x
+ * and correctly deal with client upgrade/downgrade in EXCHANGE_ID
+ * and SET_CLIENTID{,_CONFIRM}
*/
static inline int
match_clientid_establishment(struct nfs4_client *clp, bool use_exchange_id)
{
#if defined(CONFIG_NFSD_V4_1)
- return (clp->cl_exchange_flags != 0) == (use_exchange_id != false);
+ bool has_exchange_flags = (clp->cl_exchange_flags != 0);
+ return use_exchange_id == has_exchange_flags;
#else /* CONFIG_NFSD_V4_1 */
return 1;
#endif /* CONFIG_NFSD_V4_1 */
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 07/21] SQUASHME: simplify nfsd4_encode_sequence error handling
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (5 preceding siblings ...)
2009-04-02 22:37 ` [PATCH 06/21] SQUASHME: nfsd41: simplify match_clientid_establishment logic Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 08/21] SQUASHME: simplify nfsd4_encode_create_session " Benny Halevy
` (14 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
As per Bruce's review comment.
squash into "nfsd41: sequence operation"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4xdr.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 0084459..e2213cd 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -3069,7 +3069,7 @@ nfsd4_encode_sequence(struct nfsd4_compoundres *resp, int nfserr,
ENCODE_HEAD;
if (nfserr)
- goto out;
+ return nfserr;
RESERVE_SPACE(NFS4_MAX_SESSIONID_LEN + 20);
WRITEMEM(seq->sessionid.data, NFS4_MAX_SESSIONID_LEN);
@@ -3085,8 +3085,7 @@ nfsd4_encode_sequence(struct nfsd4_compoundres *resp, int nfserr,
WRITE32(0);
ADJUST_ARGS();
-out:
- return nfserr;
+ return 0;
}
#endif /* CONFIG_NFSD_V4_1 */
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 08/21] SQUASHME: simplify nfsd4_encode_create_session error handling
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (6 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 07/21] SQUASHME: simplify nfsd4_encode_sequence error handling Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 09/21] SQUASHME: simplify nfsd4_encode_exchange_id " Benny Halevy
` (13 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
As per Bruce's review comment.
squash into "nfsd41: create_session operation"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4xdr.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index e2213cd..9462876 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -3012,7 +3012,7 @@ nfsd4_encode_create_session(struct nfsd4_compoundres *resp, int nfserr,
ENCODE_HEAD;
if (nfserr)
- goto out;
+ return nfserr;
RESERVE_SPACE(24);
WRITEMEM(sess->sessionid.data, NFS4_MAX_SESSIONID_LEN);
@@ -3051,8 +3051,7 @@ nfsd4_encode_create_session(struct nfsd4_compoundres *resp, int nfserr,
WRITE32(sess->back_channel.rdma_attrs);
ADJUST_ARGS();
}
-out:
- return nfserr;
+ return 0;
}
static __be32
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 09/21] SQUASHME: simplify nfsd4_encode_exchange_id error handling
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (7 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 08/21] SQUASHME: simplify nfsd4_encode_create_session " Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 10/21] SQUASHME: nfsd41: document unenforced nfs41 compound ordering rules Benny Halevy
` (12 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
As per Bruce's review comment.
squash into "nfsd41: exchange_id operation"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4xdr.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 9462876..527fadb 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -2961,7 +2961,7 @@ nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, int nfserr,
uint64_t minor_id = 0;
if (nfserr)
- goto out;
+ return nfserr;
major_id = utsname()->nodename;
major_id_sz = strlen(major_id);
@@ -3001,8 +3001,7 @@ nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, int nfserr,
/* Implementation id */
WRITE32(0); /* zero length nfs_impl_id4 array */
ADJUST_ARGS();
-out:
- return nfserr;
+ return 0;
}
static __be32
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 10/21] SQUASHME: nfsd41: document unenforced nfs41 compound ordering rules.
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (8 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 09/21] SQUASHME: simplify nfsd4_encode_exchange_id " Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 11/21] SQUASHME: nfsd41: embed an xdr_netobj in nfsd4_exchange_id Benny Halevy
` (11 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
Documentation/filesystems/nfs41-server.txt | 7 +++++++
fs/nfsd/nfs4proc.c | 7 +++++++
2 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/Documentation/filesystems/nfs41-server.txt b/Documentation/filesystems/nfs41-server.txt
index e62cd13..8124a67 100644
--- a/Documentation/filesystems/nfs41-server.txt
+++ b/Documentation/filesystems/nfs41-server.txt
@@ -146,3 +146,10 @@ CREATE_SESSION:
SEQUENCE:
* no support for dynamic slot table renegotiation (optional)
+
+nfsv4.1 COMPOUND rules:
+The following cases aren't supported yet:
+* Enforcing of NFS4ERR_NOT_ONLY_OP for: BIND_CONN_TO_SESSION, CREATE_SESSION,
+ DESTROY_CLIENTID, DESTROY_SESSION, EXCHANGE_ID.
+* DESTROY_SESSION MUST be the final operation in the COMPOUND request.
+
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index 7619970..b0d5b10 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -895,6 +895,13 @@ nfsd4_enc_no_page_replay(struct nfsd4_compoundargs *args,
return op->status;
}
+/*
+ * Enforce NFSv4.1 COMPOUND ordering rules.
+ *
+ * TODO:
+ * - enforce NFS4ERR_NOT_ONLY_OP,
+ * - DESTROY_SESSION MUST be the final operation in the COMPOUND request.
+ */
static bool nfs41_op_ordering_ok(struct nfsd4_compoundargs *args)
{
#if defined(CONFIG_NFSD_V4_1)
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 11/21] SQUASHME: nfsd41: embed an xdr_netobj in nfsd4_exchange_id
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (9 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 10/21] SQUASHME: nfsd41: document unenforced nfs41 compound ordering rules Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 12/21] SQUASHME: nfsd41: return nfserr_serverfault for spa_how == SP4_MACH_CRED Benny Halevy
` (10 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
As per Bruce's review comment.
squash into "nfsd41: exchange_id operation"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4state.c | 12 ++++--------
fs/nfsd/nfs4xdr.c | 6 +++---
include/linux/nfsd/xdr4.h | 3 +--
3 files changed, 8 insertions(+), 13 deletions(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 6ae12ff..9cf7d01 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -1217,24 +1217,20 @@ nfsd4_exchange_id(struct svc_rqst *rqstp,
char dname[HEXDIR_LEN];
nfs4_verifier verf = exid->verifier;
u32 ip_addr = svc_addr_in(rqstp)->sin_addr.s_addr;
- struct xdr_netobj clname = {
- .len = exid->id_len,
- .data = exid->id,
- };
dprintk("%s rqstp=%p exid=%p clname.len=%u clname.data=%p "
" ip_addr=%u flags %x, spa_how %d\n",
- __func__, rqstp, exid, clname.len, clname.data,
+ __func__, rqstp, exid, exid->clname.len, exid->clname.data,
ip_addr, exid->flags, exid->spa_how);
- if (!check_name(clname) || (exid->flags & ~EXCHGID4_FLAG_MASK_A))
+ if (!check_name(exid->clname) || (exid->flags & ~EXCHGID4_FLAG_MASK_A))
return nfserr_inval;
/* Currently only support SP4_NONE */
if (exid->spa_how != SP4_NONE)
return nfserr_encr_alg_unsupp;
- status = nfs4_make_rec_clidname(dname, &clname);
+ status = nfs4_make_rec_clidname(dname, &exid->clname);
if (status)
goto error;
@@ -1304,7 +1300,7 @@ nfsd4_exchange_id(struct svc_rqst *rqstp,
out_new:
/* Normal case */
- new = create_client(clname, dname);
+ new = create_client(exid->clname, dname);
if (new == NULL) {
status = nfserr_resource;
goto out;
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 527fadb..5e8da86 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -1052,10 +1052,10 @@ nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp,
COPYMEM(exid->verifier.data, NFS4_VERIFIER_SIZE);
READ_BUF(4);
- READ32(exid->id_len);
+ READ32(exid->clname.len);
- READ_BUF(exid->id_len);
- SAVEMEM(exid->id, exid->id_len);
+ READ_BUF(exid->clname.len);
+ SAVEMEM(exid->clname.data, exid->clname.len);
READ_BUF(4);
READ32(exid->flags);
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
index 7ed9955..6a340b6 100644
--- a/include/linux/nfsd/xdr4.h
+++ b/include/linux/nfsd/xdr4.h
@@ -356,8 +356,7 @@ struct nfsd4_write {
#if defined(CONFIG_NFSD_V4_1)
struct nfsd4_exchange_id {
nfs4_verifier verifier;
- u32 id_len;
- char *id;
+ struct xdr_netobj clname;
u32 flags;
clientid_t clientid;
u32 seqid;
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 12/21] SQUASHME: nfsd41: return nfserr_serverfault for spa_how == SP4_MACH_CRED
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (10 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 11/21] SQUASHME: nfsd41: embed an xdr_netobj in nfsd4_exchange_id Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 13/21] SQUASHME: nfsd41: fix comment style in init_forechannel_attrs Benny Halevy
` (9 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
As per Bruce's review comment, we cannot return nfserr_encr_alg_unsupp
for SP4_MACH_CRED.
squash into "nfsd41: exchange_id operation"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4state.c | 10 +++++++++-
1 files changed, 9 insertions(+), 1 deletions(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 9cf7d01..c3d555d 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -1227,8 +1227,16 @@ nfsd4_exchange_id(struct svc_rqst *rqstp,
return nfserr_inval;
/* Currently only support SP4_NONE */
- if (exid->spa_how != SP4_NONE)
+ switch (exid->spa_how) {
+ case SP4_NONE:
+ break;
+ case SP4_SSV:
return nfserr_encr_alg_unsupp;
+ default:
+ BUG(); /* checked by xdr code */
+ case SP4_MACH_CRED:
+ return nfserr_serverfault; /* no excuse :-/ */
+ }
status = nfs4_make_rec_clidname(dname, &exid->clname);
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 13/21] SQUASHME: nfsd41: fix comment style in init_forechannel_attrs
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (11 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 12/21] SQUASHME: nfsd41: return nfserr_serverfault for spa_how == SP4_MACH_CRED Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 14/21] SQUASHME: nfsd41: allocate struct nfsd4_session and slot table in one piece Benny Halevy
` (8 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
squash into "nfsd41: create_session operation"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4state.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index c3d555d..610d918 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -455,7 +455,7 @@ static int init_forechannel_attrs(struct svc_rqst *rqstp,
int status = 0;
__u32 maxcount = svc_max_payload(rqstp);
- /* headerpadsz set to zero in encode routine*/
+ /* headerpadsz set to zero in encode routine */
/* Use the client's max request and max response size if possible */
if (fchan->maxreq_sz > maxcount)
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 14/21] SQUASHME: nfsd41: allocate struct nfsd4_session and slot table in one piece
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (12 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 13/21] SQUASHME: nfsd41: fix comment style in init_forechannel_attrs Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 15/21] SQUASHME: nfsd41: no need to INIT_LIST_HEAD in alloc_init_session just prior to list_add Benny Halevy
` (7 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
as per Bruce's review comment.
squash into "nfsd41: create_session operation"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4state.c | 23 ++++++++++-------------
include/linux/nfsd/state.h | 2 +-
2 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 610d918..53ed144 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -494,23 +494,23 @@ static int
alloc_init_session(struct svc_rqst *rqstp, struct nfs4_client *clp,
struct nfsd4_create_session *cses)
{
- struct nfsd4_session *new;
+ struct nfsd4_session *new, tmp;
int idx, status = nfserr_resource, slotsize, i;
- new = kzalloc(sizeof(*new), GFP_KERNEL);
- if (!new)
- goto out;
+ memset(&tmp, 0, sizeof(tmp));
/* FIXME: For now, we just accept the client back channel attributes. */
- status = init_forechannel_attrs(rqstp, new, &cses->fore_channel);
+ status = init_forechannel_attrs(rqstp, &tmp, &cses->fore_channel);
if (status)
- goto out_free;
+ goto out;
- slotsize = new->se_fnumslots * sizeof(struct nfsd4_slot);
- new->se_slots = kzalloc(slotsize, GFP_KERNEL);
- if (!new->se_slots)
- goto out_free;
+ /* allocate struct nfsd4_session and slot table in one piece */
+ slotsize = tmp.se_fnumslots * sizeof(struct nfsd4_slot);
+ new = kzalloc(sizeof(*new) + slotsize, GFP_KERNEL);
+ if (!new)
+ goto out;
+ memcpy(new, &tmp, sizeof(*new));
for (i = 0; i < new->se_fnumslots; i++)
new->se_slots[i].sl_session = new;
@@ -532,9 +532,6 @@ alloc_init_session(struct svc_rqst *rqstp, struct nfs4_client *clp,
status = nfs_ok;
out:
return status;
-out_free:
- kfree(new);
- goto out;
}
/* caller must hold sessionid_lock */
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
index 365cc4b..ddf9ac6 100644
--- a/include/linux/nfsd/state.h
+++ b/include/linux/nfsd/state.h
@@ -141,7 +141,7 @@ struct nfsd4_session {
u32 se_fmaxresp_cached;
u32 se_fmaxops;
u32 se_fnumslots;
- struct nfsd4_slot *se_slots; /* forward channel slots */
+ struct nfsd4_slot se_slots[]; /* forward channel slots */
};
static inline void
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 15/21] SQUASHME: nfsd41: no need to INIT_LIST_HEAD in alloc_init_session just prior to list_add
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (13 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 14/21] SQUASHME: nfsd41: allocate struct nfsd4_session and slot table in one piece Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 16/21] SQUASHME: nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1 Benny Halevy
` (6 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
As per Bruce's review comment.
squash into "nfsd41: create_session"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4state.c | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 53ed144..b04f1fa 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -522,8 +522,6 @@ alloc_init_session(struct svc_rqst *rqstp, struct nfs4_client *clp,
new->se_flags = cses->flags;
kref_init(&new->se_ref);
- INIT_LIST_HEAD(&new->se_hash);
- INIT_LIST_HEAD(&new->se_perclnt);
spin_lock(&sessionid_lock);
list_add(&new->se_hash, &sessionid_hashtbl[idx]);
list_add(&new->se_perclnt, &clp->cl_sessions);
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 16/21] SQUASHME: nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (14 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 15/21] SQUASHME: nfsd41: no need to INIT_LIST_HEAD in alloc_init_session just prior to list_add Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 17/21] nfsd: pass nfsd4_compound_state* to nfs4_preprocess_{state,seq}id_op Benny Halevy
` (5 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
as per review comment.
squash into "nfsd41: stateid handling"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4proc.c | 5 ++++-
fs/nfsd/nfs4state.c | 6 +++---
include/linux/nfsd/xdr4.h | 2 +-
3 files changed, 8 insertions(+), 5 deletions(-)
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index b0d5b10..f2716e0 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -192,6 +192,8 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
struct nfsd4_open *open)
{
__be32 status;
+ struct nfsd4_compoundres *resp;
+
dprintk("NFSD: nfsd4_open filename %.*s op_stateowner %p\n",
(int)open->op_fname.len, open->op_fname.data,
open->op_stateowner);
@@ -206,7 +208,8 @@ nfsd4_open(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
nfs4_lock_state();
/* check seqid for replay. set nfs4_owner */
- status = nfsd4_process_open1(rqstp, open);
+ resp = rqstp->rq_resp;
+ status = nfsd4_process_open1(&resp->cstate, open);
if (status == nfserr_replay_me) {
struct nfs4_replay *rp = &open->op_stateowner->so_replay;
fh_put(&cstate->current_fh);
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index b04f1fa..4d9631c 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -2228,13 +2228,13 @@ static struct lock_manager_operations nfsd_lease_mng_ops = {
__be32
-nfsd4_process_open1(struct svc_rqst *rqstp, struct nfsd4_open *open)
+nfsd4_process_open1(struct nfsd4_compound_state *cstate,
+ struct nfsd4_open *open)
{
clientid_t *clientid = &open->op_clientid;
struct nfs4_client *clp = NULL;
unsigned int strhashval;
struct nfs4_stateowner *sop = NULL;
- struct nfsd4_compoundres *resp = rqstp->rq_resp;
if (!check_name(open->op_owner))
return nfserr_inval;
@@ -2253,7 +2253,7 @@ nfsd4_process_open1(struct svc_rqst *rqstp, struct nfsd4_open *open)
goto renew;
}
/* When sessions are used, skip open sequenceid processing */
- if (nfsd4_has_session(&resp->cstate))
+ if (nfsd4_has_session(cstate))
goto renew;
if (!sop->so_confirmed) {
/* Replace unconfirmed owners without checking for replay. */
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
index 6a340b6..24d62c1 100644
--- a/include/linux/nfsd/xdr4.h
+++ b/include/linux/nfsd/xdr4.h
@@ -543,7 +543,7 @@ extern __be32 nfsd4_destroy_session(struct svc_rqst *,
struct nfsd4_compound_state *,
struct nfsd4_destroy_session *);
#endif /* CONFIG_NFSD_V4_1 */
-extern __be32 nfsd4_process_open1(struct svc_rqst *rqstp,
+extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *,
struct nfsd4_open *open);
extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
struct svc_fh *current_fh, struct nfsd4_open *open);
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 17/21] nfsd: pass nfsd4_compound_state* to nfs4_preprocess_{state,seq}id_op
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (15 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 16/21] SQUASHME: nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1 Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 18/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op Benny Halevy
` (4 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
Currently we only use cstate->current_fh,
will also be used by nfsd41 code.
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4proc.c | 10 ++++------
fs/nfsd/nfs4state.c | 22 ++++++++++++++--------
include/linux/nfsd/state.h | 4 +++-
3 files changed, 21 insertions(+), 15 deletions(-)
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index f2716e0..eeed38d 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -547,9 +547,8 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
flags |= HAS_SESSION;
nfs4_lock_state();
/* check stateid */
- if ((status = nfs4_preprocess_stateid_op(&cstate->current_fh,
- &read->rd_stateid,
- flags, &read->rd_filp))) {
+ if ((status = nfs4_preprocess_stateid_op(cstate, &read->rd_stateid,
+ flags, &read->rd_filp))) {
dprintk("NFSD: nfsd4_read: couldn't process stateid!\n");
goto out;
}
@@ -684,7 +683,7 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
flags |= HAS_SESSION;
if (setattr->sa_iattr.ia_valid & ATTR_SIZE) {
nfs4_lock_state();
- status = nfs4_preprocess_stateid_op(&cstate->current_fh,
+ status = nfs4_preprocess_stateid_op(cstate,
&setattr->sa_stateid, flags, NULL);
nfs4_unlock_state();
if (status) {
@@ -727,8 +726,7 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
if (nfsd4_has_session(cstate))
flags |= HAS_SESSION;
nfs4_lock_state();
- status = nfs4_preprocess_stateid_op(&cstate->current_fh, stateid,
- flags, &filp);
+ status = nfs4_preprocess_stateid_op(cstate, stateid, flags, &filp);
if (filp)
get_file(filp);
nfs4_unlock_state();
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 4d9631c..f8c0172 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -2874,10 +2874,12 @@ static int is_delegation_stateid(stateid_t *stateid)
* Checks for stateid operations
*/
__be32
-nfs4_preprocess_stateid_op(struct svc_fh *current_fh, stateid_t *stateid, int flags, struct file **filpp)
+nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate,
+ stateid_t *stateid, int flags, struct file **filpp)
{
struct nfs4_stateid *stp = NULL;
struct nfs4_delegation *dp = NULL;
+ struct svc_fh *current_fh = &cstate->current_fh;
struct inode *ino = current_fh->fh_dentry->d_inode;
__be32 status;
@@ -2944,10 +2946,14 @@ setlkflg (int type)
* Checks for sequence id mutating operations.
*/
static __be32
-nfs4_preprocess_seqid_op(struct svc_fh *current_fh, u32 seqid, stateid_t *stateid, int flags, struct nfs4_stateowner **sopp, struct nfs4_stateid **stpp, struct nfsd4_lock *lock)
+nfs4_preprocess_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid,
+ stateid_t *stateid, int flags,
+ struct nfs4_stateowner **sopp,
+ struct nfs4_stateid **stpp, struct nfsd4_lock *lock)
{
struct nfs4_stateid *stp;
struct nfs4_stateowner *sop;
+ struct svc_fh *current_fh = &cstate->current_fh;
__be32 status;
dprintk("NFSD: preprocess_seqid_op: seqid=%d "
@@ -3071,7 +3077,7 @@ nfsd4_open_confirm(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
nfs4_lock_state();
- if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh,
+ if ((status = nfs4_preprocess_seqid_op(cstate,
oc->oc_seqid, &oc->oc_req_stateid,
CONFIRM | OPEN_STATE,
&oc->oc_stateowner, &stp, NULL)))
@@ -3144,7 +3150,7 @@ nfsd4_open_downgrade(struct svc_rqst *rqstp,
if (nfsd4_has_session(cstate))
flags |= HAS_SESSION;
nfs4_lock_state();
- if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh,
+ if ((status = nfs4_preprocess_seqid_op(cstate,
od->od_seqid,
&od->od_stateid,
flags,
@@ -3200,7 +3206,7 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
flags |= HAS_SESSION;
nfs4_lock_state();
/* check close_lru for replay */
- if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh,
+ if ((status = nfs4_preprocess_seqid_op(cstate,
close->cl_seqid,
&close->cl_stateid,
flags,
@@ -3555,7 +3561,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
flags |= HAS_SESSION;
/* validate and update open stateid and open seqid */
- status = nfs4_preprocess_seqid_op(&cstate->current_fh,
+ status = nfs4_preprocess_seqid_op(cstate,
lock->lk_new_open_seqid,
&lock->lk_new_open_stateid,
flags,
@@ -3586,7 +3592,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
flags |= HAS_SESSION;
/* lock (lock owner + lock stateid) already exists */
- status = nfs4_preprocess_seqid_op(&cstate->current_fh,
+ status = nfs4_preprocess_seqid_op(cstate,
lock->lk_old_lock_seqid,
&lock->lk_old_lock_stateid,
flags,
@@ -3784,7 +3790,7 @@ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
flags |= HAS_SESSION;
nfs4_lock_state();
- if ((status = nfs4_preprocess_seqid_op(&cstate->current_fh,
+ if ((status = nfs4_preprocess_seqid_op(cstate,
locku->lu_seqid,
&locku->lu_stateid,
flags,
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
index ddf9ac6..42d7fd9 100644
--- a/include/linux/nfsd/state.h
+++ b/include/linux/nfsd/state.h
@@ -345,7 +345,9 @@ struct nfs4_stateid {
((err) != nfserr_stale_stateid) && \
((err) != nfserr_bad_stateid))
-extern __be32 nfs4_preprocess_stateid_op(struct svc_fh *current_fh,
+struct nfsd4_compound_state;
+
+extern __be32 nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate,
stateid_t *stateid, int flags, struct file **filp);
extern void nfs4_lock_state(void);
extern void nfs4_unlock_state(void);
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 18/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (16 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 17/21] nfsd: pass nfsd4_compound_state* to nfs4_preprocess_{state,seq}id_op Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 19/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op Benny Halevy
` (3 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
Use nfsd4_has_session(cstate) in nfs4_preprocess_stateid_op rather
tahn passing it in.
squash into "nfsd41: stateid handling"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4proc.c | 15 +++------------
fs/nfsd/nfs4state.c | 3 +++
2 files changed, 6 insertions(+), 12 deletions(-)
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index eeed38d..d39af3d 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -535,7 +535,6 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
struct nfsd4_read *read)
{
__be32 status;
- int flags = RD_STATE;
/* no need to check permission - this will be done in nfsd_read() */
@@ -543,12 +542,10 @@ nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
if (read->rd_offset >= OFFSET_MAX)
return nfserr_inval;
- if (nfsd4_has_session(cstate))
- flags |= HAS_SESSION;
nfs4_lock_state();
/* check stateid */
if ((status = nfs4_preprocess_stateid_op(cstate, &read->rd_stateid,
- flags, &read->rd_filp))) {
+ RD_STATE, &read->rd_filp))) {
dprintk("NFSD: nfsd4_read: couldn't process stateid!\n");
goto out;
}
@@ -677,14 +674,11 @@ nfsd4_setattr(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
struct nfsd4_setattr *setattr)
{
__be32 status = nfs_ok;
- int flags = WR_STATE;
- if (nfsd4_has_session(cstate))
- flags |= HAS_SESSION;
if (setattr->sa_iattr.ia_valid & ATTR_SIZE) {
nfs4_lock_state();
status = nfs4_preprocess_stateid_op(cstate,
- &setattr->sa_stateid, flags, NULL);
+ &setattr->sa_stateid, WR_STATE, NULL);
nfs4_unlock_state();
if (status) {
dprintk("NFSD: nfsd4_setattr: couldn't process stateid!\n");
@@ -716,17 +710,14 @@ nfsd4_write(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
u32 *p;
__be32 status = nfs_ok;
unsigned long cnt;
- int flags = WR_STATE;
/* no need to check permission - this will be done in nfsd_write() */
if (write->wr_offset >= OFFSET_MAX)
return nfserr_inval;
- if (nfsd4_has_session(cstate))
- flags |= HAS_SESSION;
nfs4_lock_state();
- status = nfs4_preprocess_stateid_op(cstate, stateid, flags, &filp);
+ status = nfs4_preprocess_stateid_op(cstate, stateid, WR_STATE, &filp);
if (filp)
get_file(filp);
nfs4_unlock_state();
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index f8c0172..0bdbff4 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -2889,6 +2889,9 @@ nfs4_preprocess_stateid_op(struct nfsd4_compound_state *cstate,
if (grace_disallows_io(ino))
return nfserr_grace;
+ if (nfsd4_has_session(cstate))
+ flags |= HAS_SESSION;
+
if (ZERO_STATEID(stateid) || ONE_STATEID(stateid))
return check_special_stateids(current_fh, stateid, flags);
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 19/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (17 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 18/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:38 ` [PATCH 20/21] SQUASHME: Revert "nfsd41: Add Kconfig symbols for NFSv4.1" Benny Halevy
` (2 subsequent siblings)
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
Use nfsd4_has_session(cstate) in nfs4_preprocess_seqid_op rather
than passing it in.
squash into "nfsd41: stateid handling"
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
fs/nfsd/nfs4state.c | 34 +++++++++++-----------------------
1 files changed, 11 insertions(+), 23 deletions(-)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 0bdbff4..92d5feb 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -2974,6 +2974,10 @@ nfs4_preprocess_seqid_op(struct nfsd4_compound_state *cstate, u32 seqid,
if (STALE_STATEID(stateid))
return nfserr_stale_stateid;
+
+ if (nfsd4_has_session(cstate))
+ flags |= HAS_SESSION;
+
/*
* We return BAD_STATEID if filehandle doesn't match stateid,
* the confirmed flag is incorrecly set, or the generation
@@ -3140,7 +3144,6 @@ nfsd4_open_downgrade(struct svc_rqst *rqstp,
__be32 status;
struct nfs4_stateid *stp;
unsigned int share_access;
- int flags = OPEN_STATE;
dprintk("NFSD: nfsd4_open_downgrade on file %.*s\n",
(int)cstate->current_fh.fh_dentry->d_name.len,
@@ -3150,13 +3153,11 @@ nfsd4_open_downgrade(struct svc_rqst *rqstp,
|| !deny_valid(od->od_share_deny))
return nfserr_inval;
- if (nfsd4_has_session(cstate))
- flags |= HAS_SESSION;
nfs4_lock_state();
if ((status = nfs4_preprocess_seqid_op(cstate,
od->od_seqid,
&od->od_stateid,
- flags,
+ OPEN_STATE,
&od->od_stateowner, &stp, NULL)))
goto out;
@@ -3199,20 +3200,17 @@ nfsd4_close(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
{
__be32 status;
struct nfs4_stateid *stp;
- int flags = OPEN_STATE | CLOSE_STATE;
dprintk("NFSD: nfsd4_close on file %.*s\n",
(int)cstate->current_fh.fh_dentry->d_name.len,
cstate->current_fh.fh_dentry->d_name.name);
- if (nfsd4_has_session(cstate))
- flags |= HAS_SESSION;
nfs4_lock_state();
/* check close_lru for replay */
if ((status = nfs4_preprocess_seqid_op(cstate,
close->cl_seqid,
&close->cl_stateid,
- flags,
+ OPEN_STATE | CLOSE_STATE,
&close->cl_stateowner, &stp, NULL)))
goto out;
status = nfs_ok;
@@ -3528,7 +3526,7 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
__be32 status = 0;
unsigned int strhashval;
unsigned int cmd;
- int err, flags = 0;
+ int err;
dprintk("NFSD: nfsd4_lock: start=%Ld length=%Ld\n",
(long long) lock->lk_offset,
@@ -3559,15 +3557,11 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
STALE_CLIENTID(&lock->lk_new_clientid))
goto out;
- flags = OPEN_STATE;
- if (nfsd4_has_session(cstate))
- flags |= HAS_SESSION;
-
/* validate and update open stateid and open seqid */
status = nfs4_preprocess_seqid_op(cstate,
lock->lk_new_open_seqid,
&lock->lk_new_open_stateid,
- flags,
+ OPEN_STATE,
&lock->lk_replay_owner, &open_stp,
lock);
if (status)
@@ -3590,15 +3584,11 @@ nfsd4_lock(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
if (lock_stp == NULL)
goto out;
} else {
- flags = LOCK_STATE;
- if (nfsd4_has_session(cstate))
- flags |= HAS_SESSION;
-
/* lock (lock owner + lock stateid) already exists */
status = nfs4_preprocess_seqid_op(cstate,
lock->lk_old_lock_seqid,
&lock->lk_old_lock_stateid,
- flags,
+ LOCK_STATE,
&lock->lk_replay_owner, &lock_stp, lock);
if (status)
goto out;
@@ -3780,7 +3770,7 @@ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
struct file *filp = NULL;
struct file_lock file_lock;
__be32 status;
- int err, flags = LOCK_STATE;
+ int err;
dprintk("NFSD: nfsd4_locku: start=%Ld length=%Ld\n",
(long long) locku->lu_offset,
@@ -3789,14 +3779,12 @@ nfsd4_locku(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
if (check_lock_length(locku->lu_offset, locku->lu_length))
return nfserr_inval;
- if (nfsd4_has_session(cstate))
- flags |= HAS_SESSION;
nfs4_lock_state();
if ((status = nfs4_preprocess_seqid_op(cstate,
locku->lu_seqid,
&locku->lu_stateid,
- flags,
+ LOCK_STATE,
&locku->lu_stateowner, &stp, NULL)))
goto out;
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 20/21] SQUASHME: Revert "nfsd41: Add Kconfig symbols for NFSv4.1"
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (18 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 19/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op Benny Halevy
@ 2009-04-02 22:38 ` Benny Halevy
2009-04-02 22:39 ` [PATCH 21/21] SQUASHME: get rid of CONFIG_NFSD_V4_1 Benny Halevy
2009-04-03 0:45 ` [pnfs] [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:38 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
This reverts commit 1023bd56e438717f458fc7ce1a0dfd8593a6f82e.
---
fs/nfsd/Kconfig | 9 ---------
1 files changed, 0 insertions(+), 9 deletions(-)
diff --git a/fs/nfsd/Kconfig b/fs/nfsd/Kconfig
index 1f2f893..503b9da 100644
--- a/fs/nfsd/Kconfig
+++ b/fs/nfsd/Kconfig
@@ -79,12 +79,3 @@ config NFSD_V4
available from http://linux-nfs.org/.
If unsure, say N.
-
-config NFSD_V4_1
- bool "NFS server support for NFSv4.1 (DEVELOPER ONLY)"
- depends on NFSD_V4 && EXPERIMENTAL
- help
- This option enables support for minor version 1 of the NFSv4 protocol
- (draft-ietf-nfsv4-minorversion1) in the kernel's NFS server.
-
- Unless you're an NFS developer, say N.
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* [PATCH 21/21] SQUASHME: get rid of CONFIG_NFSD_V4_1
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (19 preceding siblings ...)
2009-04-02 22:38 ` [PATCH 20/21] SQUASHME: Revert "nfsd41: Add Kconfig symbols for NFSv4.1" Benny Halevy
@ 2009-04-02 22:39 ` Benny Halevy
2009-04-03 0:45 ` [pnfs] [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
21 siblings, 0 replies; 25+ messages in thread
From: Benny Halevy @ 2009-04-02 22:39 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: linux-nfs, pnfs
And update Documentation
Signed-off-by: Benny Halevy <bhalevy@panasas.com>
---
Documentation/filesystems/nfs41-server.txt | 16 +++++++++++-----
fs/nfsd/nfs4callback.c | 16 ----------------
fs/nfsd/nfs4proc.c | 6 ++----
fs/nfsd/nfs4state.c | 20 --------------------
fs/nfsd/nfs4xdr.c | 21 ++-------------------
fs/nfsd/nfssvc.c | 2 --
include/linux/nfsd/cache.h | 4 ----
include/linux/nfsd/nfsd.h | 22 ----------------------
include/linux/nfsd/state.h | 6 ++++--
include/linux/nfsd/xdr4.h | 8 ++------
include/linux/sunrpc/svc.h | 2 --
11 files changed, 21 insertions(+), 102 deletions(-)
diff --git a/Documentation/filesystems/nfs41-server.txt b/Documentation/filesystems/nfs41-server.txt
index 8124a67..05d81cb 100644
--- a/Documentation/filesystems/nfs41-server.txt
+++ b/Documentation/filesystems/nfs41-server.txt
@@ -1,14 +1,20 @@
NFSv4.1 Server Implementation
+Server support for minorversion 1 can be controlled using the
+/proc/fs/nfsd/versions control file. The string output returned
+by reading this file will contain either "+4.1" or "-4.1"
+correspondingly.
+
+Currently, server support for minorversion 1 is disabled by default.
+It can be enabled at run time by writing the string "+4.1" to
+the /proc/fs/nfsd/versions control file. Note that to write this
+control file, the nfsd service must be taken down. Use your user-mode
+nfs-utils to set this up; see rpc.nfsd(8)
+
The NFSv4 minorversion 1 (NFSv4.1) implementation in nfsd is based
on the latest NFSv4.1 Internet Draft:
http://tools.ietf.org/html/draft-ietf-nfsv4-minorversion1-29
-If you're a developer or just eager to test the code, set
-CONFIG_NFSD_V4_1 to 'y' in your kernel configuration file.
-This will allow the server to serve both NFSv4 and NFSv4.1
-clients concurrently.
-
From the many new features in NFSv4.1 the current implementation
focuses on the mandatory-to-implement NFSv4.1 Sessions, providing
"exactly once" semantics and better control and throttling of the
diff --git a/fs/nfsd/nfs4callback.c b/fs/nfsd/nfs4callback.c
index 10c6a80..b3c84cd 100644
--- a/fs/nfsd/nfs4callback.c
+++ b/fs/nfsd/nfs4callback.c
@@ -276,10 +276,8 @@ encode_cb_sequence(struct xdr_stream *xdr, struct nfsd4_cb_sequence *args,
RESERVE_SPACE(1 + NFS4_MAX_SESSIONID_LEN + 20);
WRITE32(OP_CB_SEQUENCE);
-#ifdef CONFIG_NFSD_V4_1
WRITEMEM(args->cbs_clp->cl_sessionid.data, NFS4_MAX_SESSIONID_LEN);
WRITE32(args->cbs_clp->cl_cb_seq_nr);
-#endif /* CONFIG_NFSD_V4_1 */
WRITE32(0); /* slotid, always 0 */
WRITE32(0); /* highest slotid always 0 */
WRITE32(0); /* cachethis always 0 */
@@ -300,10 +298,8 @@ nfs4_xdr_enc_cb_null(struct rpc_rqst *req, __be32 *p)
static u32
nfs4_xdr_minorversion(struct nfs4_rpc_args *rpc_args)
{
-#if defined(CONFIG_NFSD_V4_1)
if (rpc_args->args_seq)
return rpc_args->args_seq->cbs_minorversion;
-#endif /* CONFIG_NFSD_V4_1 */
return 0;
}
@@ -390,7 +386,6 @@ decode_cb_sequence(struct xdr_stream *xdr, struct nfsd4_cb_sequence *res,
READ_BUF(NFS4_MAX_SESSIONID_LEN + 16);
COPYMEM(id.data, NFS4_MAX_SESSIONID_LEN);
-#ifdef CONFIG_NFSD_V4_1
if (memcmp(id.data, res->cbs_clp->cl_sessionid.data,
NFS4_MAX_SESSIONID_LEN)) {
dprintk("%s Invalid session id\n", __func__);
@@ -401,7 +396,6 @@ decode_cb_sequence(struct xdr_stream *xdr, struct nfsd4_cb_sequence *res,
dprintk("%s Invalid sequence number\n", __func__);
goto out;
}
-#endif /* CONFIG_NFSD_V4_1 */
READ32(dummy); /* slotid must be 0 */
if (dummy != 0) {
dprintk("%s Invalid slotid\n", __func__);
@@ -532,13 +526,11 @@ static struct rpc_clnt *setup_callback_client(struct nfs4_client *clp)
addr.sin_family = AF_INET;
addr.sin_port = htons(cb->cb_port);
addr.sin_addr.s_addr = htonl(cb->cb_addr);
-#if defined(CONFIG_NFSD_V4_1)
if (cb->cb_minorversion) {
BUG_ON(cb->cb_minorversion != 1);
args.bc_sock = container_of(clp->cl_cb_xprt, struct svc_sock,
sk_xprt);
}
-#endif /* CONFIG_NFSD_V4_1 */
dprintk("%s: program %s 0x%x nrvers %u version %u minorversion %u\n",
__func__, args.program->name, args.prognumber,
@@ -618,7 +610,6 @@ static int _nfsd4_cb_sync(struct nfs4_client *clp,
return rpc_call_sync(clp->cl_callback.cb_client, msg, RPC_TASK_SOFT);
}
-#if defined(CONFIG_NFSD_V4_1)
/*
* FIXME: cb_sequence should support referring call lists, cachethis, and
* multiple slots
@@ -678,13 +669,6 @@ static int nfsd4_cb_sync(struct nfs4_client *clp,
_nfsd41_cb_sync(clp, msg, flags) :
_nfsd4_cb_sync(clp, msg, flags);
}
-#else /* CONFIG_NFSD_V4_1 */
-static int nfsd4_cb_sync(struct nfs4_client *clp,
- struct rpc_message *msg, int flags)
-{
- return _nfsd4_cb_sync(clp, msg, flags);
-}
-#endif /* CONFIG_NFSD_V4_1 */
/*
* called with dp->dl_count inc'ed.
diff --git a/fs/nfsd/nfs4proc.c b/fs/nfsd/nfs4proc.c
index d39af3d..83044e8 100644
--- a/fs/nfsd/nfs4proc.c
+++ b/fs/nfsd/nfs4proc.c
@@ -896,13 +896,11 @@ nfsd4_enc_no_page_replay(struct nfsd4_compoundargs *args,
*/
static bool nfs41_op_ordering_ok(struct nfsd4_compoundargs *args)
{
-#if defined(CONFIG_NFSD_V4_1)
if (args->minorversion && args->opcnt > 0) {
struct nfsd4_op *op = &args->ops[0];
return (op->status == nfserr_op_illegal) ||
(nfsd4_ops[op->opnum].op_flags & ALLOWED_AS_FIRST_OP);
}
-#endif /* CONFIG_NFSD_V4_1 */
return true;
}
@@ -1197,7 +1195,8 @@ static struct nfsd4_operation nfsd4_ops[] = {
.op_flags = ALLOWED_WITHOUT_FH | ALLOWED_ON_ABSENT_FS,
.op_name = "OP_RELEASE_LOCKOWNER",
},
-#if defined(CONFIG_NFSD_V4_1)
+
+ /* NFSv4.1 operations */
[OP_EXCHANGE_ID] = {
.op_func = (nfsd4op_func)nfsd4_exchange_id,
.op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP,
@@ -1218,7 +1217,6 @@ static struct nfsd4_operation nfsd4_ops[] = {
.op_flags = ALLOWED_WITHOUT_FH | ALLOWED_AS_FIRST_OP,
.op_name = "OP_SEQUENCE",
},
-#endif /* CONFIG_NFSD_V4_1 */
};
static const char *nfsd4_op_name(unsigned opnum)
diff --git a/fs/nfsd/nfs4state.c b/fs/nfsd/nfs4state.c
index 92d5feb..6c0975f 100644
--- a/fs/nfsd/nfs4state.c
+++ b/fs/nfsd/nfs4state.c
@@ -68,9 +68,7 @@ static u32 current_delegid = 1;
static u32 nfs4_init;
static stateid_t zerostateid; /* bits all 0 */
static stateid_t onestateid; /* bits all 1 */
-#ifdef CONFIG_NFSD_V4_1
static u64 current_sessionid = 1;
-#endif /* CONFIG_NFSD_V4_1 */
#define ZERO_STATEID(stateid) (!memcmp((stateid), &zerostateid, sizeof(stateid_t)))
#define ONE_STATEID(stateid) (!memcmp((stateid), &onestateid, sizeof(stateid_t)))
@@ -385,7 +383,6 @@ static void release_openowner(struct nfs4_stateowner *sop)
nfs4_put_stateowner(sop);
}
-#if defined(CONFIG_NFSD_V4_1)
static DEFINE_SPINLOCK(sessionid_lock);
#define SESSION_HASH_SIZE 512
static struct list_head sessionid_hashtbl[SESSION_HASH_SIZE];
@@ -588,9 +585,6 @@ free_session(struct kref *kref)
kfree(ses->se_slots);
kfree(ses);
}
-#else /* CONFIG_NFSD_V4_1 */
-static inline void release_session(struct nfsd4_session *ses) {}
-#endif /* CONFIG_NFSD_V4_1 */
static inline void
renew_client(struct nfs4_client *clp)
@@ -657,12 +651,10 @@ static inline void
free_client(struct nfs4_client *clp)
{
shutdown_callback_client(clp);
-#if defined(CONFIG_NFSD_V4_1)
if (clp->cl_cb_xprt)
svc_xprt_put(clp->cl_cb_xprt);
nfsd4_release_respages(clp->cl_slot.sl_cache_entry.ce_respages,
clp->cl_slot.sl_cache_entry.ce_resused);
-#endif /* CONFIG_NFSD_V4_1 */
if (clp->cl_cred.cr_group_info)
put_group_info(clp->cl_cred.cr_group_info);
kfree(clp->cl_principal);
@@ -709,14 +701,12 @@ expire_client(struct nfs4_client *clp)
sop = list_entry(clp->cl_openowners.next, struct nfs4_stateowner, so_perclient);
release_openowner(sop);
}
-#ifdef CONFIG_NFSD_V4_1
while (!list_empty(&clp->cl_sessions)) {
struct nfsd4_session *ses;
ses = list_entry(clp->cl_sessions.next, struct nfsd4_session,
se_perclnt);
release_session(ses);
}
-#endif /* CONFIG_NFSD_V4_1 */
put_nfs4_client(clp);
}
@@ -734,10 +724,8 @@ static struct nfs4_client *create_client(struct xdr_netobj name, char *recdir)
INIT_LIST_HEAD(&clp->cl_strhash);
INIT_LIST_HEAD(&clp->cl_openowners);
INIT_LIST_HEAD(&clp->cl_delegations);
-#if defined(CONFIG_NFSD_V4_1)
INIT_LIST_HEAD(&clp->cl_sessions);
mutex_init(&clp->cl_cb_mutex);
-#endif /* CONFIG_NFSD_V4_1 */
INIT_LIST_HEAD(&clp->cl_lru);
return clp;
}
@@ -879,12 +867,8 @@ find_unconfirmed_client(clientid_t *clid)
static inline int
match_clientid_establishment(struct nfs4_client *clp, bool use_exchange_id)
{
-#if defined(CONFIG_NFSD_V4_1)
bool has_exchange_flags = (clp->cl_exchange_flags != 0);
return use_exchange_id == has_exchange_flags;
-#else /* CONFIG_NFSD_V4_1 */
- return 1;
-#endif /* CONFIG_NFSD_V4_1 */
}
static struct nfs4_client *
@@ -1009,7 +993,6 @@ out_err:
return;
}
-#if defined(CONFIG_NFSD_V4_1)
void
nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp)
{
@@ -1547,7 +1530,6 @@ out:
dprintk("%s: return %d\n", __func__, ntohl(status));
return status;
}
-#endif /* CONFIG_NFSD_V4_1 */
__be32
nfsd4_setclientid(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
@@ -4023,10 +4005,8 @@ nfs4_state_init(void)
INIT_LIST_HEAD(&unconf_str_hashtbl[i]);
INIT_LIST_HEAD(&unconf_id_hashtbl[i]);
}
-#if defined(CONFIG_NFSD_V4_1)
for (i = 0; i < SESSION_HASH_SIZE; i++)
INIT_LIST_HEAD(&sessionid_hashtbl[i]);
-#endif /* CONFIG_NFSD_V4_1 */
for (i = 0; i < FILE_HASH_SIZE; i++) {
INIT_LIST_HEAD(&file_hashtbl[i]);
}
diff --git a/fs/nfsd/nfs4xdr.c b/fs/nfsd/nfs4xdr.c
index 5e8da86..fba604e 100644
--- a/fs/nfsd/nfs4xdr.c
+++ b/fs/nfsd/nfs4xdr.c
@@ -1040,7 +1040,6 @@ nfsd4_decode_release_lockowner(struct nfsd4_compoundargs *argp, struct nfsd4_rel
DECODE_TAIL;
}
-#if defined(CONFIG_NFSD_V4_1)
static __be32
nfsd4_decode_exchange_id(struct nfsd4_compoundargs *argp,
struct nfsd4_exchange_id *exid)
@@ -1273,7 +1272,6 @@ nfsd4_decode_sequence(struct nfsd4_compoundargs *argp,
DECODE_TAIL;
}
-#endif /* CONFIG_NFSD_V4_1 */
static __be32
nfsd4_decode_noop(struct nfsd4_compoundargs *argp, void *p)
@@ -1329,7 +1327,6 @@ static nfsd4_dec nfsd4_dec_ops[] = {
[OP_RELEASE_LOCKOWNER] = (nfsd4_dec)nfsd4_decode_release_lockowner,
};
-#if defined(CONFIG_NFSD_V4_1)
static nfsd4_dec nfsd41_dec_ops[] = {
[OP_ACCESS] (nfsd4_dec)nfsd4_decode_access,
[OP_CLOSE] (nfsd4_dec)nfsd4_decode_close,
@@ -1390,7 +1387,6 @@ static nfsd4_dec nfsd41_dec_ops[] = {
[OP_DESTROY_CLIENTID] (nfsd4_dec)nfsd4_decode_notsupp,
[OP_RECLAIM_COMPLETE] (nfsd4_dec)nfsd4_decode_notsupp,
};
-#endif /* CONFIG_NFSD_V4_1 */
struct nfsd4_minorversion_ops {
nfsd4_dec *decoders;
@@ -1399,9 +1395,7 @@ struct nfsd4_minorversion_ops {
static struct nfsd4_minorversion_ops nfsd4_minorversion[] = {
[0] = { nfsd4_dec_ops, ARRAY_SIZE(nfsd4_dec_ops) },
-#if defined(CONFIG_NFSD_V4_1)
[1] = { nfsd41_dec_ops, ARRAY_SIZE(nfsd41_dec_ops) },
-#endif /* CONFIG_NFSD_V4_1 */
};
static __be32
@@ -2948,7 +2942,6 @@ nfsd4_encode_write(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_w
return nfserr;
}
-#if defined(CONFIG_NFSD_V4_1)
static __be32
nfsd4_encode_exchange_id(struct nfsd4_compoundres *resp, int nfserr,
struct nfsd4_exchange_id *exid)
@@ -3085,7 +3078,6 @@ nfsd4_encode_sequence(struct nfsd4_compoundres *resp, int nfserr,
ADJUST_ARGS();
return 0;
}
-#endif /* CONFIG_NFSD_V4_1 */
static __be32
nfsd4_encode_noop(struct nfsd4_compoundres *resp, __be32 nfserr, void *p)
@@ -3138,7 +3130,8 @@ static nfsd4_enc nfsd4_enc_ops[] = {
[OP_VERIFY] = (nfsd4_enc)nfsd4_encode_noop,
[OP_WRITE] = (nfsd4_enc)nfsd4_encode_write,
[OP_RELEASE_LOCKOWNER] = (nfsd4_enc)nfsd4_encode_noop,
-#if defined(CONFIG_NFSD_V4_1)
+
+ /* NFSv4.1 operations */
[OP_BACKCHANNEL_CTL] = (nfsd4_enc)nfsd4_encode_noop,
[OP_BIND_CONN_TO_SESSION] = (nfsd4_enc)nfsd4_encode_noop,
[OP_EXCHANGE_ID] = (nfsd4_enc)nfsd4_encode_exchange_id,
@@ -3158,10 +3151,8 @@ static nfsd4_enc nfsd4_enc_ops[] = {
[OP_WANT_DELEGATION] = (nfsd4_enc)nfsd4_encode_noop,
[OP_DESTROY_CLIENTID] = (nfsd4_enc)nfsd4_encode_noop,
[OP_RECLAIM_COMPLETE] = (nfsd4_enc)nfsd4_encode_noop,
-#endif /* CONFIG_NFSD_V4_1 */
};
-#if defined(CONFIG_NFSD_V4_1)
/*
* Calculate the total amount of memory that the compound response has taken
* after encoding the current operation.
@@ -3209,12 +3200,6 @@ static int nfsd4_check_drc_limit(struct nfsd4_compoundres *resp)
else
return nfserr_rep_too_big_to_cache;
}
-#else /* CONFIG_NFSD_V4_1 */
-static inline int nfsd4_check_drc_limit(struct nfsd4_compoundres *resp)
-{
- return 0;
-}
-#endif /* CONFIG_NFSD_V4_1 */
void
nfsd4_encode_operation(struct nfsd4_compoundres *resp, struct nfsd4_op *op)
@@ -3335,7 +3320,6 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo
iov = &rqstp->rq_res.head[0];
iov->iov_len = ((char*)resp->p) - (char*)iov->iov_base;
BUG_ON(iov->iov_len > PAGE_SIZE);
-#ifdef CONFIG_NFSD_V4_1
if (nfsd4_has_session(&resp->cstate)) {
if (resp->cstate.status == nfserr_replay_cache &&
!nfsd4_no_page_in_cache(resp)) {
@@ -3348,7 +3332,6 @@ nfs4svc_encode_compoundres(struct svc_rqst *rqstp, __be32 *p, struct nfsd4_compo
if (resp->cstate.slot->sl_session)
nfsd4_put_session(resp->cstate.slot->sl_session);
}
-#endif /* CONFIG_NFSD_V4_1 */
return 1;
}
diff --git a/fs/nfsd/nfssvc.c b/fs/nfsd/nfssvc.c
index 1f26d9f..e9d5773 100644
--- a/fs/nfsd/nfssvc.c
+++ b/fs/nfsd/nfssvc.c
@@ -236,13 +236,11 @@ void nfsd_reset_versions(void)
*/
static void set_max_drc(void)
{
-#ifdef CONFIG_NFSD_V4_1
nfsd_serv->sv_drc_max_pages = nr_free_buffer_pages()
>> NFSD_DRC_SIZE_SHIFT;
nfsd_serv->sv_drc_pages_used = 0;
dprintk("%s svc_drc_max_pages %u\n", __func__,
nfsd_serv->sv_drc_max_pages);
-#endif /* CONFIG_NFSD_V4_1 */
}
int nfsd_create_serv(void)
diff --git a/include/linux/nfsd/cache.h b/include/linux/nfsd/cache.h
index 57a83c7..a59a2df 100644
--- a/include/linux/nfsd/cache.h
+++ b/include/linux/nfsd/cache.h
@@ -75,10 +75,6 @@ int nfsd_reply_cache_init(void);
void nfsd_reply_cache_shutdown(void);
int nfsd_cache_lookup(struct svc_rqst *, int);
void nfsd_cache_update(struct svc_rqst *, int, __be32 *);
-#ifdef CONFIG_NFSD_V4_1
void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp);
-#else /* CONFIG_NFSD_V4_1 */
-static inline void nfsd4_set_statp(struct svc_rqst *rqstp, __be32 *statp) {}
-#endif /* CONFIG_NFSD_V4_1 */
#endif /* NFSCACHE_H */
diff --git a/include/linux/nfsd/nfsd.h b/include/linux/nfsd/nfsd.h
index 27b9cf5..5494dcd 100644
--- a/include/linux/nfsd/nfsd.h
+++ b/include/linux/nfsd/nfsd.h
@@ -23,11 +23,7 @@
/*
* nfsd version
*/
-#if defined(CONFIG_NFSD_V4_1)
#define NFSD_SUPPORTED_MINOR_VERSION 1
-#else /* CONFIG_NFSD_V4_1 */
-#define NFSD_SUPPORTED_MINOR_VERSION 0
-#endif /* CONFIG_NFSD_V4_1 */
/*
* Flags for nfsd_permission
@@ -378,8 +374,6 @@ extern struct timeval nfssvc_boot;
#define NFSD4_1_SUPPORTED_ATTRS_WORD2 \
(NFSD4_SUPPORTED_ATTRS_WORD2 | FATTR4_WORD2_SUPPATTR_EXCLCREAT)
-#if defined(CONFIG_NFSD_V4_1)
-
/* The percent of nr_free_buffer_pages used by the V4.1 server DRC */
#define NFSD_DRC_SIZE_SHIFT 7
@@ -400,22 +394,6 @@ static inline u32 nfsd_suppattrs2(u32 minorversion)
return minorversion ? NFSD4_1_SUPPORTED_ATTRS_WORD2
: NFSD4_SUPPORTED_ATTRS_WORD2;
}
-#else /* CONFIG_NFSD_V4_1 */
-static inline u32 nfsd_suppattrs0(u32 minorversion)
-{
- return NFSD4_SUPPORTED_ATTRS_WORD0;
-}
-
-static inline u32 nfsd_suppattrs1(u32 minorversion)
-{
- return NFSD4_SUPPORTED_ATTRS_WORD1;
-}
-
-static inline u32 nfsd_suppattrs2(u32 minorversion)
-{
- return NFSD4_SUPPORTED_ATTRS_WORD2;
-}
-#endif /* CONFIG_NFSD_V4_1 */
/* These will return ERR_INVAL if specified in GETATTR or READDIR. */
#define NFSD_WRITEONLY_ATTRS_WORD1 \
diff --git a/include/linux/nfsd/state.h b/include/linux/nfsd/state.h
index 42d7fd9..0789ece 100644
--- a/include/linux/nfsd/state.h
+++ b/include/linux/nfsd/state.h
@@ -195,16 +195,18 @@ struct nfs4_client {
struct nfs4_callback cl_callback; /* callback info */
atomic_t cl_count; /* ref count */
u32 cl_firststate; /* recovery dir creation */
-#ifdef CONFIG_NFSD_V4_1
+
+ /* for nfs41 */
struct list_head cl_sessions;
struct nfsd4_slot cl_slot; /* create_session slot */
u32 cl_exchange_flags;
struct nfs4_sessionid cl_sessionid;
+
+ /* for nfs41 callbacks */
/* We currently support a single back channel with a single slot */
u32 cl_cb_seq_nr;
struct svc_xprt *cl_cb_xprt; /* 4.1 callback transport */
struct mutex cl_cb_mutex;
-#endif /* CONFIG_NFSD_V4_1 */
};
/* struct nfs4_client_reset
diff --git a/include/linux/nfsd/xdr4.h b/include/linux/nfsd/xdr4.h
index 24d62c1..fc5b1ab 100644
--- a/include/linux/nfsd/xdr4.h
+++ b/include/linux/nfsd/xdr4.h
@@ -353,7 +353,6 @@ struct nfsd4_write {
nfs4_verifier wr_verifier; /* response */
};
-#if defined(CONFIG_NFSD_V4_1)
struct nfsd4_exchange_id {
nfs4_verifier verifier;
struct xdr_netobj clname;
@@ -401,7 +400,6 @@ struct nfsd4_sequence {
struct nfsd4_destroy_session {
struct nfs4_sessionid sessionid;
};
-#endif /* CONFIG_NFSD_V4_1 */
struct nfsd4_op {
int opnum;
@@ -437,12 +435,12 @@ struct nfsd4_op {
struct nfsd4_verify verify;
struct nfsd4_write write;
struct nfsd4_release_lockowner release_lockowner;
-#if defined(CONFIG_NFSD_V4_1)
+
+ /* NFSv4.1 */
struct nfsd4_exchange_id exchange_id;
struct nfsd4_create_session create_session;
struct nfsd4_destroy_session destroy_session;
struct nfsd4_sequence sequence;
-#endif /* CONFIG_NFSD_V4_1 */
} u;
struct nfs4_replay * replay;
};
@@ -526,7 +524,6 @@ extern __be32 nfsd4_setclientid(struct svc_rqst *rqstp,
extern __be32 nfsd4_setclientid_confirm(struct svc_rqst *rqstp,
struct nfsd4_compound_state *,
struct nfsd4_setclientid_confirm *setclientid_confirm);
-#if defined(CONFIG_NFSD_V4_1)
extern void nfsd4_set_cache_entry(struct nfsd4_compoundres *resp);
extern __be32 nfsd4_replay_cache_entry(struct nfsd4_compoundres *resp,
struct nfsd4_sequence *seq);
@@ -542,7 +539,6 @@ extern __be32 nfsd4_sequence(struct svc_rqst *,
extern __be32 nfsd4_destroy_session(struct svc_rqst *,
struct nfsd4_compound_state *,
struct nfsd4_destroy_session *);
-#endif /* CONFIG_NFSD_V4_1 */
extern __be32 nfsd4_process_open1(struct nfsd4_compound_state *,
struct nfsd4_open *open);
extern __be32 nfsd4_process_open2(struct svc_rqst *rqstp,
diff --git a/include/linux/sunrpc/svc.h b/include/linux/sunrpc/svc.h
index c4f0e1e..d209c63 100644
--- a/include/linux/sunrpc/svc.h
+++ b/include/linux/sunrpc/svc.h
@@ -95,10 +95,8 @@ struct svc_serv {
struct module * sv_module; /* optional module to count when
* adding threads */
svc_thread_fn sv_function; /* main function for threads */
-#if defined(CONFIG_NFSD_V4_1)
unsigned int sv_drc_max_pages; /* Total pages for DRC */
unsigned int sv_drc_pages_used;/* DRC pages used */
-#endif /* CONFIG_NFSD_V4_1 */
};
/*
--
1.6.2.1
^ permalink raw reply related [flat|nested] 25+ messages in thread
* Re: [pnfs] [PATCH 0/21] nfsd41-for-2.6.30 review cleanup
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
` (20 preceding siblings ...)
2009-04-02 22:39 ` [PATCH 21/21] SQUASHME: get rid of CONFIG_NFSD_V4_1 Benny Halevy
@ 2009-04-03 0:45 ` Benny Halevy
2009-04-03 0:51 ` Benny Halevy
21 siblings, 1 reply; 25+ messages in thread
From: Benny Halevy @ 2009-04-03 0:45 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: Andy Adamson, NFS list, pNFS Mailing List
On Apr. 03, 2009, 1:33 +0300, Benny Halevy <bhalevy@panasas.com> wrote:
> Bruce,
>
> The following patches fix non-DRC review comments.
> They are untested yet, but I wanted to send them out ASAP
Passed cthon tests over nfs4 so far from several clients:
same kernel, nfs41-for-2.6.30 from today, and from 2.6.27.19-78.2.30.fc9.x86_64.
The latter hit a single unreproducible failure in the bigfile test.
No pynfs regressions.
Benny
> so that people will have some time to comment on them before I
> squash them in.
>
> [PATCH 01/21] SQUASHME: nfsd41: conditionally decode_sequence in nfs4_xdr_dec_cb_recall
> [PATCH 02/21] nfsd41: control nfsv4.1 svc via /proc/fs/nfsd/versions
> [PATCH 03/21] SQUASHME: nfsd41: disable support for minorversion by default
> [PATCH 04/21] SQUASHME: nfs41: reverse EXCHGID4_INVAL_FLAG_MASK_{A,R}
> [PATCH 05/21] SQUASHME: nfsd41: reverse use of EXCHGID4_INVAL_FLAG_MASK_A
> [PATCH 06/21] SQUASHME: nfsd41: simplify match_clientid_establishment logic
> [PATCH 07/21] SQUASHME: simplify nfsd4_encode_sequence error handling
> [PATCH 08/21] SQUASHME: simplify nfsd4_encode_create_session error handling
> [PATCH 09/21] SQUASHME: simplify nfsd4_encode_exchange_id error handling
> [PATCH 10/21] SQUASHME: nfsd41: document unenforced nfs41 compound ordering rules.
> [PATCH 11/21] SQUASHME: nfsd41: embed an xdr_netobj in nfsd4_exchange_id
> [PATCH 12/21] SQUASHME: nfsd41: return nfserr_serverfault for spa_how == SP4_MACH_CRED
> [PATCH 13/21] SQUASHME: nfsd41: fix comment style in init_forechannel_attrs
> [PATCH 14/21] SQUASHME: nfsd41: allocate struct nfsd4_session and slot table in one piece
> [PATCH 15/21] SQUASHME: nfsd41: no need to INIT_LIST_HEAD in alloc_init_session just prior to list_add
> [PATCH 16/21] SQUASHME: nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1
> [PATCH 17/21] nfsd: pass nfsd4_compound_state* to nfs4_preprocess_{state,seq}id_op
> [PATCH 18/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op
> [PATCH 19/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op
> [PATCH 20/21] SQUASHME: Revert "nfsd41: Add Kconfig symbols for NFSv4.1"
> [PATCH 21/21] SQUASHME: get rid of CONFIG_NFSD_V4_1
>
> The review comments that were fixed are listed below.
>
> Benny
>
> ================================================================================
> Re: [pnfs] [PATCH 0/47] NFSv4.1 Sessions server code for 2.6.30
> fix nfs4_xdr_dec_cb_recall rpc_res==NULL case
>
> [PATCH 01/21] SQUASHME: nfsd41: conditionally decode_sequence in nfs4_xdr_dec_cb_recall
>
> ================================================================================
> Re: [PATCH v2 04/47] nfs41: common protocol definitions
>> Would it be less confusing just to use !EXCHGID_FLAG_MASK_A and
>> !EXCHGID_FLAG_MASK_R everywhere?
>
> [PATCH 04/21] SQUASHME: nfs41: reverse EXCHGID4_INVAL_FLAG_MASK_{A,R}
> [PATCH 05/21] SQUASHME: nfsd41: reverse use of EXCHGID4_INVAL_FLAG_MASK_A
>
> ================================================================================
> Re: [PATCH v2 06/47] nfsd41: Add Kconfig symbols for NFSv4.1
>> Stupid question: do we need CONFIG_NFSD_V4_1 at all? How many people
>>> will want to build a kernel with v4.0 but not v4.1?
>
>> (And: do we have an interface that allows turning off 4.1 at run-time?
>>>> That's more important than the config option.)
>
> [PATCH 02/21] nfsd41: control nfsv4.1 svc via /proc/fs/nfsd/versions
> [PATCH 20/21] SQUASHME: Revert "nfsd41: Add Kconfig symbols for NFSv4.1"
> [PATCH 21/21] SQUASHME: get rid of CONFIG_NFSD_V4_1
>
> ================================================================================
> Re: [PATCH v2 07/47] nfsd41: define nfs41 error codes
> fix NFSERR_REPLAY_ME on rebase
>
> Fixed in rebase
>
> ================================================================================
> RE: [pnfs] [PATCH v2 15/47] nfsd41: exchange_id operation
>> Would it simplify things just to embed an xdr_netobj in
>> nfsd4_exchange_id?
>
> [PATCH 11/21] SQUASHME: nfsd41: embed an xdr_netobj in nfsd4_exchange_id
>
> ================================================================================
> RE: [pnfs] [PATCH v2 15/47] nfsd41: exchange_id operation (cont.)
>
>>> + /* Currently only support SP4_NONE */
>>>>> + if (exid->spa_how != SP4_NONE)
>>>>> + return nfserr_encr_alg_unsupp;
>>> Isn't support for the others mandatory? Let's just make this
>>> serverfault, in that case--this is a bug in the server. It'll be a
>>> reminder that we need to fix this....
>
> True. nfserr_encr_alg_unsupp is valid only for ssp_encr_algs.
> Andy, I believe you're the author of this. OK with you to return
> nfserr_serverfault instead?
>
> [PATCH 12/21] SQUASHME: nfsd41: return nfserr_serverfault for spa_how == SP4_MACH_CRED
>
> ================================================================================
> Re: [pnfs] [PATCH v2 16/47] nfsd41: match clientid establishment method
> simplify match_clientid_establishment, bool use_exchange_id
>
> [PATCH 06/21] SQUASHME: nfsd41: simplify match_clientid_establishment logic
>
> ================================================================================
> Re: [PATCH v2 17/47] nfsd41: sequence operation
> nfsd4_encode_sequence
>> + if (nfserr)
>>> + goto out;
> Just 'return nfserr'. I don't see the point of the goto if it's
> literally just replacing a return.
>
> [PATCH 07/21] SQUASHME: simplify nfsd4_encode_sequence error handling
> [PATCH 08/21] SQUASHME: simplify nfsd4_encode_create_session error handling
> [PATCH 09/21] SQUASHME: simplify nfsd4_encode_exchange_id error handling
>
> ================================================================================
> Re: [pnfs] [PATCH v2 18/47] nfsd41: enforce NFS4ERR_SEQUENCE_POS operation order rules
> update Doc and wiki TODO about need to enforce rules for EXCHANGE_ID as
> last op and NFS4ERR_NOT_ONLY_OP.
>
> [PATCH 10/21] SQUASHME: nfsd41: document unenforced nfs41 compound ordering rules.
>
> ================================================================================
> Re: [PATCH v2 23/47] nfsd41: create_session operation
> fixup style comments.
>
> [PATCH 13/21] SQUASHME: nfsd41: fix comment style in init_forechannel_attrs
>
> fix alloc_init_session
>
> [PATCH 14/21] SQUASHME: nfsd41: allocate struct nfsd4_session and slot table in one piece
> [PATCH 15/21] SQUASHME: nfsd41: no need to INIT_LIST_HEAD in alloc_init_session just prior to list_add
>
> ================================================================================
> Re: [PATCH v2 27/47] nfsd41: stateid handling
>> + status = nfsd4_process_open1(rqstp, open);
> Seems all your using is the cstate--maybe pass that instead?
>
> [PATCH 16/21] SQUASHME: nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1
>
> ================================================================================
> Re: [PATCH v2 27/47] nfsd41: stateid handling (cont.)
>> + if (nfsd4_has_session(cstate))
>>> + flags |= HAS_SESSION;
>>> nfs4_lock_state();
>>> /* check stateid */
>>> if ((status = nfs4_preprocess_stateid_op(&cstate->current_fh,
> You could pass the cstate to preprocess_stateid_op instead of
> current_fh, and let it do the nfsd4_has_session check instead of making
> all the callers do it.
>
> [PATCH 17/21] nfsd: pass nfsd4_compound_state* to nfs4_preprocess_{state,seq}id_op
> [PATCH 18/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op
> [PATCH 19/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op
>
>
> _______________________________________________
> pNFS mailing list
> pNFS@linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [pnfs] [PATCH 0/21] nfsd41-for-2.6.30 review cleanup
2009-04-03 0:45 ` [pnfs] [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
@ 2009-04-03 0:51 ` Benny Halevy
2009-04-03 1:58 ` J. Bruce Fields
0 siblings, 1 reply; 25+ messages in thread
From: Benny Halevy @ 2009-04-03 0:51 UTC (permalink / raw)
To: J. Bruce Fields; +Cc: Andy Adamson, NFS list, pNFS Mailing List
On Apr. 03, 2009, 3:45 +0300, Benny Halevy <bhalevy@panasas.com> wrote:
> On Apr. 03, 2009, 1:33 +0300, Benny Halevy <bhalevy@panasas.com> wrote:
>> Bruce,
>>
>> The following patches fix non-DRC review comments.
>> They are untested yet, but I wanted to send them out ASAP
>
> Passed cthon tests over nfs4 so far from several clients:
> same kernel, nfs41-for-2.6.30 from today, and from 2.6.27.19-78.2.30.fc9.x86_64.
> The latter hit a single unreproducible failure in the bigfile test.
>
> No pynfs regressions.
Oh, and I forgot to mention that I saw these suspicious messages
on /var/log/messages a while after my last cthon test finished and the
test server was essentially idle:
Apr 3 03:19:05 tl1 kernel: nfsd: non-standard errno: -9
Apr 3 03:25:52 tl1 kernel: nfsd: inode locked twice during operation.
Apr 3 03:25:54 tl1 kernel: RPC: multiple fragments per record not supported
I'm not what caused them and if they show up with the nfsd41 patches
or not.
Benny
>
> Benny
>
>> so that people will have some time to comment on them before I
>> squash them in.
>>
>> [PATCH 01/21] SQUASHME: nfsd41: conditionally decode_sequence in nfs4_xdr_dec_cb_recall
>> [PATCH 02/21] nfsd41: control nfsv4.1 svc via /proc/fs/nfsd/versions
>> [PATCH 03/21] SQUASHME: nfsd41: disable support for minorversion by default
>> [PATCH 04/21] SQUASHME: nfs41: reverse EXCHGID4_INVAL_FLAG_MASK_{A,R}
>> [PATCH 05/21] SQUASHME: nfsd41: reverse use of EXCHGID4_INVAL_FLAG_MASK_A
>> [PATCH 06/21] SQUASHME: nfsd41: simplify match_clientid_establishment logic
>> [PATCH 07/21] SQUASHME: simplify nfsd4_encode_sequence error handling
>> [PATCH 08/21] SQUASHME: simplify nfsd4_encode_create_session error handling
>> [PATCH 09/21] SQUASHME: simplify nfsd4_encode_exchange_id error handling
>> [PATCH 10/21] SQUASHME: nfsd41: document unenforced nfs41 compound ordering rules.
>> [PATCH 11/21] SQUASHME: nfsd41: embed an xdr_netobj in nfsd4_exchange_id
>> [PATCH 12/21] SQUASHME: nfsd41: return nfserr_serverfault for spa_how == SP4_MACH_CRED
>> [PATCH 13/21] SQUASHME: nfsd41: fix comment style in init_forechannel_attrs
>> [PATCH 14/21] SQUASHME: nfsd41: allocate struct nfsd4_session and slot table in one piece
>> [PATCH 15/21] SQUASHME: nfsd41: no need to INIT_LIST_HEAD in alloc_init_session just prior to list_add
>> [PATCH 16/21] SQUASHME: nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1
>> [PATCH 17/21] nfsd: pass nfsd4_compound_state* to nfs4_preprocess_{state,seq}id_op
>> [PATCH 18/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op
>> [PATCH 19/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op
>> [PATCH 20/21] SQUASHME: Revert "nfsd41: Add Kconfig symbols for NFSv4.1"
>> [PATCH 21/21] SQUASHME: get rid of CONFIG_NFSD_V4_1
>>
>> The review comments that were fixed are listed below.
>>
>> Benny
>>
>> ================================================================================
>> Re: [pnfs] [PATCH 0/47] NFSv4.1 Sessions server code for 2.6.30
>> fix nfs4_xdr_dec_cb_recall rpc_res==NULL case
>>
>> [PATCH 01/21] SQUASHME: nfsd41: conditionally decode_sequence in nfs4_xdr_dec_cb_recall
>>
>> ================================================================================
>> Re: [PATCH v2 04/47] nfs41: common protocol definitions
>>> Would it be less confusing just to use !EXCHGID_FLAG_MASK_A and
>>> !EXCHGID_FLAG_MASK_R everywhere?
>> [PATCH 04/21] SQUASHME: nfs41: reverse EXCHGID4_INVAL_FLAG_MASK_{A,R}
>> [PATCH 05/21] SQUASHME: nfsd41: reverse use of EXCHGID4_INVAL_FLAG_MASK_A
>>
>> ================================================================================
>> Re: [PATCH v2 06/47] nfsd41: Add Kconfig symbols for NFSv4.1
>>> Stupid question: do we need CONFIG_NFSD_V4_1 at all? How many people
>>>> will want to build a kernel with v4.0 but not v4.1?
>>> (And: do we have an interface that allows turning off 4.1 at run-time?
>>>>> That's more important than the config option.)
>> [PATCH 02/21] nfsd41: control nfsv4.1 svc via /proc/fs/nfsd/versions
>> [PATCH 20/21] SQUASHME: Revert "nfsd41: Add Kconfig symbols for NFSv4.1"
>> [PATCH 21/21] SQUASHME: get rid of CONFIG_NFSD_V4_1
>>
>> ================================================================================
>> Re: [PATCH v2 07/47] nfsd41: define nfs41 error codes
>> fix NFSERR_REPLAY_ME on rebase
>>
>> Fixed in rebase
>>
>> ================================================================================
>> RE: [pnfs] [PATCH v2 15/47] nfsd41: exchange_id operation
>>> Would it simplify things just to embed an xdr_netobj in
>>> nfsd4_exchange_id?
>> [PATCH 11/21] SQUASHME: nfsd41: embed an xdr_netobj in nfsd4_exchange_id
>>
>> ================================================================================
>> RE: [pnfs] [PATCH v2 15/47] nfsd41: exchange_id operation (cont.)
>>
>>>> + /* Currently only support SP4_NONE */
>>>>>> + if (exid->spa_how != SP4_NONE)
>>>>>> + return nfserr_encr_alg_unsupp;
>>>> Isn't support for the others mandatory? Let's just make this
>>>> serverfault, in that case--this is a bug in the server. It'll be a
>>>> reminder that we need to fix this....
>> True. nfserr_encr_alg_unsupp is valid only for ssp_encr_algs.
>> Andy, I believe you're the author of this. OK with you to return
>> nfserr_serverfault instead?
>>
>> [PATCH 12/21] SQUASHME: nfsd41: return nfserr_serverfault for spa_how == SP4_MACH_CRED
>>
>> ================================================================================
>> Re: [pnfs] [PATCH v2 16/47] nfsd41: match clientid establishment method
>> simplify match_clientid_establishment, bool use_exchange_id
>>
>> [PATCH 06/21] SQUASHME: nfsd41: simplify match_clientid_establishment logic
>>
>> ================================================================================
>> Re: [PATCH v2 17/47] nfsd41: sequence operation
>> nfsd4_encode_sequence
>>> + if (nfserr)
>>>> + goto out;
>> Just 'return nfserr'. I don't see the point of the goto if it's
>> literally just replacing a return.
>>
>> [PATCH 07/21] SQUASHME: simplify nfsd4_encode_sequence error handling
>> [PATCH 08/21] SQUASHME: simplify nfsd4_encode_create_session error handling
>> [PATCH 09/21] SQUASHME: simplify nfsd4_encode_exchange_id error handling
>>
>> ================================================================================
>> Re: [pnfs] [PATCH v2 18/47] nfsd41: enforce NFS4ERR_SEQUENCE_POS operation order rules
>> update Doc and wiki TODO about need to enforce rules for EXCHANGE_ID as
>> last op and NFS4ERR_NOT_ONLY_OP.
>>
>> [PATCH 10/21] SQUASHME: nfsd41: document unenforced nfs41 compound ordering rules.
>>
>> ================================================================================
>> Re: [PATCH v2 23/47] nfsd41: create_session operation
>> fixup style comments.
>>
>> [PATCH 13/21] SQUASHME: nfsd41: fix comment style in init_forechannel_attrs
>>
>> fix alloc_init_session
>>
>> [PATCH 14/21] SQUASHME: nfsd41: allocate struct nfsd4_session and slot table in one piece
>> [PATCH 15/21] SQUASHME: nfsd41: no need to INIT_LIST_HEAD in alloc_init_session just prior to list_add
>>
>> ================================================================================
>> Re: [PATCH v2 27/47] nfsd41: stateid handling
>>> + status = nfsd4_process_open1(rqstp, open);
>> Seems all your using is the cstate--maybe pass that instead?
>>
>> [PATCH 16/21] SQUASHME: nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1
>>
>> ================================================================================
>> Re: [PATCH v2 27/47] nfsd41: stateid handling (cont.)
>>> + if (nfsd4_has_session(cstate))
>>>> + flags |= HAS_SESSION;
>>>> nfs4_lock_state();
>>>> /* check stateid */
>>>> if ((status = nfs4_preprocess_stateid_op(&cstate->current_fh,
>> You could pass the cstate to preprocess_stateid_op instead of
>> current_fh, and let it do the nfsd4_has_session check instead of making
>> all the callers do it.
>>
>> [PATCH 17/21] nfsd: pass nfsd4_compound_state* to nfs4_preprocess_{state,seq}id_op
>> [PATCH 18/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op
>> [PATCH 19/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op
>>
>>
>> _______________________________________________
>> pNFS mailing list
>> pNFS@linux-nfs.org
>> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
> _______________________________________________
> pNFS mailing list
> pNFS@linux-nfs.org
> http://linux-nfs.org/cgi-bin/mailman/listinfo/pnfs
^ permalink raw reply [flat|nested] 25+ messages in thread
* Re: [pnfs] [PATCH 0/21] nfsd41-for-2.6.30 review cleanup
2009-04-03 0:51 ` Benny Halevy
@ 2009-04-03 1:58 ` J. Bruce Fields
0 siblings, 0 replies; 25+ messages in thread
From: J. Bruce Fields @ 2009-04-03 1:58 UTC (permalink / raw)
To: Benny Halevy; +Cc: Andy Adamson, NFS list, pNFS Mailing List
On Fri, Apr 03, 2009 at 03:51:38AM +0300, Benny Halevy wrote:
> On Apr. 03, 2009, 3:45 +0300, Benny Halevy <bhalevy@panasas.com> wrote:
> > On Apr. 03, 2009, 1:33 +0300, Benny Halevy <bhalevy@panasas.com> wrote:
> >> Bruce,
> >>
> >> The following patches fix non-DRC review comments.
> >> They are untested yet, but I wanted to send them out ASAP
> >
> > Passed cthon tests over nfs4 so far from several clients:
> > same kernel, nfs41-for-2.6.30 from today, and from 2.6.27.19-78.2.30.fc9.x86_64.
> > The latter hit a single unreproducible failure in the bigfile test.
> >
> > No pynfs regressions.
>
> Oh, and I forgot to mention that I saw these suspicious messages
> on /var/log/messages a while after my last cthon test finished and the
> test server was essentially idle:
>
> Apr 3 03:19:05 tl1 kernel: nfsd: non-standard errno: -9
> Apr 3 03:25:52 tl1 kernel: nfsd: inode locked twice during operation.
> Apr 3 03:25:54 tl1 kernel: RPC: multiple fragments per record not supported
>
> I'm not what caused them and if they show up with the nfsd41 patches
> or not.
The last two look normal for pynfs runs.
The first I don't recall seeing before. Hm, -9 is EBADF. I'd be
curious where that's coming from.
Probably it's nothing serious--pynfs does weird stuff.
--b.
^ permalink raw reply [flat|nested] 25+ messages in thread
end of thread, other threads:[~2009-04-03 1:58 UTC | newest]
Thread overview: 25+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-04-02 22:33 [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
2009-04-02 22:37 ` [PATCH 01/21] SQUASHME: nfsd41: conditionally decode_sequence in nfs4_xdr_dec_cb_recall Benny Halevy
2009-04-02 22:37 ` [PATCH 02/21] nfsd41: control nfsv4.1 svc via /proc/fs/nfsd/versions Benny Halevy
2009-04-02 22:37 ` [PATCH 03/21] SQUASHME: nfsd41: disable support for minorversion by default Benny Halevy
2009-04-02 22:37 ` [PATCH 04/21] SQUASHME: nfs41: reverse EXCHGID4_INVAL_FLAG_MASK_{A,R} Benny Halevy
2009-04-02 22:37 ` [PATCH 05/21] SQUASHME: nfsd41: reverse use of EXCHGID4_INVAL_FLAG_MASK_A Benny Halevy
2009-04-02 22:37 ` [PATCH 06/21] SQUASHME: nfsd41: simplify match_clientid_establishment logic Benny Halevy
2009-04-02 22:38 ` [PATCH 07/21] SQUASHME: simplify nfsd4_encode_sequence error handling Benny Halevy
2009-04-02 22:38 ` [PATCH 08/21] SQUASHME: simplify nfsd4_encode_create_session " Benny Halevy
2009-04-02 22:38 ` [PATCH 09/21] SQUASHME: simplify nfsd4_encode_exchange_id " Benny Halevy
2009-04-02 22:38 ` [PATCH 10/21] SQUASHME: nfsd41: document unenforced nfs41 compound ordering rules Benny Halevy
2009-04-02 22:38 ` [PATCH 11/21] SQUASHME: nfsd41: embed an xdr_netobj in nfsd4_exchange_id Benny Halevy
2009-04-02 22:38 ` [PATCH 12/21] SQUASHME: nfsd41: return nfserr_serverfault for spa_how == SP4_MACH_CRED Benny Halevy
2009-04-02 22:38 ` [PATCH 13/21] SQUASHME: nfsd41: fix comment style in init_forechannel_attrs Benny Halevy
2009-04-02 22:38 ` [PATCH 14/21] SQUASHME: nfsd41: allocate struct nfsd4_session and slot table in one piece Benny Halevy
2009-04-02 22:38 ` [PATCH 15/21] SQUASHME: nfsd41: no need to INIT_LIST_HEAD in alloc_init_session just prior to list_add Benny Halevy
2009-04-02 22:38 ` [PATCH 16/21] SQUASHME: nfsd41: pass nfsd4_compoundres * to nfsd4_process_open1 Benny Halevy
2009-04-02 22:38 ` [PATCH 17/21] nfsd: pass nfsd4_compound_state* to nfs4_preprocess_{state,seq}id_op Benny Halevy
2009-04-02 22:38 ` [PATCH 18/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_stateid_op Benny Halevy
2009-04-02 22:38 ` [PATCH 19/21] SQUASHME: nfsd41: calculate HAS_SESSION in nfs4_preprocess_seqid_op Benny Halevy
2009-04-02 22:38 ` [PATCH 20/21] SQUASHME: Revert "nfsd41: Add Kconfig symbols for NFSv4.1" Benny Halevy
2009-04-02 22:39 ` [PATCH 21/21] SQUASHME: get rid of CONFIG_NFSD_V4_1 Benny Halevy
2009-04-03 0:45 ` [pnfs] [PATCH 0/21] nfsd41-for-2.6.30 review cleanup Benny Halevy
2009-04-03 0:51 ` Benny Halevy
2009-04-03 1:58 ` J. Bruce Fields
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox