Linux NFS development
 help / color / mirror / Atom feed
* [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