linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] NFSv4: Send implementation id with exchange_id
@ 2012-02-16 16:17 Weston Andros Adamson
  2012-02-16 17:30 ` Jim Rees
  2012-02-16 20:40 ` Myklebust, Trond
  0 siblings, 2 replies; 17+ messages in thread
From: Weston Andros Adamson @ 2012-02-16 16:17 UTC (permalink / raw)
  To: trond.myklebust; +Cc: linux-nfs, Weston Andros Adamson

Send the nfs implementation id in EXCHANGE_ID requests unless the module
parameter nfs.send_implementation_id is 0.

This adds a CONFIG variable for the nii_domain that defaults to "kernel.org".

Signed-off-by: Weston Andros Adamson <dros@netapp.com>
---
 Documentation/kernel-parameters.txt |    9 ++++++++
 fs/nfs/Kconfig                      |    8 +++++++
 fs/nfs/nfs4xdr.c                    |   38 +++++++++++++++++++++++++++++++++-
 3 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 1d369c6..7bae0fd 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1678,6 +1678,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
 			back to using the idmapper.
 			To turn off this behaviour, set the value to '0'.
 
+	nfs.send_implementation_id =
+			[NFSv4.1] Send client implementation identification
+			information in exchange_id requests.
+			If zero, no implementation identification information
+			will be sent.
+			The default is to send the implementation identification
+			information.
+
+
 	nmi_debug=	[KNL,AVR32,SH] Specify one or more actions to take
 			when a NMI is triggered.
 			Format: [state][,regs][,debounce][,die]
diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
index ee86cfc..09f9e38 100644
--- a/fs/nfs/Kconfig
+++ b/fs/nfs/Kconfig
@@ -99,6 +99,14 @@ config PNFS_OBJLAYOUT
 	depends on NFS_FS && NFS_V4_1 && SCSI_OSD_ULD
 	default m
 
+config NFS_V4_1_IMPLEMENTATION_ID_DOMAIN
+	string "NFSv4.1 Implementation ID Domain"
+	depends on NFS_V4_1
+	default "kernel.org"
+	help
+	  This value will be used in EXCHANGE_ID compounds to help identify
+	  the client implementation.
+
 config ROOT_NFS
 	bool "Root file system on NFS"
 	depends on NFS_FS=y && IP_PNP
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index ae78343..70ded94 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -44,6 +44,8 @@
 #include <linux/pagemap.h>
 #include <linux/proc_fs.h>
 #include <linux/kdev_t.h>
+#include <linux/module.h>
+#include <linux/utsname.h>
 #include <linux/sunrpc/clnt.h>
 #include <linux/sunrpc/msg_prot.h>
 #include <linux/sunrpc/gss_api.h>
@@ -271,7 +273,12 @@ static int nfs4_stat_to_errno(int);
 				1 /* flags */ + \
 				1 /* spa_how */ + \
 				0 /* SP4_NONE (for now) */ + \
-				1 /* zero implemetation id array */)
+				1 /* implemetation id array of size 1 */ + \
+				1 /* nii_domain */ + \
+				XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
+				1 /* nii_name */ + \
+				XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
+				3 /* nii_date */)
 #define decode_exchange_id_maxsz (op_decode_hdr_maxsz + \
 				2 /* eir_clientid */ + \
 				1 /* eir_sequenceid */ + \
@@ -838,6 +845,12 @@ const u32 nfs41_maxread_overhead = ((RPC_MAX_HEADER_WITH_AUTH +
 				    XDR_UNIT);
 #endif /* CONFIG_NFS_V4_1 */
 
+static unsigned short send_implementation_id = 1;
+
+module_param(send_implementation_id, ushort, 0644);
+MODULE_PARM_DESC(send_implementation_id,
+		"Send implementation ID with NFSv4.1 exchange_id");
+
 static const umode_t nfs_type2fmt[] = {
 	[NF4BAD] = 0,
 	[NF4REG] = S_IFREG,
@@ -1766,6 +1779,8 @@ static void encode_exchange_id(struct xdr_stream *xdr,
 			       struct compound_hdr *hdr)
 {
 	__be32 *p;
+	char impl_name[260]; /* 4 strs max 64 each, spaces and null */
+	int len = 0;
 
 	p = reserve_space(xdr, 4 + sizeof(args->verifier->data));
 	*p++ = cpu_to_be32(OP_EXCHANGE_ID);
@@ -1776,7 +1791,26 @@ static void encode_exchange_id(struct xdr_stream *xdr,
 	p = reserve_space(xdr, 12);
 	*p++ = cpu_to_be32(args->flags);
 	*p++ = cpu_to_be32(0);	/* zero length state_protect4_a */
-	*p = cpu_to_be32(0);	/* zero length implementation id array */
+
+	if (send_implementation_id)
+		len = snprintf(impl_name, sizeof(impl_name), "%s %s %s %s",
+			       utsname()->sysname, utsname()->release,
+			       utsname()->version, utsname()->machine);
+
+	if (len > 0) {
+		*p = cpu_to_be32(1);	/* implementation id array length=1 */
+
+		encode_string(xdr,
+			strlen(CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN),
+			CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN);
+		encode_string(xdr, len, impl_name);
+		/* just send zeros for nii_date - the date is in nii_name */
+		p = reserve_space(xdr, 12);
+		p = xdr_encode_hyper(p, 0);
+		*p = cpu_to_be32(0);
+	} else
+		*p = cpu_to_be32(0);	/* implementation id array length=0 */
+
 	hdr->nops++;
 	hdr->replen += decode_exchange_id_maxsz;
 }
-- 
1.7.4.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH 1/3] NFSv4: Send implementation id with exchange_id
  2012-02-16 16:17 [PATCH 1/3] NFSv4: Send implementation id with exchange_id Weston Andros Adamson
@ 2012-02-16 17:30 ` Jim Rees
  2012-02-16 17:36   ` Myklebust, Trond
  2012-02-16 17:37   ` Adamson, Dros
  2012-02-16 20:40 ` Myklebust, Trond
  1 sibling, 2 replies; 17+ messages in thread
From: Jim Rees @ 2012-02-16 17:30 UTC (permalink / raw)
  To: Weston Andros Adamson; +Cc: trond.myklebust, linux-nfs

Weston Andros Adamson wrote:

  Send the nfs implementation id in EXCHANGE_ID requests unless the module
  parameter nfs.send_implementation_id is 0.
  
  This adds a CONFIG variable for the nii_domain that defaults to "kernel.org".
  
  Signed-off-by: Weston Andros Adamson <dros@netapp.com>

  @@ -271,7 +273,12 @@ static int nfs4_stat_to_errno(int);
   				1 /* flags */ + \
   				1 /* spa_how */ + \
   				0 /* SP4_NONE (for now) */ + \
  -				1 /* zero implemetation id array */)
  +				1 /* implemetation id array of size 1 */ + \

implemetation -> implementation
Might as well fix this typo while you're at it.

General comment... If this is going to be configurable, I'd rather make it a
sysctl, and be able to set the id to whatever I want at run time.  But
that's because I like to be able to break things.  I suspect Trond will
disagree.

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 1/3] NFSv4: Send implementation id with exchange_id
  2012-02-16 17:30 ` Jim Rees
@ 2012-02-16 17:36   ` Myklebust, Trond
  2012-02-16 17:37   ` Adamson, Dros
  1 sibling, 0 replies; 17+ messages in thread
From: Myklebust, Trond @ 2012-02-16 17:36 UTC (permalink / raw)
  To: Jim Rees; +Cc: Adamson, Dros, linux-nfs@vger.kernel.org

T24gVGh1LCAyMDEyLTAyLTE2IGF0IDEyOjMwIC0wNTAwLCBKaW0gUmVlcyB3cm90ZToNCj4gV2Vz
dG9uIEFuZHJvcyBBZGFtc29uIHdyb3RlOg0KPiANCj4gICBTZW5kIHRoZSBuZnMgaW1wbGVtZW50
YXRpb24gaWQgaW4gRVhDSEFOR0VfSUQgcmVxdWVzdHMgdW5sZXNzIHRoZSBtb2R1bGUNCj4gICBw
YXJhbWV0ZXIgbmZzLnNlbmRfaW1wbGVtZW50YXRpb25faWQgaXMgMC4NCj4gICANCj4gICBUaGlz
IGFkZHMgYSBDT05GSUcgdmFyaWFibGUgZm9yIHRoZSBuaWlfZG9tYWluIHRoYXQgZGVmYXVsdHMg
dG8gImtlcm5lbC5vcmciLg0KPiAgIA0KPiAgIFNpZ25lZC1vZmYtYnk6IFdlc3RvbiBBbmRyb3Mg
QWRhbXNvbiA8ZHJvc0BuZXRhcHAuY29tPg0KPiANCj4gICBAQCAtMjcxLDcgKzI3MywxMiBAQCBz
dGF0aWMgaW50IG5mczRfc3RhdF90b19lcnJubyhpbnQpOw0KPiAgICAJCQkJMSAvKiBmbGFncyAq
LyArIFwNCj4gICAgCQkJCTEgLyogc3BhX2hvdyAqLyArIFwNCj4gICAgCQkJCTAgLyogU1A0X05P
TkUgKGZvciBub3cpICovICsgXA0KPiAgIC0JCQkJMSAvKiB6ZXJvIGltcGxlbWV0YXRpb24gaWQg
YXJyYXkgKi8pDQo+ICAgKwkJCQkxIC8qIGltcGxlbWV0YXRpb24gaWQgYXJyYXkgb2Ygc2l6ZSAx
ICovICsgXA0KPiANCj4gaW1wbGVtZXRhdGlvbiAtPiBpbXBsZW1lbnRhdGlvbg0KPiBNaWdodCBh
cyB3ZWxsIGZpeCB0aGlzIHR5cG8gd2hpbGUgeW91J3JlIGF0IGl0Lg0KPiANCj4gR2VuZXJhbCBj
b21tZW50Li4uIElmIHRoaXMgaXMgZ29pbmcgdG8gYmUgY29uZmlndXJhYmxlLCBJJ2QgcmF0aGVy
IG1ha2UgaXQgYQ0KPiBzeXNjdGwsIGFuZCBiZSBhYmxlIHRvIHNldCB0aGUgaWQgdG8gd2hhdGV2
ZXIgSSB3YW50IGF0IHJ1biB0aW1lLiAgQnV0DQo+IHRoYXQncyBiZWNhdXNlIEkgbGlrZSB0byBi
ZSBhYmxlIHRvIGJyZWFrIHRoaW5ncy4gIEkgc3VzcGVjdCBUcm9uZCB3aWxsDQo+IGRpc2FncmVl
Lg0KDQpJIGRvLiBXZSBkb24ndCBtYWtlIHRoZSAndW5hbWUnIGNvbmZpZ3VyYWJsZSBhcyBhIHN5
c2N0bC4gSG93IGlzIHRoaXMNCmFueSBkaWZmZXJlbnQ/IFdoeSB3b3VsZCB5b3Ugd2FudCB0byBk
ZWxpYmVyYXRlbHkgbWlzcmVwcmVzZW50IHdoaWNoIE5GUw0KY2xpZW50IHRoaXMgaXMgdG8gdGhl
IHNlcnZlcj8gVGhlIGltcGxlbWVudGF0aW9uIGlkIGlzIHRoZXJlIGZvciBlcnJvcg0KbG9nZ2lu
ZyBwdXJwb3Nlcywgbm90aGluZyBlbHNlLi4uDQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0DQpMaW51
eCBORlMgY2xpZW50IG1haW50YWluZXINCg0KTmV0QXBwDQpUcm9uZC5NeWtsZWJ1c3RAbmV0YXBw
LmNvbQ0Kd3d3Lm5ldGFwcC5jb20NCg0K

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 1/3] NFSv4: Send implementation id with exchange_id
  2012-02-16 17:30 ` Jim Rees
  2012-02-16 17:36   ` Myklebust, Trond
@ 2012-02-16 17:37   ` Adamson, Dros
  2012-02-16 17:41     ` Adamson, Dros
  1 sibling, 1 reply; 17+ messages in thread
From: Adamson, Dros @ 2012-02-16 17:37 UTC (permalink / raw)
  To: Jim Rees; +Cc: Myklebust, Trond, <linux-nfs@vger.kernel.org>

[-- Attachment #1: Type: text/plain, Size: 1067 bytes --]


On Feb 16, 2012, at 12:30 PM, Jim Rees wrote:

> Weston Andros Adamson wrote:
> 
>  Send the nfs implementation id in EXCHANGE_ID requests unless the module
>  parameter nfs.send_implementation_id is 0.
> 
>  This adds a CONFIG variable for the nii_domain that defaults to "kernel.org".
> 
>  Signed-off-by: Weston Andros Adamson <dros@netapp.com>
> 
>  @@ -271,7 +273,12 @@ static int nfs4_stat_to_errno(int);
>   				1 /* flags */ + \
>   				1 /* spa_how */ + \
>   				0 /* SP4_NONE (for now) */ + \
>  -				1 /* zero implemetation id array */)
>  +				1 /* implemetation id array of size 1 */ + \
> 
> implemetation -> implementation
> Might as well fix this typo while you're at it.
> 
> General comment... If this is going to be configurable, I'd rather make it a
> sysctl, and be able to set the id to whatever I want at run time.  But
> that's because I like to be able to break things.  I suspect Trond will
> disagree.

Hrm my ispell pass missed this.

Yes, Trond was against using a sysctl.  This is how he wants it.

-dros

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 1374 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 1/3] NFSv4: Send implementation id with exchange_id
  2012-02-16 17:37   ` Adamson, Dros
@ 2012-02-16 17:41     ` Adamson, Dros
  2012-02-16 20:10       ` Jim Rees
  0 siblings, 1 reply; 17+ messages in thread
From: Adamson, Dros @ 2012-02-16 17:41 UTC (permalink / raw)
  To: Adamson, Dros
  Cc: Jim Rees, Myklebust, Trond, <linux-nfs@vger.kernel.org>

[-- Attachment #1: Type: text/plain, Size: 1135 bytes --]


On Feb 16, 2012, at 12:37 PM, Adamson, Dros wrote:

> 
> On Feb 16, 2012, at 12:30 PM, Jim Rees wrote:
> 
>> Weston Andros Adamson wrote:
>> 
>> Send the nfs implementation id in EXCHANGE_ID requests unless the module
>> parameter nfs.send_implementation_id is 0.
>> 
>> This adds a CONFIG variable for the nii_domain that defaults to "kernel.org".
>> 
>> Signed-off-by: Weston Andros Adamson <dros@netapp.com>
>> 
>> @@ -271,7 +273,12 @@ static int nfs4_stat_to_errno(int);
>>  				1 /* flags */ + \
>>  				1 /* spa_how */ + \
>>  				0 /* SP4_NONE (for now) */ + \
>> -				1 /* zero implemetation id array */)
>> +				1 /* implemetation id array of size 1 */ + \
>> 
>> implemetation -> implementation
>> Might as well fix this typo while you're at it.
>> 
>> General comment... If this is going to be configurable, I'd rather make it a
>> sysctl, and be able to set the id to whatever I want at run time.  But
>> that's because I like to be able to break things.  I suspect Trond will
>> disagree.
> 
> Hrm my ispell pass missed this.

… I'll wait for additional comments before reposting.

-dros

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 1374 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 1/3] NFSv4: Send implementation id with exchange_id
  2012-02-16 17:41     ` Adamson, Dros
@ 2012-02-16 20:10       ` Jim Rees
  2012-02-16 20:35         ` Myklebust, Trond
  0 siblings, 1 reply; 17+ messages in thread
From: Jim Rees @ 2012-02-16 20:10 UTC (permalink / raw)
  To: Adamson, Dros; +Cc: Myklebust, Trond, <linux-nfs@vger.kernel.org>

Adamson, Dros wrote:

  >> General comment... If this is going to be configurable, I'd rather make it a
  >> sysctl, and be able to set the id to whatever I want at run time.  But
  >> that's because I like to be able to break things.  I suspect Trond will
  >> disagree.
  > 
  > Hrm my ispell pass missed this.
  
  … I'll wait for additional comments before reposting.

I guess my point was, why make it configurable at all?

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 1/3] NFSv4: Send implementation id with exchange_id
  2012-02-16 20:10       ` Jim Rees
@ 2012-02-16 20:35         ` Myklebust, Trond
  0 siblings, 0 replies; 17+ messages in thread
From: Myklebust, Trond @ 2012-02-16 20:35 UTC (permalink / raw)
  To: Jim Rees; +Cc: Adamson, Dros, <linux-nfs@vger.kernel.org>

T24gVGh1LCAyMDEyLTAyLTE2IGF0IDE1OjEwIC0wNTAwLCBKaW0gUmVlcyB3cm90ZToNCj4gQWRh
bXNvbiwgRHJvcyB3cm90ZToNCj4gDQo+ICAgPj4gR2VuZXJhbCBjb21tZW50Li4uIElmIHRoaXMg
aXMgZ29pbmcgdG8gYmUgY29uZmlndXJhYmxlLCBJJ2QgcmF0aGVyIG1ha2UgaXQgYQ0KPiAgID4+
IHN5c2N0bCwgYW5kIGJlIGFibGUgdG8gc2V0IHRoZSBpZCB0byB3aGF0ZXZlciBJIHdhbnQgYXQg
cnVuIHRpbWUuICBCdXQNCj4gICA+PiB0aGF0J3MgYmVjYXVzZSBJIGxpa2UgdG8gYmUgYWJsZSB0
byBicmVhayB0aGluZ3MuICBJIHN1c3BlY3QgVHJvbmQgd2lsbA0KPiAgID4+IGRpc2FncmVlLg0K
PiAgID4gDQo+ICAgPiBIcm0gbXkgaXNwZWxsIHBhc3MgbWlzc2VkIHRoaXMuDQo+ICAgDQo+ICAg
4oCmIEknbGwgd2FpdCBmb3IgYWRkaXRpb25hbCBjb21tZW50cyBiZWZvcmUgcmVwb3N0aW5nLg0K
PiANCj4gSSBndWVzcyBteSBwb2ludCB3YXMsIHdoeSBtYWtlIGl0IGNvbmZpZ3VyYWJsZSBhdCBh
bGw/DQoNClVuZm9ydHVuYXRlbHksIHRoZSBzcGVjIGhhcyBzb21lIHdpbGQgaWRlYXMgYWJvdXQg
aG93IHRvIGlkZW50aWZ5IGFuIE5GUw0KY2xpZW50LiBJbiBwYXJ0aWN1bGFyIGl0IHRoaW5rcyB0
aGF0IHRoZXJlIGlzIGFuICdpbXBsZW1lbnRvcicgd2l0aCBhDQpETlMgYWRkcmVzcy4uLg0KDQot
LSANClRyb25kIE15a2xlYnVzdA0KTGludXggTkZTIGNsaWVudCBtYWludGFpbmVyDQoNCk5ldEFw
cA0KVHJvbmQuTXlrbGVidXN0QG5ldGFwcC5jb20NCnd3dy5uZXRhcHAuY29tDQoNCg==

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 1/3] NFSv4: Send implementation id with exchange_id
  2012-02-16 16:17 [PATCH 1/3] NFSv4: Send implementation id with exchange_id Weston Andros Adamson
  2012-02-16 17:30 ` Jim Rees
@ 2012-02-16 20:40 ` Myklebust, Trond
  2012-02-16 20:52   ` Adamson, Dros
  1 sibling, 1 reply; 17+ messages in thread
From: Myklebust, Trond @ 2012-02-16 20:40 UTC (permalink / raw)
  To: Adamson, Dros; +Cc: linux-nfs@vger.kernel.org

T24gVGh1LCAyMDEyLTAyLTE2IGF0IDExOjE3IC0wNTAwLCBXZXN0b24gQW5kcm9zIEFkYW1zb24g
d3JvdGU6DQo+IFNlbmQgdGhlIG5mcyBpbXBsZW1lbnRhdGlvbiBpZCBpbiBFWENIQU5HRV9JRCBy
ZXF1ZXN0cyB1bmxlc3MgdGhlIG1vZHVsZQ0KPiBwYXJhbWV0ZXIgbmZzLnNlbmRfaW1wbGVtZW50
YXRpb25faWQgaXMgMC4NCj4gDQo+IFRoaXMgYWRkcyBhIENPTkZJRyB2YXJpYWJsZSBmb3IgdGhl
IG5paV9kb21haW4gdGhhdCBkZWZhdWx0cyB0byAia2VybmVsLm9yZyIuDQo+IA0KPiBTaWduZWQt
b2ZmLWJ5OiBXZXN0b24gQW5kcm9zIEFkYW1zb24gPGRyb3NAbmV0YXBwLmNvbT4NCj4gLS0tDQo+
ICBEb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCB8ICAgIDkgKysrKysrKysNCj4g
IGZzL25mcy9LY29uZmlnICAgICAgICAgICAgICAgICAgICAgIHwgICAgOCArKysrKysrDQo+ICBm
cy9uZnMvbmZzNHhkci5jICAgICAgICAgICAgICAgICAgICB8ICAgMzggKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrLQ0KPiAgMyBmaWxlcyBjaGFuZ2VkLCA1MyBpbnNlcnRpb25zKCsp
LCAyIGRlbGV0aW9ucygtKQ0KPiANCj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24va2VybmVs
LXBhcmFtZXRlcnMudHh0IGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQNCj4g
aW5kZXggMWQzNjljNi4uN2JhZTBmZCAxMDA2NDQNCj4gLS0tIGEvRG9jdW1lbnRhdGlvbi9rZXJu
ZWwtcGFyYW1ldGVycy50eHQNCj4gKysrIGIvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVy
cy50eHQNCj4gQEAgLTE2NzgsNiArMTY3OCwxNSBAQCBieXRlcyByZXNwZWN0aXZlbHkuIFN1Y2gg
bGV0dGVyIHN1ZmZpeGVzIGNhbiBhbHNvIGJlIGVudGlyZWx5IG9taXR0ZWQuDQo+ICAJCQliYWNr
IHRvIHVzaW5nIHRoZSBpZG1hcHBlci4NCj4gIAkJCVRvIHR1cm4gb2ZmIHRoaXMgYmVoYXZpb3Vy
LCBzZXQgdGhlIHZhbHVlIHRvICcwJy4NCj4gIA0KPiArCW5mcy5zZW5kX2ltcGxlbWVudGF0aW9u
X2lkID0NCj4gKwkJCVtORlN2NC4xXSBTZW5kIGNsaWVudCBpbXBsZW1lbnRhdGlvbiBpZGVudGlm
aWNhdGlvbg0KPiArCQkJaW5mb3JtYXRpb24gaW4gZXhjaGFuZ2VfaWQgcmVxdWVzdHMuDQo+ICsJ
CQlJZiB6ZXJvLCBubyBpbXBsZW1lbnRhdGlvbiBpZGVudGlmaWNhdGlvbiBpbmZvcm1hdGlvbg0K
PiArCQkJd2lsbCBiZSBzZW50Lg0KPiArCQkJVGhlIGRlZmF1bHQgaXMgdG8gc2VuZCB0aGUgaW1w
bGVtZW50YXRpb24gaWRlbnRpZmljYXRpb24NCj4gKwkJCWluZm9ybWF0aW9uLg0KPiArDQo+ICsN
Cj4gIAlubWlfZGVidWc9CVtLTkwsQVZSMzIsU0hdIFNwZWNpZnkgb25lIG9yIG1vcmUgYWN0aW9u
cyB0byB0YWtlDQo+ICAJCQl3aGVuIGEgTk1JIGlzIHRyaWdnZXJlZC4NCj4gIAkJCUZvcm1hdDog
W3N0YXRlXVsscmVnc11bLGRlYm91bmNlXVssZGllXQ0KPiBkaWZmIC0tZ2l0IGEvZnMvbmZzL0tj
b25maWcgYi9mcy9uZnMvS2NvbmZpZw0KPiBpbmRleCBlZTg2Y2ZjLi4wOWY5ZTM4IDEwMDY0NA0K
PiAtLS0gYS9mcy9uZnMvS2NvbmZpZw0KPiArKysgYi9mcy9uZnMvS2NvbmZpZw0KPiBAQCAtOTks
NiArOTksMTQgQEAgY29uZmlnIFBORlNfT0JKTEFZT1VUDQo+ICAJZGVwZW5kcyBvbiBORlNfRlMg
JiYgTkZTX1Y0XzEgJiYgU0NTSV9PU0RfVUxEDQo+ICAJZGVmYXVsdCBtDQo+ICANCj4gK2NvbmZp
ZyBORlNfVjRfMV9JTVBMRU1FTlRBVElPTl9JRF9ET01BSU4NCj4gKwlzdHJpbmcgIk5GU3Y0LjEg
SW1wbGVtZW50YXRpb24gSUQgRG9tYWluIg0KPiArCWRlcGVuZHMgb24gTkZTX1Y0XzENCj4gKwlk
ZWZhdWx0ICJrZXJuZWwub3JnIg0KPiArCWhlbHANCj4gKwkgIFRoaXMgdmFsdWUgd2lsbCBiZSB1
c2VkIGluIEVYQ0hBTkdFX0lEIGNvbXBvdW5kcyB0byBoZWxwIGlkZW50aWZ5DQo+ICsJICB0aGUg
Y2xpZW50IGltcGxlbWVudGF0aW9uLg0KDQpUaGlzIG5lZWRzIG1vcmUgZmxlc2hpbmcgb3V0IGlu
IG9yZGVyIHRvIGV4cGxhaW4gd2hhdCB0aGUgcHVycG9zZSBpcw0KKGlkZW50aWZ5IHRoZSBETlMg
ZG9tYWlubmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uKSwgYW5kIHdoYXQgZm9ybWF0IHRoZQ0Kc3Ry
aW5nIG5lZWRzIHRvIHRha2UgKEROUyBkb21haW5uYW1lKS4gWW91IG1pZ2h0IGFsc28gZm9sbG93
IHVwIHdpdGggYQ0KcmVjb21tZW5kYXRpb24gdGhhdCBpZiB0aGUgTkZTIGNsaWVudCBpcyB1bmNo
YW5nZWQgZnJvbSB0aGUgdXBzdHJlYW0NCmtlcm5lbCwgdGhlbiBwZW9wbGUgc2hvdWxkIHVzZSB0
aGUgZGVmYXVsdCAna2VybmVsLm9yZycuDQoNCj4gKw0KPiAgY29uZmlnIFJPT1RfTkZTDQo+ICAJ
Ym9vbCAiUm9vdCBmaWxlIHN5c3RlbSBvbiBORlMiDQo+ICAJZGVwZW5kcyBvbiBORlNfRlM9eSAm
JiBJUF9QTlANCj4gZGlmZiAtLWdpdCBhL2ZzL25mcy9uZnM0eGRyLmMgYi9mcy9uZnMvbmZzNHhk
ci5jDQo+IGluZGV4IGFlNzgzNDMuLjcwZGVkOTQgMTAwNjQ0DQo+IC0tLSBhL2ZzL25mcy9uZnM0
eGRyLmMNCj4gKysrIGIvZnMvbmZzL25mczR4ZHIuYw0KPiBAQCAtNDQsNiArNDQsOCBAQA0KPiAg
I2luY2x1ZGUgPGxpbnV4L3BhZ2VtYXAuaD4NCj4gICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+
DQo+ICAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxl
Lmg+DQo+ICsjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPg0KPiAgI2luY2x1ZGUgPGxpbnV4L3N1
bnJwYy9jbG50Lmg+DQo+ICAjaW5jbHVkZSA8bGludXgvc3VucnBjL21zZ19wcm90Lmg+DQo+ICAj
aW5jbHVkZSA8bGludXgvc3VucnBjL2dzc19hcGkuaD4NCj4gQEAgLTI3MSw3ICsyNzMsMTIgQEAg
c3RhdGljIGludCBuZnM0X3N0YXRfdG9fZXJybm8oaW50KTsNCj4gIAkJCQkxIC8qIGZsYWdzICov
ICsgXA0KPiAgCQkJCTEgLyogc3BhX2hvdyAqLyArIFwNCj4gIAkJCQkwIC8qIFNQNF9OT05FIChm
b3Igbm93KSAqLyArIFwNCj4gLQkJCQkxIC8qIHplcm8gaW1wbGVtZXRhdGlvbiBpZCBhcnJheSAq
LykNCj4gKwkJCQkxIC8qIGltcGxlbWV0YXRpb24gaWQgYXJyYXkgb2Ygc2l6ZSAxICovICsgXA0K
PiArCQkJCTEgLyogbmlpX2RvbWFpbiAqLyArIFwNCj4gKwkJCQlYRFJfUVVBRExFTihORlM0X09Q
QVFVRV9MSU1JVCkgKyBcDQo+ICsJCQkJMSAvKiBuaWlfbmFtZSAqLyArIFwNCj4gKwkJCQlYRFJf
UVVBRExFTihORlM0X09QQVFVRV9MSU1JVCkgKyBcDQo+ICsJCQkJMyAvKiBuaWlfZGF0ZSAqLykN
Cj4gICNkZWZpbmUgZGVjb2RlX2V4Y2hhbmdlX2lkX21heHN6IChvcF9kZWNvZGVfaGRyX21heHN6
ICsgXA0KPiAgCQkJCTIgLyogZWlyX2NsaWVudGlkICovICsgXA0KPiAgCQkJCTEgLyogZWlyX3Nl
cXVlbmNlaWQgKi8gKyBcDQo+IEBAIC04MzgsNiArODQ1LDEyIEBAIGNvbnN0IHUzMiBuZnM0MV9t
YXhyZWFkX292ZXJoZWFkID0gKChSUENfTUFYX0hFQURFUl9XSVRIX0FVVEggKw0KPiAgCQkJCSAg
ICBYRFJfVU5JVCk7DQo+ICAjZW5kaWYgLyogQ09ORklHX05GU19WNF8xICovDQo+ICANCj4gK3N0
YXRpYyB1bnNpZ25lZCBzaG9ydCBzZW5kX2ltcGxlbWVudGF0aW9uX2lkID0gMTsNCj4gKw0KPiAr
bW9kdWxlX3BhcmFtKHNlbmRfaW1wbGVtZW50YXRpb25faWQsIHVzaG9ydCwgMDY0NCk7DQo+ICtN
T0RVTEVfUEFSTV9ERVNDKHNlbmRfaW1wbGVtZW50YXRpb25faWQsDQo+ICsJCSJTZW5kIGltcGxl
bWVudGF0aW9uIElEIHdpdGggTkZTdjQuMSBleGNoYW5nZV9pZCIpOw0KPiArDQo+ICBzdGF0aWMg
Y29uc3QgdW1vZGVfdCBuZnNfdHlwZTJmbXRbXSA9IHsNCj4gIAlbTkY0QkFEXSA9IDAsDQo+ICAJ
W05GNFJFR10gPSBTX0lGUkVHLA0KPiBAQCAtMTc2Niw2ICsxNzc5LDggQEAgc3RhdGljIHZvaWQg
ZW5jb2RlX2V4Y2hhbmdlX2lkKHN0cnVjdCB4ZHJfc3RyZWFtICp4ZHIsDQo+ICAJCQkgICAgICAg
c3RydWN0IGNvbXBvdW5kX2hkciAqaGRyKQ0KPiAgew0KPiAgCV9fYmUzMiAqcDsNCj4gKwljaGFy
IGltcGxfbmFtZVsyNjBdOyAvKiA0IHN0cnMgbWF4IDY0IGVhY2gsIHNwYWNlcyBhbmQgbnVsbCAq
Lw0KICAgICAgICAgICAgICAgICAgICAgICAgXl5eXiBTaG91bGRuJ3QgeW91IGJlIHB1dHRpbmcg
dGhpcyBpbiB0ZXJtcyBvZg0KTkZTNF9PUEFRVUVfTElNSVQgZXRjIGxpa2UgeW91IGRpZCBhYm92
ZT8NCg0KPiArCWludCBsZW4gPSAwOw0KPiAgDQo+ICAJcCA9IHJlc2VydmVfc3BhY2UoeGRyLCA0
ICsgc2l6ZW9mKGFyZ3MtPnZlcmlmaWVyLT5kYXRhKSk7DQo+ICAJKnArKyA9IGNwdV90b19iZTMy
KE9QX0VYQ0hBTkdFX0lEKTsNCj4gQEAgLTE3NzYsNyArMTc5MSwyNiBAQCBzdGF0aWMgdm9pZCBl
bmNvZGVfZXhjaGFuZ2VfaWQoc3RydWN0IHhkcl9zdHJlYW0gKnhkciwNCj4gIAlwID0gcmVzZXJ2
ZV9zcGFjZSh4ZHIsIDEyKTsNCj4gIAkqcCsrID0gY3B1X3RvX2JlMzIoYXJncy0+ZmxhZ3MpOw0K
PiAgCSpwKysgPSBjcHVfdG9fYmUzMigwKTsJLyogemVybyBsZW5ndGggc3RhdGVfcHJvdGVjdDRf
YSAqLw0KPiAtCSpwID0gY3B1X3RvX2JlMzIoMCk7CS8qIHplcm8gbGVuZ3RoIGltcGxlbWVudGF0
aW9uIGlkIGFycmF5ICovDQo+ICsNCj4gKwlpZiAoc2VuZF9pbXBsZW1lbnRhdGlvbl9pZCkNCj4g
KwkJbGVuID0gc25wcmludGYoaW1wbF9uYW1lLCBzaXplb2YoaW1wbF9uYW1lKSwgIiVzICVzICVz
ICVzIiwNCj4gKwkJCSAgICAgICB1dHNuYW1lKCktPnN5c25hbWUsIHV0c25hbWUoKS0+cmVsZWFz
ZSwNCj4gKwkJCSAgICAgICB1dHNuYW1lKCktPnZlcnNpb24sIHV0c25hbWUoKS0+bWFjaGluZSk7
DQo+ICsNCg0KQ2FuIHdlIHB1dCBpbiBhIGNvbXBpbGUtdGltZSBjaGVjayBvbg0KQ09ORklHX05G
U19WNF8xX0lNUExFTUVOVEFUSU9OX0lEX0RPTUFJTiBoZXJlIHRvIG1ha2Ugc3VyZSB0aGF0IHRo
ZQ0KbGVuZ3RoIGlzIGJvdW5kZWQ/DQoNCj4gKwlpZiAobGVuID4gMCkgew0KPiArCQkqcCA9IGNw
dV90b19iZTMyKDEpOwkvKiBpbXBsZW1lbnRhdGlvbiBpZCBhcnJheSBsZW5ndGg9MSAqLw0KPiAr
DQo+ICsJCWVuY29kZV9zdHJpbmcoeGRyLA0KPiArCQkJc3RybGVuKENPTkZJR19ORlNfVjRfMV9J
TVBMRU1FTlRBVElPTl9JRF9ET01BSU4pLA0KPiArCQkJQ09ORklHX05GU19WNF8xX0lNUExFTUVO
VEFUSU9OX0lEX0RPTUFJTik7DQo+ICsJCWVuY29kZV9zdHJpbmcoeGRyLCBsZW4sIGltcGxfbmFt
ZSk7DQo+ICsJCS8qIGp1c3Qgc2VuZCB6ZXJvcyBmb3IgbmlpX2RhdGUgLSB0aGUgZGF0ZSBpcyBp
biBuaWlfbmFtZSAqLw0KPiArCQlwID0gcmVzZXJ2ZV9zcGFjZSh4ZHIsIDEyKTsNCj4gKwkJcCA9
IHhkcl9lbmNvZGVfaHlwZXIocCwgMCk7DQo+ICsJCSpwID0gY3B1X3RvX2JlMzIoMCk7DQo+ICsJ
fSBlbHNlDQo+ICsJCSpwID0gY3B1X3RvX2JlMzIoMCk7CS8qIGltcGxlbWVudGF0aW9uIGlkIGFy
cmF5IGxlbmd0aD0wICovDQo+ICsNCj4gIAloZHItPm5vcHMrKzsNCj4gIAloZHItPnJlcGxlbiAr
PSBkZWNvZGVfZXhjaGFuZ2VfaWRfbWF4c3o7DQo+ICB9DQoNCi0tIA0KVHJvbmQgTXlrbGVidXN0
DQpMaW51eCBORlMgY2xpZW50IG1haW50YWluZXINCg0KTmV0QXBwDQpUcm9uZC5NeWtsZWJ1c3RA
bmV0YXBwLmNvbQ0Kd3d3Lm5ldGFwcC5jb20NCg0K

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 1/3] NFSv4: Send implementation id with exchange_id
  2012-02-16 20:40 ` Myklebust, Trond
@ 2012-02-16 20:52   ` Adamson, Dros
  0 siblings, 0 replies; 17+ messages in thread
From: Adamson, Dros @ 2012-02-16 20:52 UTC (permalink / raw)
  To: Myklebust, Trond; +Cc: Adamson, Dros, linux-nfs@vger.kernel.org

[-- Attachment #1: Type: text/plain, Size: 6145 bytes --]


On Feb 16, 2012, at 3:40 PM, Myklebust, Trond wrote:

> On Thu, 2012-02-16 at 11:17 -0500, Weston Andros Adamson wrote:
>> Send the nfs implementation id in EXCHANGE_ID requests unless the module
>> parameter nfs.send_implementation_id is 0.
>> 
>> This adds a CONFIG variable for the nii_domain that defaults to "kernel.org".
>> 
>> Signed-off-by: Weston Andros Adamson <dros@netapp.com>
>> ---
>> Documentation/kernel-parameters.txt |    9 ++++++++
>> fs/nfs/Kconfig                      |    8 +++++++
>> fs/nfs/nfs4xdr.c                    |   38 +++++++++++++++++++++++++++++++++-
>> 3 files changed, 53 insertions(+), 2 deletions(-)
>> 
>> diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
>> index 1d369c6..7bae0fd 100644
>> --- a/Documentation/kernel-parameters.txt
>> +++ b/Documentation/kernel-parameters.txt
>> @@ -1678,6 +1678,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
>> 			back to using the idmapper.
>> 			To turn off this behaviour, set the value to '0'.
>> 
>> +	nfs.send_implementation_id =
>> +			[NFSv4.1] Send client implementation identification
>> +			information in exchange_id requests.
>> +			If zero, no implementation identification information
>> +			will be sent.
>> +			The default is to send the implementation identification
>> +			information.
>> +
>> +
>> 	nmi_debug=	[KNL,AVR32,SH] Specify one or more actions to take
>> 			when a NMI is triggered.
>> 			Format: [state][,regs][,debounce][,die]
>> diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
>> index ee86cfc..09f9e38 100644
>> --- a/fs/nfs/Kconfig
>> +++ b/fs/nfs/Kconfig
>> @@ -99,6 +99,14 @@ config PNFS_OBJLAYOUT
>> 	depends on NFS_FS && NFS_V4_1 && SCSI_OSD_ULD
>> 	default m
>> 
>> +config NFS_V4_1_IMPLEMENTATION_ID_DOMAIN
>> +	string "NFSv4.1 Implementation ID Domain"
>> +	depends on NFS_V4_1
>> +	default "kernel.org"
>> +	help
>> +	  This value will be used in EXCHANGE_ID compounds to help identify
>> +	  the client implementation.
> 
> This needs more fleshing out in order to explain what the purpose is
> (identify the DNS domainname of the distribution), and what format the
> string needs to take (DNS domainname). You might also follow up with a
> recommendation that if the NFS client is unchanged from the upstream
> kernel, then people should use the default 'kernel.org'.

Understood.

> 
>> +
>> config ROOT_NFS
>> 	bool "Root file system on NFS"
>> 	depends on NFS_FS=y && IP_PNP
>> diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
>> index ae78343..70ded94 100644
>> --- a/fs/nfs/nfs4xdr.c
>> +++ b/fs/nfs/nfs4xdr.c
>> @@ -44,6 +44,8 @@
>> #include <linux/pagemap.h>
>> #include <linux/proc_fs.h>
>> #include <linux/kdev_t.h>
>> +#include <linux/module.h>
>> +#include <linux/utsname.h>
>> #include <linux/sunrpc/clnt.h>
>> #include <linux/sunrpc/msg_prot.h>
>> #include <linux/sunrpc/gss_api.h>
>> @@ -271,7 +273,12 @@ static int nfs4_stat_to_errno(int);
>> 				1 /* flags */ + \
>> 				1 /* spa_how */ + \
>> 				0 /* SP4_NONE (for now) */ + \
>> -				1 /* zero implemetation id array */)
>> +				1 /* implemetation id array of size 1 */ + \
>> +				1 /* nii_domain */ + \
>> +				XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
>> +				1 /* nii_name */ + \
>> +				XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
>> +				3 /* nii_date */)
>> #define decode_exchange_id_maxsz (op_decode_hdr_maxsz + \
>> 				2 /* eir_clientid */ + \
>> 				1 /* eir_sequenceid */ + \
>> @@ -838,6 +845,12 @@ const u32 nfs41_maxread_overhead = ((RPC_MAX_HEADER_WITH_AUTH +
>> 				    XDR_UNIT);
>> #endif /* CONFIG_NFS_V4_1 */
>> 
>> +static unsigned short send_implementation_id = 1;
>> +
>> +module_param(send_implementation_id, ushort, 0644);
>> +MODULE_PARM_DESC(send_implementation_id,
>> +		"Send implementation ID with NFSv4.1 exchange_id");
>> +
>> static const umode_t nfs_type2fmt[] = {
>> 	[NF4BAD] = 0,
>> 	[NF4REG] = S_IFREG,
>> @@ -1766,6 +1779,8 @@ static void encode_exchange_id(struct xdr_stream *xdr,
>> 			       struct compound_hdr *hdr)
>> {
>> 	__be32 *p;
>> +	char impl_name[260]; /* 4 strs max 64 each, spaces and null */
>                        ^^^^ Shouldn't you be putting this in terms of
> NFS4_OPAQUE_LIMIT etc like you did above?

The NFS4_OPAQUE_LIMIT is from the spec - that is, a server could make an nii_name string that big.  
Creating the client's nii_name is bound by utsname() size limits (__NEW_UTS_LEN = 64).

If you'd prefer me to just use NFS4_OPAQUE_LIMIT, I have no problem with it.

> 
>> +	int len = 0;
>> 
>> 	p = reserve_space(xdr, 4 + sizeof(args->verifier->data));
>> 	*p++ = cpu_to_be32(OP_EXCHANGE_ID);
>> @@ -1776,7 +1791,26 @@ static void encode_exchange_id(struct xdr_stream *xdr,
>> 	p = reserve_space(xdr, 12);
>> 	*p++ = cpu_to_be32(args->flags);
>> 	*p++ = cpu_to_be32(0);	/* zero length state_protect4_a */
>> -	*p = cpu_to_be32(0);	/* zero length implementation id array */
>> +
>> +	if (send_implementation_id)
>> +		len = snprintf(impl_name, sizeof(impl_name), "%s %s %s %s",
>> +			       utsname()->sysname, utsname()->release,
>> +			       utsname()->version, utsname()->machine);
>> +
> 
> Can we put in a compile-time check on
> CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN here to make sure that the
> length is bounded?

Yes, good call.  It should also check to make sure its not an empty string -- some servers (pynfs at least) blow up when you send a string of size 0 here.

> 
>> +	if (len > 0) {
>> +		*p = cpu_to_be32(1);	/* implementation id array length=1 */
>> +
>> +		encode_string(xdr,
>> +			strlen(CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN),
>> +			CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN);
>> +		encode_string(xdr, len, impl_name);
>> +		/* just send zeros for nii_date - the date is in nii_name */
>> +		p = reserve_space(xdr, 12);
>> +		p = xdr_encode_hyper(p, 0);
>> +		*p = cpu_to_be32(0);
>> +	} else
>> +		*p = cpu_to_be32(0);	/* implementation id array length=0 */
>> +
>> 	hdr->nops++;
>> 	hdr->replen += decode_exchange_id_maxsz;
>> }

Thanks,
-dros

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 1374 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [PATCH 1/3] NFSv4: Send implementation id with exchange_id
@ 2012-02-17 20:20 Weston Andros Adamson
  2012-02-17 20:20 ` [PATCH 2/3] NFSv4: fix server_scope memory leak Weston Andros Adamson
  2012-02-17 20:20 ` [PATCH 3/3] NFSv4: parse and display server implementation ids Weston Andros Adamson
  0 siblings, 2 replies; 17+ messages in thread
From: Weston Andros Adamson @ 2012-02-17 20:20 UTC (permalink / raw)
  To: Trond.Myklebust; +Cc: linux-nfs, Weston Andros Adamson

Send the nfs implementation id in EXCHANGE_ID requests unless the module
parameter nfs.send_implementation_id is 0.

This adds a CONFIG variable for the nii_domain that defaults to "kernel.org".

Signed-off-by: Weston Andros Adamson <dros@netapp.com>
---
Update: Applied Trond's comments

 Documentation/kernel-parameters.txt |    9 +++++++
 fs/nfs/Kconfig                      |   12 ++++++++++
 fs/nfs/nfs4xdr.c                    |   41 +++++++++++++++++++++++++++++++++-
 3 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
index 1d369c6..7bae0fd 100644
--- a/Documentation/kernel-parameters.txt
+++ b/Documentation/kernel-parameters.txt
@@ -1678,6 +1678,15 @@ bytes respectively. Such letter suffixes can also be entirely omitted.
 			back to using the idmapper.
 			To turn off this behaviour, set the value to '0'.
 
+	nfs.send_implementation_id =
+			[NFSv4.1] Send client implementation identification
+			information in exchange_id requests.
+			If zero, no implementation identification information
+			will be sent.
+			The default is to send the implementation identification
+			information.
+
+
 	nmi_debug=	[KNL,AVR32,SH] Specify one or more actions to take
 			when a NMI is triggered.
 			Format: [state][,regs][,debounce][,die]
diff --git a/fs/nfs/Kconfig b/fs/nfs/Kconfig
index ee86cfc..7bce64c 100644
--- a/fs/nfs/Kconfig
+++ b/fs/nfs/Kconfig
@@ -99,6 +99,18 @@ config PNFS_OBJLAYOUT
 	depends on NFS_FS && NFS_V4_1 && SCSI_OSD_ULD
 	default m
 
+config NFS_V4_1_IMPLEMENTATION_ID_DOMAIN
+	string "NFSv4.1 Implementation ID Domain"
+	depends on NFS_V4_1
+	default "kernel.org"
+	help
+	  This option defines the domain portion of the implementation ID that
+	  may be sent in the NFS exchange_id operation.  The value must be in
+	  the format of a DNS domain name and should be set to the DNS domain
+	  name of the distribution.
+	  If the NFS client is unchanged from the upstream kernel, this
+	  option should be set to the default "kernel.org".
+
 config ROOT_NFS
 	bool "Root file system on NFS"
 	depends on NFS_FS=y && IP_PNP
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index ae78343..d824aed 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -44,6 +44,8 @@
 #include <linux/pagemap.h>
 #include <linux/proc_fs.h>
 #include <linux/kdev_t.h>
+#include <linux/module.h>
+#include <linux/utsname.h>
 #include <linux/sunrpc/clnt.h>
 #include <linux/sunrpc/msg_prot.h>
 #include <linux/sunrpc/gss_api.h>
@@ -271,7 +273,12 @@ static int nfs4_stat_to_errno(int);
 				1 /* flags */ + \
 				1 /* spa_how */ + \
 				0 /* SP4_NONE (for now) */ + \
-				1 /* zero implemetation id array */)
+				1 /* implementation id array of size 1 */ + \
+				1 /* nii_domain */ + \
+				XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
+				1 /* nii_name */ + \
+				XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
+				3 /* nii_date */)
 #define decode_exchange_id_maxsz (op_decode_hdr_maxsz + \
 				2 /* eir_clientid */ + \
 				1 /* eir_sequenceid */ + \
@@ -838,6 +845,12 @@ const u32 nfs41_maxread_overhead = ((RPC_MAX_HEADER_WITH_AUTH +
 				    XDR_UNIT);
 #endif /* CONFIG_NFS_V4_1 */
 
+static unsigned short send_implementation_id = 1;
+
+module_param(send_implementation_id, ushort, 0644);
+MODULE_PARM_DESC(send_implementation_id,
+		"Send implementation ID with NFSv4.1 exchange_id");
+
 static const umode_t nfs_type2fmt[] = {
 	[NF4BAD] = 0,
 	[NF4REG] = S_IFREG,
@@ -1766,6 +1779,8 @@ static void encode_exchange_id(struct xdr_stream *xdr,
 			       struct compound_hdr *hdr)
 {
 	__be32 *p;
+	char impl_name[NFS4_OPAQUE_LIMIT];
+	int len = 0;
 
 	p = reserve_space(xdr, 4 + sizeof(args->verifier->data));
 	*p++ = cpu_to_be32(OP_EXCHANGE_ID);
@@ -1776,7 +1791,29 @@ static void encode_exchange_id(struct xdr_stream *xdr,
 	p = reserve_space(xdr, 12);
 	*p++ = cpu_to_be32(args->flags);
 	*p++ = cpu_to_be32(0);	/* zero length state_protect4_a */
-	*p = cpu_to_be32(0);	/* zero length implementation id array */
+
+	if (send_implementation_id &&
+	    sizeof(CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN) > 1 &&
+	    sizeof(CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN)
+		<= NFS4_OPAQUE_LIMIT + 1)
+		len = snprintf(impl_name, sizeof(impl_name), "%s %s %s %s",
+			       utsname()->sysname, utsname()->release,
+			       utsname()->version, utsname()->machine);
+
+	if (len > 0) {
+		*p = cpu_to_be32(1);	/* implementation id array length=1 */
+
+		encode_string(xdr,
+			sizeof(CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN) - 1,
+			CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN);
+		encode_string(xdr, len, impl_name);
+		/* just send zeros for nii_date - the date is in nii_name */
+		p = reserve_space(xdr, 12);
+		p = xdr_encode_hyper(p, 0);
+		*p = cpu_to_be32(0);
+	} else
+		*p = cpu_to_be32(0);	/* implementation id array length=0 */
+
 	hdr->nops++;
 	hdr->replen += decode_exchange_id_maxsz;
 }
-- 
1.7.4.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 2/3] NFSv4: fix server_scope memory leak
  2012-02-17 20:20 [PATCH 1/3] NFSv4: Send implementation id with exchange_id Weston Andros Adamson
@ 2012-02-17 20:20 ` Weston Andros Adamson
  2012-02-17 20:20 ` [PATCH 3/3] NFSv4: parse and display server implementation ids Weston Andros Adamson
  1 sibling, 0 replies; 17+ messages in thread
From: Weston Andros Adamson @ 2012-02-17 20:20 UTC (permalink / raw)
  To: Trond.Myklebust; +Cc: linux-nfs, Weston Andros Adamson

server_scope would never be freed if nfs4_check_cl_exchange_flags() returned
non-zero

Signed-off-by: Weston Andros Adamson <dros@netapp.com>
---
This should be pushed to stable@vger.kernel.org

 fs/nfs/nfs4proc.c |   15 +++++++++------
 1 files changed, 9 insertions(+), 6 deletions(-)

diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 87c584d..20c3bb0 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -4945,8 +4945,10 @@ int nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred)
 				clp->cl_rpcclient->cl_auth->au_flavor);
 
 	res.server_scope = kzalloc(sizeof(struct server_scope), GFP_KERNEL);
-	if (unlikely(!res.server_scope))
-		return -ENOMEM;
+	if (unlikely(!res.server_scope)) {
+		status = -ENOMEM;
+		goto out;
+	}
 
 	status = rpc_call_sync(clp->cl_rpcclient, &msg, RPC_TASK_TIMEOUT);
 	if (!status)
@@ -4963,12 +4965,13 @@ int nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred)
 			clp->server_scope = NULL;
 		}
 
-		if (!clp->server_scope)
+		if (!clp->server_scope) {
 			clp->server_scope = res.server_scope;
-		else
-			kfree(res.server_scope);
+			goto out;
+		}
 	}
-
+	kfree(res.server_scope);
+out:
 	dprintk("<-- %s status= %d\n", __func__, status);
 	return status;
 }
-- 
1.7.4.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 3/3] NFSv4: parse and display server implementation ids
  2012-02-17 20:20 [PATCH 1/3] NFSv4: Send implementation id with exchange_id Weston Andros Adamson
  2012-02-17 20:20 ` [PATCH 2/3] NFSv4: fix server_scope memory leak Weston Andros Adamson
@ 2012-02-17 20:20 ` Weston Andros Adamson
  2012-03-03 14:09   ` Bryan Schumaker
  1 sibling, 1 reply; 17+ messages in thread
From: Weston Andros Adamson @ 2012-02-17 20:20 UTC (permalink / raw)
  To: Trond.Myklebust; +Cc: linux-nfs, Weston Andros Adamson

Shows the implementation ids in /proc/self/mountstats.  This doesn't break
the nfs-utils mountstats tool.

Signed-off-by: Weston Andros Adamson <dros@netapp.com>
---
 fs/nfs/client.c           |    1 +
 fs/nfs/nfs4proc.c         |   21 +++++++++++++++++++++
 fs/nfs/nfs4xdr.c          |   42 +++++++++++++++++++++++++++++++++++++-----
 fs/nfs/super.c            |    8 ++++++++
 include/linux/nfs_fs_sb.h |    2 ++
 include/linux/nfs_xdr.h   |   15 +++++++--------
 6 files changed, 76 insertions(+), 13 deletions(-)

diff --git a/fs/nfs/client.c b/fs/nfs/client.c
index d0f850f..3fd9a47 100644
--- a/fs/nfs/client.c
+++ b/fs/nfs/client.c
@@ -302,6 +302,7 @@ static void nfs_free_client(struct nfs_client *clp)
 
 	kfree(clp->cl_hostname);
 	kfree(clp->server_scope);
+	kfree(clp->impl_id);
 	kfree(clp);
 
 	dprintk("<-- nfs_free_client()\n");
diff --git a/fs/nfs/nfs4proc.c b/fs/nfs/nfs4proc.c
index 20c3bb0..90a17cc 100644
--- a/fs/nfs/nfs4proc.c
+++ b/fs/nfs/nfs4proc.c
@@ -4950,11 +4950,24 @@ int nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred)
 		goto out;
 	}
 
+	res.impl_id = kzalloc(sizeof(struct nfs41_impl_id), GFP_KERNEL);
+	if (unlikely(!res.impl_id)) {
+		status = -ENOMEM;
+		goto out_server_scope;
+	}
+
 	status = rpc_call_sync(clp->cl_rpcclient, &msg, RPC_TASK_TIMEOUT);
 	if (!status)
 		status = nfs4_check_cl_exchange_flags(clp->cl_exchange_flags);
 
 	if (!status) {
+		/* use the most recent implementation id */
+		kfree(clp->impl_id);
+		clp->impl_id = res.impl_id;
+	} else
+		kfree(res.impl_id);
+
+	if (!status) {
 		if (clp->server_scope &&
 		    !nfs41_same_server_scope(clp->server_scope,
 					     res.server_scope)) {
@@ -4970,8 +4983,16 @@ int nfs4_proc_exchange_id(struct nfs_client *clp, struct rpc_cred *cred)
 			goto out;
 		}
 	}
+
+out_server_scope:
 	kfree(res.server_scope);
 out:
+	if (clp->impl_id)
+		dprintk("%s: Server Implementation ID: "
+			"domain: %s, name: %s, date: %llu,%u\n",
+			__func__, clp->impl_id->domain, clp->impl_id->name,
+			clp->impl_id->date.seconds,
+			clp->impl_id->date.nseconds);
 	dprintk("<-- %s status= %d\n", __func__, status);
 	return status;
 }
diff --git a/fs/nfs/nfs4xdr.c b/fs/nfs/nfs4xdr.c
index d824aed..b7c0433 100644
--- a/fs/nfs/nfs4xdr.c
+++ b/fs/nfs/nfs4xdr.c
@@ -291,7 +291,11 @@ static int nfs4_stat_to_errno(int);
 				/* eir_server_scope<> */ \
 				XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + 1 + \
 				1 /* eir_server_impl_id array length */ + \
-				0 /* ignored eir_server_impl_id contents */)
+				1 /* nii_domain */ + \
+				XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
+				1 /* nii_name */ + \
+				XDR_QUADLEN(NFS4_OPAQUE_LIMIT) + \
+				3 /* nii_date */)
 #define encode_channel_attrs_maxsz  (6 + 1 /* ca_rdma_ird.len (0) */)
 #define decode_channel_attrs_maxsz  (6 + \
 				     1 /* ca_rdma_ird.len */ + \
@@ -5256,6 +5260,7 @@ static int decode_exchange_id(struct xdr_stream *xdr,
 	char *dummy_str;
 	int status;
 	struct nfs_client *clp = res->client;
+	uint32_t impl_id_count;
 
 	status = decode_op_hdr(xdr, OP_EXCHANGE_ID);
 	if (status)
@@ -5297,11 +5302,38 @@ static int decode_exchange_id(struct xdr_stream *xdr,
 	memcpy(res->server_scope->server_scope, dummy_str, dummy);
 	res->server_scope->server_scope_sz = dummy;
 
-	/* Throw away Implementation id array */
-	status = decode_opaque_inline(xdr, &dummy, &dummy_str);
-	if (unlikely(status))
-		return status;
+	/* Implementation Id */
+	p = xdr_inline_decode(xdr, 4);
+	if (unlikely(!p))
+		goto out_overflow;
+	impl_id_count = be32_to_cpup(p++);
 
+	if (impl_id_count) {
+		/* nii_domain */
+		status = decode_opaque_inline(xdr, &dummy, &dummy_str);
+		if (unlikely(status))
+			return status;
+		if (unlikely(dummy > NFS4_OPAQUE_LIMIT))
+			return -EIO;
+		memcpy(res->impl_id->domain, dummy_str, dummy);
+
+		/* nii_name */
+		status = decode_opaque_inline(xdr, &dummy, &dummy_str);
+		if (unlikely(status))
+			return status;
+		if (unlikely(dummy > NFS4_OPAQUE_LIMIT))
+			return -EIO;
+		memcpy(res->impl_id->name, dummy_str, dummy);
+
+		/* nii_date */
+		p = xdr_inline_decode(xdr, 12);
+		if (unlikely(!p))
+			goto out_overflow;
+		p = xdr_decode_hyper(p, &res->impl_id->date.seconds);
+		res->impl_id->date.nseconds = be32_to_cpup(p);
+
+		/* if there's more than one entry, ignore the rest */
+	}
 	return 0;
 out_overflow:
 	print_overflow_msg(__func__, xdr);
diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index d05024a..5462225 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -809,6 +809,14 @@ static int nfs_show_stats(struct seq_file *m, struct dentry *root)
 
 	seq_printf(m, "\n\tage:\t%lu", (jiffies - nfss->mount_time) / HZ);
 
+	if (nfss->nfs_client && nfss->nfs_client->impl_id) {
+		struct nfs41_impl_id *impl_id = nfss->nfs_client->impl_id;
+		seq_printf(m, "\n\timpl_id:\tname='%s',domain='%s',"
+			   "date='%llu,%u'",
+			   impl_id->name, impl_id->domain,
+			   impl_id->date.seconds, impl_id->date.nseconds);
+	}
+
 	seq_printf(m, "\n\tcaps:\t");
 	seq_printf(m, "caps=0x%x", nfss->caps);
 	seq_printf(m, ",wtmult=%u", nfss->wtmult);
diff --git a/include/linux/nfs_fs_sb.h b/include/linux/nfs_fs_sb.h
index 3bf4766..03d0b91 100644
--- a/include/linux/nfs_fs_sb.h
+++ b/include/linux/nfs_fs_sb.h
@@ -18,6 +18,7 @@ struct nfs4_sequence_res;
 struct nfs_server;
 struct nfs4_minor_version_ops;
 struct server_scope;
+struct nfs41_impl_id;
 
 /*
  * The nfs_client identifies our client state to the server.
@@ -86,6 +87,7 @@ struct nfs_client {
 #endif
 
 	struct server_scope	*server_scope;	/* from exchange_id */
+	struct nfs41_impl_id	*impl_id;	/* from exchange_id */
 	struct net		*net;
 };
 
diff --git a/include/linux/nfs_xdr.h b/include/linux/nfs_xdr.h
index adbc84a..046c1bf 100644
--- a/include/linux/nfs_xdr.h
+++ b/include/linux/nfs_xdr.h
@@ -1054,14 +1054,6 @@ struct nfstime4 {
 };
 
 #ifdef CONFIG_NFS_V4_1
-struct nfs_impl_id4 {
-	u32		domain_len;
-	char		*domain;
-	u32		name_len;
-	char		*name;
-	struct nfstime4	date;
-};
-
 #define NFS4_EXCHANGE_ID_LEN	(48)
 struct nfs41_exchange_id_args {
 	struct nfs_client		*client;
@@ -1082,10 +1074,17 @@ struct server_scope {
 	char 				server_scope[NFS4_OPAQUE_LIMIT];
 };
 
+struct nfs41_impl_id {
+	char				domain[NFS4_OPAQUE_LIMIT + 1];
+	char				name[NFS4_OPAQUE_LIMIT + 1];
+	struct nfstime4			date;
+};
+
 struct nfs41_exchange_id_res {
 	struct nfs_client		*client;
 	u32				flags;
 	struct server_scope		*server_scope;
+	struct nfs41_impl_id		*impl_id;
 };
 
 struct nfs41_create_session_args {
-- 
1.7.4.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH 3/3] NFSv4: parse and display server implementation ids
  2012-02-17 20:20 ` [PATCH 3/3] NFSv4: parse and display server implementation ids Weston Andros Adamson
@ 2012-03-03 14:09   ` Bryan Schumaker
  2012-03-04 23:33     ` Myklebust, Trond
  0 siblings, 1 reply; 17+ messages in thread
From: Bryan Schumaker @ 2012-03-03 14:09 UTC (permalink / raw)
  To: Weston Andros Adamson; +Cc: Trond.Myklebust, linux-nfs

Hi Dros,

On 02/17/2012 03:20 PM, Weston Andros Adamson wrote:

> Shows the implementation ids in /proc/self/mountstats.  This doesn't break
> the nfs-utils mountstats tool.
> 
> Signed-off-by: Weston Andros Adamson <dros@netapp.com>
> ---
>  fs/nfs/client.c           |    1 +
>  fs/nfs/nfs4proc.c         |   21 +++++++++++++++++++++
>  fs/nfs/nfs4xdr.c          |   42 +++++++++++++++++++++++++++++++++++++-----
>  fs/nfs/super.c            |    8 ++++++++
>  include/linux/nfs_fs_sb.h |    2 ++
>  include/linux/nfs_xdr.h   |   15 +++++++--------
>  6 files changed, 76 insertions(+), 13 deletions(-)
> 

<snip>

> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> index d05024a..5462225 100644
> --- a/fs/nfs/super.c
> +++ b/fs/nfs/super.c
> @@ -809,6 +809,14 @@ static int nfs_show_stats(struct seq_file *m, struct dentry *root)
>  
>  	seq_printf(m, "\n\tage:\t%lu", (jiffies - nfss->mount_time) / HZ);
>  
> +	if (nfss->nfs_client && nfss->nfs_client->impl_id) {
> +		struct nfs41_impl_id *impl_id = nfss->nfs_client->impl_id;


"struct nfs41_impl_id" is only defined when CONFIG_NFS_V4_1 is enabled, so if I compile without NFS 4.1 enabled I get this error:

  CC [M]  fs/nfs/super.o
/home/bjschuma/linux/modules/fs/nfs/super.c: In function 'nfs_show_stats':
/home/bjschuma/linux/modules/fs/nfs/super.c:843:14: error: dereferencing pointer to incomplete type
/home/bjschuma/linux/modules/fs/nfs/super.c:843:29: error: dereferencing pointer to incomplete type
/home/bjschuma/linux/modules/fs/nfs/super.c:844:14: error: dereferencing pointer to incomplete type
/home/bjschuma/linux/modules/fs/nfs/super.c:844:37: error: dereferencing pointer to incomplete type
make[3]: *** [fs/nfs/super.o] Error 1

- Bryan

> +		seq_printf(m, "\n\timpl_id:\tname='%s',domain='%s',"
> +			   "date='%llu,%u'",
> +			   impl_id->name, impl_id->domain,
> +			   impl_id->date.seconds, impl_id->date.nseconds);
> +	}
> +
>  	seq_printf(m, "\n\tcaps:\t");
>  	seq_printf(m, "caps=0x%x", nfss->caps);
>  	seq_printf(m, ",wtmult=%u", nfss->wtmult);

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 3/3] NFSv4: parse and display server implementation ids
  2012-03-03 14:09   ` Bryan Schumaker
@ 2012-03-04 23:33     ` Myklebust, Trond
  2012-03-06 17:08       ` Adamson, Dros
  0 siblings, 1 reply; 17+ messages in thread
From: Myklebust, Trond @ 2012-03-04 23:33 UTC (permalink / raw)
  To: Schumaker, Bryan; +Cc: Adamson, Dros, linux-nfs@vger.kernel.org

T24gU2F0LCAyMDEyLTAzLTAzIGF0IDA5OjA5IC0wNTAwLCBCcnlhbiBTY2h1bWFrZXIgd3JvdGU6
DQo+IEhpIERyb3MsDQo+IA0KPiBPbiAwMi8xNy8yMDEyIDAzOjIwIFBNLCBXZXN0b24gQW5kcm9z
IEFkYW1zb24gd3JvdGU6DQo+IA0KPiA+IFNob3dzIHRoZSBpbXBsZW1lbnRhdGlvbiBpZHMgaW4g
L3Byb2Mvc2VsZi9tb3VudHN0YXRzLiAgVGhpcyBkb2Vzbid0IGJyZWFrDQo+ID4gdGhlIG5mcy11
dGlscyBtb3VudHN0YXRzIHRvb2wuDQo+ID4gDQo+ID4gU2lnbmVkLW9mZi1ieTogV2VzdG9uIEFu
ZHJvcyBBZGFtc29uIDxkcm9zQG5ldGFwcC5jb20+DQo+ID4gLS0tDQo+ID4gIGZzL25mcy9jbGll
bnQuYyAgICAgICAgICAgfCAgICAxICsNCj4gPiAgZnMvbmZzL25mczRwcm9jLmMgICAgICAgICB8
ICAgMjEgKysrKysrKysrKysrKysrKysrKysrDQo+ID4gIGZzL25mcy9uZnM0eGRyLmMgICAgICAg
ICAgfCAgIDQyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLS0tLQ0KPiA+
ICBmcy9uZnMvc3VwZXIuYyAgICAgICAgICAgIHwgICAgOCArKysrKysrKw0KPiA+ICBpbmNsdWRl
L2xpbnV4L25mc19mc19zYi5oIHwgICAgMiArKw0KPiA+ICBpbmNsdWRlL2xpbnV4L25mc194ZHIu
aCAgIHwgICAxNSArKysrKysrLS0tLS0tLS0NCj4gPiAgNiBmaWxlcyBjaGFuZ2VkLCA3NiBpbnNl
cnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkNCj4gPiANCj4gDQo+IDxzbmlwPg0KPiANCj4gPiBk
aWZmIC0tZ2l0IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYw0KPiA+IGluZGV4IGQw
NTAyNGEuLjU0NjIyMjUgMTAwNjQ0DQo+ID4gLS0tIGEvZnMvbmZzL3N1cGVyLmMNCj4gPiArKysg
Yi9mcy9uZnMvc3VwZXIuYw0KPiA+IEBAIC04MDksNiArODA5LDE0IEBAIHN0YXRpYyBpbnQgbmZz
X3Nob3dfc3RhdHMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KQ0KPiA+
ICANCj4gPiAgCXNlcV9wcmludGYobSwgIlxuXHRhZ2U6XHQlbHUiLCAoamlmZmllcyAtIG5mc3Mt
Pm1vdW50X3RpbWUpIC8gSFopOw0KPiA+ICANCj4gPiArCWlmIChuZnNzLT5uZnNfY2xpZW50ICYm
IG5mc3MtPm5mc19jbGllbnQtPmltcGxfaWQpIHsNCj4gPiArCQlzdHJ1Y3QgbmZzNDFfaW1wbF9p
ZCAqaW1wbF9pZCA9IG5mc3MtPm5mc19jbGllbnQtPmltcGxfaWQ7DQo+IA0KPiANCj4gInN0cnVj
dCBuZnM0MV9pbXBsX2lkIiBpcyBvbmx5IGRlZmluZWQgd2hlbiBDT05GSUdfTkZTX1Y0XzEgaXMg
ZW5hYmxlZCwgc28gaWYgSSBjb21waWxlIHdpdGhvdXQgTkZTIDQuMSBlbmFibGVkIEkgZ2V0IHRo
aXMgZXJyb3I6DQo+IA0KPiAgIENDIFtNXSAgZnMvbmZzL3N1cGVyLm8NCj4gL2hvbWUvYmpzY2h1
bWEvbGludXgvbW9kdWxlcy9mcy9uZnMvc3VwZXIuYzogSW4gZnVuY3Rpb24gJ25mc19zaG93X3N0
YXRzJzoNCj4gL2hvbWUvYmpzY2h1bWEvbGludXgvbW9kdWxlcy9mcy9uZnMvc3VwZXIuYzo4NDM6
MTQ6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHBvaW50ZXIgdG8gaW5jb21wbGV0ZSB0eXBlDQo+IC9o
b21lL2Jqc2NodW1hL2xpbnV4L21vZHVsZXMvZnMvbmZzL3N1cGVyLmM6ODQzOjI5OiBlcnJvcjog
ZGVyZWZlcmVuY2luZyBwb2ludGVyIHRvIGluY29tcGxldGUgdHlwZQ0KPiAvaG9tZS9ianNjaHVt
YS9saW51eC9tb2R1bGVzL2ZzL25mcy9zdXBlci5jOjg0NDoxNDogZXJyb3I6IGRlcmVmZXJlbmNp
bmcgcG9pbnRlciB0byBpbmNvbXBsZXRlIHR5cGUNCj4gL2hvbWUvYmpzY2h1bWEvbGludXgvbW9k
dWxlcy9mcy9uZnMvc3VwZXIuYzo4NDQ6Mzc6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHBvaW50ZXIg
dG8gaW5jb21wbGV0ZSB0eXBlDQo+IG1ha2VbM106ICoqKiBbZnMvbmZzL3N1cGVyLm9dIEVycm9y
IDENCg0KSGkgQnJ5YW4gJiBEcm9zDQoNCkkndmUgYXBwbGllZCB0aGUgZm9sbG93aW5nIHBhdGNo
IHRvIGZpeCB0aGlzIGlzc3VlLiBQbGVhc2UgYWR2aXNlIGlmDQp5b3UncmUgc3RpbGwgc2VlaW5n
IGNvbXBpbGUgcHJvYmxlbXMgd2hlbiBpdCBpcyBhcHBsaWVkLg0KDQo4PC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0NCkZyb20gZDAzMjc2OWI4MzNkOGZiYWFhNjIwYTU0MzAwOTc5ZGQ1ODgxZDQ5MyBNb24g
U2VwIDE3IDAwOjAwOjAwIDIwMDENCkZyb206IFRyb25kIE15a2xlYnVzdCA8VHJvbmQuTXlrbGVi
dXN0QG5ldGFwcC5jb20+DQpEYXRlOiBTdW4sIDQgTWFyIDIwMTIgMTg6MTI6NTcgLTA1MDANClN1
YmplY3Q6IFtQQVRDSF0gTkZTOiBGaXggYSBjb21waWxlIGlzc3VlIHdoZW4gIUNPTkZJR19ORlNf
VjRfMQ0KDQpUaGUgYXR0ZW1wdCB0byBkaXNwbGF5IHRoZSBpbXBsZW1lbnRhdGlvbiBJRCBuZWVk
cyB0byBiZSBjb25kaXRpb25hbCBvbg0Kd2hldGhlciBvciBub3QgQ09ORklHX05GU19WNF8xIGlz
IGRlZmluZWQNCg0KUmVwb3J0ZWQtYnk6IEJyeWFuIFNjaHVtYWtlciA8QnJ5YW4uU2NodW1ha2Vy
QG5ldGFwcC5jb20+DQpTaWduZWQtb2ZmLWJ5OiBUcm9uZCBNeWtsZWJ1c3QgPFRyb25kLk15a2xl
YnVzdEBuZXRhcHAuY29tPg0KLS0tDQogZnMvbmZzL3N1cGVyLmMgfCAgIDIyICsrKysrKysrKysr
KysrKy0tLS0tLS0NCiAxIGZpbGVzIGNoYW5nZWQsIDE1IGluc2VydGlvbnMoKyksIDcgZGVsZXRp
b25zKC0pDQoNCmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9zdXBlci5jDQpp
bmRleCAzOTM1YTM3Li42MTQxOWM5IDEwMDY0NA0KLS0tIGEvZnMvbmZzL3N1cGVyLmMNCisrKyBi
L2ZzL25mcy9zdXBlci5jDQpAQCAtNzg1LDggKzc4NSwyMiBAQCBzdGF0aWMgdm9pZCBzaG93X3Bu
ZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKQ0KIAllbHNl
DQogCQlzZXFfcHJpbnRmKG0sICJub3QgY29uZmlndXJlZCIpOw0KIH0NCisNCitzdGF0aWMgdm9p
ZCBzaG93X2ltcGxlbWVudGF0aW9uX2lkKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG5mc19z
ZXJ2ZXIgKm5mc3MpDQorew0KKwlpZiAobmZzcy0+bmZzX2NsaWVudCAmJiBuZnNzLT5uZnNfY2xp
ZW50LT5pbXBsX2lkKSB7DQorCQlzdHJ1Y3QgbmZzNDFfaW1wbF9pZCAqaW1wbF9pZCA9IG5mc3Mt
Pm5mc19jbGllbnQtPmltcGxfaWQ7DQorCQlzZXFfcHJpbnRmKG0sICJcblx0aW1wbF9pZDpcdG5h
bWU9JyVzJyxkb21haW49JyVzJywiDQorCQkJICAgImRhdGU9JyVsbHUsJXUnIiwNCisJCQkgICBp
bXBsX2lkLT5uYW1lLCBpbXBsX2lkLT5kb21haW4sDQorCQkJICAgaW1wbF9pZC0+ZGF0ZS5zZWNv
bmRzLCBpbXBsX2lkLT5kYXRlLm5zZWNvbmRzKTsNCisJfQ0KK30NCiAjZWxzZQ0KIHN0YXRpYyB2
b2lkIHNob3dfcG5mcyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2
ZXIpIHt9DQorc3RhdGljIHZvaWQgc2hvd19pbXBsZW1lbnRhdGlvbl9pZChzdHJ1Y3Qgc2VxX2Zp
bGUgKm0sIHN0cnVjdCBuZnNfc2VydmVyICpuZnNzKQ0KK3sNCit9DQogI2VuZGlmDQogI2VuZGlm
DQogDQpAQCAtODM2LDEzICs4NTAsNyBAQCBzdGF0aWMgaW50IG5mc19zaG93X3N0YXRzKHN0cnVj
dCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9vdCkNCiANCiAJc2VxX3ByaW50ZihtLCAi
XG5cdGFnZTpcdCVsdSIsIChqaWZmaWVzIC0gbmZzcy0+bW91bnRfdGltZSkgLyBIWik7DQogDQot
CWlmIChuZnNzLT5uZnNfY2xpZW50ICYmIG5mc3MtPm5mc19jbGllbnQtPmltcGxfaWQpIHsNCi0J
CXN0cnVjdCBuZnM0MV9pbXBsX2lkICppbXBsX2lkID0gbmZzcy0+bmZzX2NsaWVudC0+aW1wbF9p
ZDsNCi0JCXNlcV9wcmludGYobSwgIlxuXHRpbXBsX2lkOlx0bmFtZT0nJXMnLGRvbWFpbj0nJXMn
LCINCi0JCQkgICAiZGF0ZT0nJWxsdSwldSciLA0KLQkJCSAgIGltcGxfaWQtPm5hbWUsIGltcGxf
aWQtPmRvbWFpbiwNCi0JCQkgICBpbXBsX2lkLT5kYXRlLnNlY29uZHMsIGltcGxfaWQtPmRhdGUu
bnNlY29uZHMpOw0KLQl9DQorCXNob3dfaW1wbGVtZW50YXRpb25faWQobSwgbmZzcyk7DQogDQog
CXNlcV9wcmludGYobSwgIlxuXHRjYXBzOlx0Iik7DQogCXNlcV9wcmludGYobSwgImNhcHM9MHgl
eCIsIG5mc3MtPmNhcHMpOw0KLS0gDQoxLjcuNy42DQoNCg0KLS0gDQpUcm9uZCBNeWtsZWJ1c3QN
CkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lcg0KDQpOZXRBcHANClRyb25kLk15a2xlYnVzdEBu
ZXRhcHAuY29tDQp3d3cubmV0YXBwLmNvbQ0KDQo=

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 3/3] NFSv4: parse and display server implementation ids
  2012-03-04 23:33     ` Myklebust, Trond
@ 2012-03-06 17:08       ` Adamson, Dros
  2012-03-06 17:12         ` Myklebust, Trond
  2012-03-06 17:15         ` Bryan Schumaker
  0 siblings, 2 replies; 17+ messages in thread
From: Adamson, Dros @ 2012-03-06 17:08 UTC (permalink / raw)
  To: Myklebust, Trond
  Cc: Schumaker, Bryan, Adamson, Dros, linux-nfs@vger.kernel.org

[-- Attachment #1: Type: text/plain, Size: 4425 bytes --]


On Mar 4, 2012, at 6:33 PM, Myklebust, Trond wrote:

> On Sat, 2012-03-03 at 09:09 -0500, Bryan Schumaker wrote:
>> Hi Dros,
>> 
>> On 02/17/2012 03:20 PM, Weston Andros Adamson wrote:
>> 
>>> Shows the implementation ids in /proc/self/mountstats.  This doesn't break
>>> the nfs-utils mountstats tool.
>>> 
>>> Signed-off-by: Weston Andros Adamson <dros@netapp.com>
>>> ---
>>> fs/nfs/client.c           |    1 +
>>> fs/nfs/nfs4proc.c         |   21 +++++++++++++++++++++
>>> fs/nfs/nfs4xdr.c          |   42 +++++++++++++++++++++++++++++++++++++-----
>>> fs/nfs/super.c            |    8 ++++++++
>>> include/linux/nfs_fs_sb.h |    2 ++
>>> include/linux/nfs_xdr.h   |   15 +++++++--------
>>> 6 files changed, 76 insertions(+), 13 deletions(-)
>>> 
>> 
>> <snip>
>> 
>>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>>> index d05024a..5462225 100644
>>> --- a/fs/nfs/super.c
>>> +++ b/fs/nfs/super.c
>>> @@ -809,6 +809,14 @@ static int nfs_show_stats(struct seq_file *m, struct dentry *root)
>>> 
>>> 	seq_printf(m, "\n\tage:\t%lu", (jiffies - nfss->mount_time) / HZ);
>>> 
>>> +	if (nfss->nfs_client && nfss->nfs_client->impl_id) {
>>> +		struct nfs41_impl_id *impl_id = nfss->nfs_client->impl_id;
>> 
>> 
>> "struct nfs41_impl_id" is only defined when CONFIG_NFS_V4_1 is enabled, so if I compile without NFS 4.1 enabled I get this error:
>> 
>>  CC [M]  fs/nfs/super.o
>> /home/bjschuma/linux/modules/fs/nfs/super.c: In function 'nfs_show_stats':
>> /home/bjschuma/linux/modules/fs/nfs/super.c:843:14: error: dereferencing pointer to incomplete type
>> /home/bjschuma/linux/modules/fs/nfs/super.c:843:29: error: dereferencing pointer to incomplete type
>> /home/bjschuma/linux/modules/fs/nfs/super.c:844:14: error: dereferencing pointer to incomplete type
>> /home/bjschuma/linux/modules/fs/nfs/super.c:844:37: error: dereferencing pointer to incomplete type
>> make[3]: *** [fs/nfs/super.o] Error 1

Oops!  Good catch Bryan!

> 
> Hi Bryan & Dros
> 
> I've applied the following patch to fix this issue. Please advise if
> you're still seeing compile problems when it is applied.
> 
> 8<----------------------------------------------------------------------------
> From d032769b833d8fbaaa620a54300979dd5881d493 Mon Sep 17 00:00:00 2001
> From: Trond Myklebust <Trond.Myklebust@netapp.com>
> Date: Sun, 4 Mar 2012 18:12:57 -0500
> Subject: [PATCH] NFS: Fix a compile issue when !CONFIG_NFS_V4_1
> 
> The attempt to display the implementation ID needs to be conditional on
> whether or not CONFIG_NFS_V4_1 is defined
> 
> Reported-by: Bryan Schumaker <Bryan.Schumaker@netapp.com>
> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
> ---
> fs/nfs/super.c |   22 +++++++++++++++-------
> 1 files changed, 15 insertions(+), 7 deletions(-)
> 
> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> index 3935a37..61419c9 100644
> --- a/fs/nfs/super.c
> +++ b/fs/nfs/super.c
> @@ -785,8 +785,22 @@ static void show_pnfs(struct seq_file *m, struct nfs_server *server)
> 	else
> 		seq_printf(m, "not configured");
> }
> +
> +static void show_implementation_id(struct seq_file *m, struct nfs_server *nfss)
> +{
> +	if (nfss->nfs_client && nfss->nfs_client->impl_id) {
> +		struct nfs41_impl_id *impl_id = nfss->nfs_client->impl_id;
> +		seq_printf(m, "\n\timpl_id:\tname='%s',domain='%s',"
> +			   "date='%llu,%u'",
> +			   impl_id->name, impl_id->domain,
> +			   impl_id->date.seconds, impl_id->date.nseconds);
> +	}
> +}
> #else
> static void show_pnfs(struct seq_file *m, struct nfs_server *server) {}
> +static void show_implementation_id(struct seq_file *m, struct nfs_server *nfss)
> +{
> +}
> #endif
> #endif
> 
> @@ -836,13 +850,7 @@ static int nfs_show_stats(struct seq_file *m, struct dentry *root)
> 
> 	seq_printf(m, "\n\tage:\t%lu", (jiffies - nfss->mount_time) / HZ);
> 
> -	if (nfss->nfs_client && nfss->nfs_client->impl_id) {
> -		struct nfs41_impl_id *impl_id = nfss->nfs_client->impl_id;
> -		seq_printf(m, "\n\timpl_id:\tname='%s',domain='%s',"
> -			   "date='%llu,%u'",
> -			   impl_id->name, impl_id->domain,
> -			   impl_id->date.seconds, impl_id->date.nseconds);
> -	}
> +	show_implementation_id(m, nfss);
> 
> 	seq_printf(m, "\n\tcaps:\t");
> 	seq_printf(m, "caps=0x%x", nfss->caps);
> -- 
> 1.7.7.6

Works for me.  I need to test with different CONFIG opts more often!

-dros

[-- Attachment #2: smime.p7s --]
[-- Type: application/pkcs7-signature, Size: 1374 bytes --]

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 3/3] NFSv4: parse and display server implementation ids
  2012-03-06 17:08       ` Adamson, Dros
@ 2012-03-06 17:12         ` Myklebust, Trond
  2012-03-06 17:15         ` Bryan Schumaker
  1 sibling, 0 replies; 17+ messages in thread
From: Myklebust, Trond @ 2012-03-06 17:12 UTC (permalink / raw)
  To: Adamson, Dros; +Cc: Schumaker, Bryan, linux-nfs@vger.kernel.org

T24gVHVlLCAyMDEyLTAzLTA2IGF0IDE3OjA4ICswMDAwLCBBZGFtc29uLCBEcm9zIHdyb3RlOg0K
PiBPbiBNYXIgNCwgMjAxMiwgYXQgNjozMyBQTSwgTXlrbGVidXN0LCBUcm9uZCB3cm90ZToNCj4g
DQo+ID4gT24gU2F0LCAyMDEyLTAzLTAzIGF0IDA5OjA5IC0wNTAwLCBCcnlhbiBTY2h1bWFrZXIg
d3JvdGU6DQo+ID4+IEhpIERyb3MsDQo+ID4+IA0KPiA+PiBPbiAwMi8xNy8yMDEyIDAzOjIwIFBN
LCBXZXN0b24gQW5kcm9zIEFkYW1zb24gd3JvdGU6DQo+ID4+IA0KPiA+Pj4gU2hvd3MgdGhlIGlt
cGxlbWVudGF0aW9uIGlkcyBpbiAvcHJvYy9zZWxmL21vdW50c3RhdHMuICBUaGlzIGRvZXNuJ3Qg
YnJlYWsNCj4gPj4+IHRoZSBuZnMtdXRpbHMgbW91bnRzdGF0cyB0b29sLg0KPiA+Pj4gDQo+ID4+
PiBTaWduZWQtb2ZmLWJ5OiBXZXN0b24gQW5kcm9zIEFkYW1zb24gPGRyb3NAbmV0YXBwLmNvbT4N
Cj4gPj4+IC0tLQ0KPiA+Pj4gZnMvbmZzL2NsaWVudC5jICAgICAgICAgICB8ICAgIDEgKw0KPiA+
Pj4gZnMvbmZzL25mczRwcm9jLmMgICAgICAgICB8ICAgMjEgKysrKysrKysrKysrKysrKysrKysr
DQo+ID4+PiBmcy9uZnMvbmZzNHhkci5jICAgICAgICAgIHwgICA0MiArKysrKysrKysrKysrKysr
KysrKysrKysrKysrKysrKysrKysrLS0tLS0NCj4gPj4+IGZzL25mcy9zdXBlci5jICAgICAgICAg
ICAgfCAgICA4ICsrKysrKysrDQo+ID4+PiBpbmNsdWRlL2xpbnV4L25mc19mc19zYi5oIHwgICAg
MiArKw0KPiA+Pj4gaW5jbHVkZS9saW51eC9uZnNfeGRyLmggICB8ICAgMTUgKysrKysrKy0tLS0t
LS0tDQo+ID4+PiA2IGZpbGVzIGNoYW5nZWQsIDc2IGluc2VydGlvbnMoKyksIDEzIGRlbGV0aW9u
cygtKQ0KPiA+Pj4gDQo+ID4+IA0KPiA+PiA8c25pcD4NCj4gPj4gDQo+ID4+PiBkaWZmIC0tZ2l0
IGEvZnMvbmZzL3N1cGVyLmMgYi9mcy9uZnMvc3VwZXIuYw0KPiA+Pj4gaW5kZXggZDA1MDI0YS4u
NTQ2MjIyNSAxMDA2NDQNCj4gPj4+IC0tLSBhL2ZzL25mcy9zdXBlci5jDQo+ID4+PiArKysgYi9m
cy9uZnMvc3VwZXIuYw0KPiA+Pj4gQEAgLTgwOSw2ICs4MDksMTQgQEAgc3RhdGljIGludCBuZnNf
c2hvd19zdGF0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpDQo+ID4+
PiANCj4gPj4+IAlzZXFfcHJpbnRmKG0sICJcblx0YWdlOlx0JWx1IiwgKGppZmZpZXMgLSBuZnNz
LT5tb3VudF90aW1lKSAvIEhaKTsNCj4gPj4+IA0KPiA+Pj4gKwlpZiAobmZzcy0+bmZzX2NsaWVu
dCAmJiBuZnNzLT5uZnNfY2xpZW50LT5pbXBsX2lkKSB7DQo+ID4+PiArCQlzdHJ1Y3QgbmZzNDFf
aW1wbF9pZCAqaW1wbF9pZCA9IG5mc3MtPm5mc19jbGllbnQtPmltcGxfaWQ7DQo+ID4+IA0KPiA+
PiANCj4gPj4gInN0cnVjdCBuZnM0MV9pbXBsX2lkIiBpcyBvbmx5IGRlZmluZWQgd2hlbiBDT05G
SUdfTkZTX1Y0XzEgaXMgZW5hYmxlZCwgc28gaWYgSSBjb21waWxlIHdpdGhvdXQgTkZTIDQuMSBl
bmFibGVkIEkgZ2V0IHRoaXMgZXJyb3I6DQo+ID4+IA0KPiA+PiAgQ0MgW01dICBmcy9uZnMvc3Vw
ZXIubw0KPiA+PiAvaG9tZS9ianNjaHVtYS9saW51eC9tb2R1bGVzL2ZzL25mcy9zdXBlci5jOiBJ
biBmdW5jdGlvbiAnbmZzX3Nob3dfc3RhdHMnOg0KPiA+PiAvaG9tZS9ianNjaHVtYS9saW51eC9t
b2R1bGVzL2ZzL25mcy9zdXBlci5jOjg0MzoxNDogZXJyb3I6IGRlcmVmZXJlbmNpbmcgcG9pbnRl
ciB0byBpbmNvbXBsZXRlIHR5cGUNCj4gPj4gL2hvbWUvYmpzY2h1bWEvbGludXgvbW9kdWxlcy9m
cy9uZnMvc3VwZXIuYzo4NDM6Mjk6IGVycm9yOiBkZXJlZmVyZW5jaW5nIHBvaW50ZXIgdG8gaW5j
b21wbGV0ZSB0eXBlDQo+ID4+IC9ob21lL2Jqc2NodW1hL2xpbnV4L21vZHVsZXMvZnMvbmZzL3N1
cGVyLmM6ODQ0OjE0OiBlcnJvcjogZGVyZWZlcmVuY2luZyBwb2ludGVyIHRvIGluY29tcGxldGUg
dHlwZQ0KPiA+PiAvaG9tZS9ianNjaHVtYS9saW51eC9tb2R1bGVzL2ZzL25mcy9zdXBlci5jOjg0
NDozNzogZXJyb3I6IGRlcmVmZXJlbmNpbmcgcG9pbnRlciB0byBpbmNvbXBsZXRlIHR5cGUNCj4g
Pj4gbWFrZVszXTogKioqIFtmcy9uZnMvc3VwZXIub10gRXJyb3IgMQ0KPiANCj4gT29wcyEgIEdv
b2QgY2F0Y2ggQnJ5YW4hDQo+IA0KPiA+IA0KPiA+IEhpIEJyeWFuICYgRHJvcw0KPiA+IA0KPiA+
IEkndmUgYXBwbGllZCB0aGUgZm9sbG93aW5nIHBhdGNoIHRvIGZpeCB0aGlzIGlzc3VlLiBQbGVh
c2UgYWR2aXNlIGlmDQo+ID4geW91J3JlIHN0aWxsIHNlZWluZyBjb21waWxlIHByb2JsZW1zIHdo
ZW4gaXQgaXMgYXBwbGllZC4NCj4gPiANCj4gV29ya3MgZm9yIG1lLiAgSSBuZWVkIHRvIHRlc3Qg
d2l0aCBkaWZmZXJlbnQgQ09ORklHIG9wdHMgbW9yZSBvZnRlbiENCg0KQWN0dWFsbHksIHRoZSBh
Ym92ZSBwYXRjaCB3YXMgZmFpbGluZyBpZiAhQ09ORklHX05GU19WNCwgc28gaXQgaGFzIGJlZW4N
CmFtZW5kZWQgYSBqdXN0IGxpdHRsZSBtb3JlIHRvIGRvIHRoZSByaWdodCB0aGluZy4NCjg8LS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0NCkZyb20gN2UwM2I3Y2MwNzM2ZWVmZTc0NzE3ODJjMzQ0MTEyYWQ2ZWJhOTUxZSBNb24g
U2VwIDE3IDAwOjAwOjAwIDIwMDENCkZyb206IFRyb25kIE15a2xlYnVzdCA8VHJvbmQuTXlrbGVi
dXN0QG5ldGFwcC5jb20+DQpEYXRlOiBTdW4sIDQgTWFyIDIwMTIgMTg6MTI6NTcgLTA1MDANClN1
YmplY3Q6IFtQQVRDSCB2Ml0gTkZTOiBGaXggYSBjb21waWxlIGlzc3VlIHdoZW4gIUNPTkZJR19O
RlNfVjRfMQ0KDQpUaGUgYXR0ZW1wdCB0byBkaXNwbGF5IHRoZSBpbXBsZW1lbnRhdGlvbiBJRCBu
ZWVkcyB0byBiZSBjb25kaXRpb25hbCBvbg0Kd2hldGhlciBvciBub3QgQ09ORklHX05GU19WNF8x
IGlzIGRlZmluZWQNCg0KUmVwb3J0ZWQtYnk6IEJyeWFuIFNjaHVtYWtlciA8QnJ5YW4uU2NodW1h
a2VyQG5ldGFwcC5jb20+DQpTaWduZWQtb2ZmLWJ5OiBUcm9uZCBNeWtsZWJ1c3QgPFRyb25kLk15
a2xlYnVzdEBuZXRhcHAuY29tPg0KLS0tDQogZnMvbmZzL3N1cGVyLmMgfCAgIDI4ICsrKysrKysr
KysrKysrKysrKystLS0tLS0tLS0NCiAxIGZpbGVzIGNoYW5nZWQsIDE5IGluc2VydGlvbnMoKyks
IDkgZGVsZXRpb25zKC0pDQoNCmRpZmYgLS1naXQgYS9mcy9uZnMvc3VwZXIuYyBiL2ZzL25mcy9z
dXBlci5jDQppbmRleCAzOTM1YTM3Li5hYWM0MDMwIDEwMDY0NA0KLS0tIGEvZnMvbmZzL3N1cGVy
LmMNCisrKyBiL2ZzL25mcy9zdXBlci5jDQpAQCAtNzc1LDcgKzc3NSw2IEBAIHN0YXRpYyB2b2lk
IHNob3dfc2Vzc2lvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbmZzX3NlcnZlciAqc2Vy
dmVyKSB7fQ0KICNlbmRpZg0KICNlbmRpZg0KIA0KLSNpZmRlZiBDT05GSUdfTkZTX1Y0DQogI2lm
ZGVmIENPTkZJR19ORlNfVjRfMQ0KIHN0YXRpYyB2b2lkIHNob3dfcG5mcyhzdHJ1Y3Qgc2VxX2Zp
bGUgKm0sIHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXIpDQogew0KQEAgLTc4NSw5ICs3ODQsMjYg
QEAgc3RhdGljIHZvaWQgc2hvd19wbmZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG5mc19z
ZXJ2ZXIgKnNlcnZlcikNCiAJZWxzZQ0KIAkJc2VxX3ByaW50ZihtLCAibm90IGNvbmZpZ3VyZWQi
KTsNCiB9DQorDQorc3RhdGljIHZvaWQgc2hvd19pbXBsZW1lbnRhdGlvbl9pZChzdHJ1Y3Qgc2Vx
X2ZpbGUgKm0sIHN0cnVjdCBuZnNfc2VydmVyICpuZnNzKQ0KK3sNCisJaWYgKG5mc3MtPm5mc19j
bGllbnQgJiYgbmZzcy0+bmZzX2NsaWVudC0+aW1wbF9pZCkgew0KKwkJc3RydWN0IG5mczQxX2lt
cGxfaWQgKmltcGxfaWQgPSBuZnNzLT5uZnNfY2xpZW50LT5pbXBsX2lkOw0KKwkJc2VxX3ByaW50
ZihtLCAiXG5cdGltcGxfaWQ6XHRuYW1lPSclcycsZG9tYWluPSclcycsIg0KKwkJCSAgICJkYXRl
PSclbGx1LCV1JyIsDQorCQkJICAgaW1wbF9pZC0+bmFtZSwgaW1wbF9pZC0+ZG9tYWluLA0KKwkJ
CSAgIGltcGxfaWQtPmRhdGUuc2Vjb25kcywgaW1wbF9pZC0+ZGF0ZS5uc2Vjb25kcyk7DQorCX0N
Cit9DQogI2Vsc2UNCi1zdGF0aWMgdm9pZCBzaG93X3BuZnMoc3RydWN0IHNlcV9maWxlICptLCBz
dHJ1Y3QgbmZzX3NlcnZlciAqc2VydmVyKSB7fQ0KKyNpZmRlZiBDT05GSUdfTkZTX1Y0DQorc3Rh
dGljIHZvaWQgc2hvd19wbmZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG5mc19zZXJ2ZXIg
KnNlcnZlcikNCit7DQorfQ0KICNlbmRpZg0KK3N0YXRpYyB2b2lkIHNob3dfaW1wbGVtZW50YXRp
b25faWQoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbmZzX3NlcnZlciAqbmZzcykNCit7DQor
fQ0KICNlbmRpZg0KIA0KIHN0YXRpYyBpbnQgbmZzX3Nob3dfZGV2bmFtZShzdHJ1Y3Qgc2VxX2Zp
bGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpDQpAQCAtODM2LDEzICs4NTIsNyBAQCBzdGF0aWMg
aW50IG5mc19zaG93X3N0YXRzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IGRlbnRyeSAqcm9v
dCkNCiANCiAJc2VxX3ByaW50ZihtLCAiXG5cdGFnZTpcdCVsdSIsIChqaWZmaWVzIC0gbmZzcy0+
bW91bnRfdGltZSkgLyBIWik7DQogDQotCWlmIChuZnNzLT5uZnNfY2xpZW50ICYmIG5mc3MtPm5m
c19jbGllbnQtPmltcGxfaWQpIHsNCi0JCXN0cnVjdCBuZnM0MV9pbXBsX2lkICppbXBsX2lkID0g
bmZzcy0+bmZzX2NsaWVudC0+aW1wbF9pZDsNCi0JCXNlcV9wcmludGYobSwgIlxuXHRpbXBsX2lk
Olx0bmFtZT0nJXMnLGRvbWFpbj0nJXMnLCINCi0JCQkgICAiZGF0ZT0nJWxsdSwldSciLA0KLQkJ
CSAgIGltcGxfaWQtPm5hbWUsIGltcGxfaWQtPmRvbWFpbiwNCi0JCQkgICBpbXBsX2lkLT5kYXRl
LnNlY29uZHMsIGltcGxfaWQtPmRhdGUubnNlY29uZHMpOw0KLQl9DQorCXNob3dfaW1wbGVtZW50
YXRpb25faWQobSwgbmZzcyk7DQogDQogCXNlcV9wcmludGYobSwgIlxuXHRjYXBzOlx0Iik7DQog
CXNlcV9wcmludGYobSwgImNhcHM9MHgleCIsIG5mc3MtPmNhcHMpOw0KLS0gDQoxLjcuNy42DQoN
Cg0KLS0gDQpUcm9uZCBNeWtsZWJ1c3QNCkxpbnV4IE5GUyBjbGllbnQgbWFpbnRhaW5lcg0KDQpO
ZXRBcHANClRyb25kLk15a2xlYnVzdEBuZXRhcHAuY29tDQp3d3cubmV0YXBwLmNvbQ0KDQo=

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 3/3] NFSv4: parse and display server implementation ids
  2012-03-06 17:08       ` Adamson, Dros
  2012-03-06 17:12         ` Myklebust, Trond
@ 2012-03-06 17:15         ` Bryan Schumaker
  1 sibling, 0 replies; 17+ messages in thread
From: Bryan Schumaker @ 2012-03-06 17:15 UTC (permalink / raw)
  To: Adamson, Dros
  Cc: Myklebust, Trond, Schumaker, Bryan, linux-nfs@vger.kernel.org

On 03/06/2012 12:08 PM, Adamson, Dros wrote:

> 
> On Mar 4, 2012, at 6:33 PM, Myklebust, Trond wrote:
> 
>> On Sat, 2012-03-03 at 09:09 -0500, Bryan Schumaker wrote:
>>> Hi Dros,
>>>
>>> On 02/17/2012 03:20 PM, Weston Andros Adamson wrote:
>>>
>>>> Shows the implementation ids in /proc/self/mountstats.  This doesn't break
>>>> the nfs-utils mountstats tool.
>>>>
>>>> Signed-off-by: Weston Andros Adamson <dros@netapp.com>
>>>> ---
>>>> fs/nfs/client.c           |    1 +
>>>> fs/nfs/nfs4proc.c         |   21 +++++++++++++++++++++
>>>> fs/nfs/nfs4xdr.c          |   42 +++++++++++++++++++++++++++++++++++++-----
>>>> fs/nfs/super.c            |    8 ++++++++
>>>> include/linux/nfs_fs_sb.h |    2 ++
>>>> include/linux/nfs_xdr.h   |   15 +++++++--------
>>>> 6 files changed, 76 insertions(+), 13 deletions(-)
>>>>
>>>
>>> <snip>
>>>
>>>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>>>> index d05024a..5462225 100644
>>>> --- a/fs/nfs/super.c
>>>> +++ b/fs/nfs/super.c
>>>> @@ -809,6 +809,14 @@ static int nfs_show_stats(struct seq_file *m, struct dentry *root)
>>>>
>>>> 	seq_printf(m, "\n\tage:\t%lu", (jiffies - nfss->mount_time) / HZ);
>>>>
>>>> +	if (nfss->nfs_client && nfss->nfs_client->impl_id) {
>>>> +		struct nfs41_impl_id *impl_id = nfss->nfs_client->impl_id;
>>>
>>>
>>> "struct nfs41_impl_id" is only defined when CONFIG_NFS_V4_1 is enabled, so if I compile without NFS 4.1 enabled I get this error:
>>>
>>>  CC [M]  fs/nfs/super.o
>>> /home/bjschuma/linux/modules/fs/nfs/super.c: In function 'nfs_show_stats':
>>> /home/bjschuma/linux/modules/fs/nfs/super.c:843:14: error: dereferencing pointer to incomplete type
>>> /home/bjschuma/linux/modules/fs/nfs/super.c:843:29: error: dereferencing pointer to incomplete type
>>> /home/bjschuma/linux/modules/fs/nfs/super.c:844:14: error: dereferencing pointer to incomplete type
>>> /home/bjschuma/linux/modules/fs/nfs/super.c:844:37: error: dereferencing pointer to incomplete type
>>> make[3]: *** [fs/nfs/super.o] Error 1
> 
> Oops!  Good catch Bryan!
> 
>>
>> Hi Bryan & Dros
>>
>> I've applied the following patch to fix this issue. Please advise if
>> you're still seeing compile problems when it is applied.
>>
>> 8<----------------------------------------------------------------------------
>> From d032769b833d8fbaaa620a54300979dd5881d493 Mon Sep 17 00:00:00 2001
>> From: Trond Myklebust <Trond.Myklebust@netapp.com>
>> Date: Sun, 4 Mar 2012 18:12:57 -0500
>> Subject: [PATCH] NFS: Fix a compile issue when !CONFIG_NFS_V4_1
>>
>> The attempt to display the implementation ID needs to be conditional on
>> whether or not CONFIG_NFS_V4_1 is defined
>>
>> Reported-by: Bryan Schumaker <Bryan.Schumaker@netapp.com>
>> Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>
>> ---
>> fs/nfs/super.c |   22 +++++++++++++++-------
>> 1 files changed, 15 insertions(+), 7 deletions(-)
>>
>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>> index 3935a37..61419c9 100644
>> --- a/fs/nfs/super.c
>> +++ b/fs/nfs/super.c
>> @@ -785,8 +785,22 @@ static void show_pnfs(struct seq_file *m, struct nfs_server *server)
>> 	else
>> 		seq_printf(m, "not configured");
>> }
>> +
>> +static void show_implementation_id(struct seq_file *m, struct nfs_server *nfss)
>> +{
>> +	if (nfss->nfs_client && nfss->nfs_client->impl_id) {
>> +		struct nfs41_impl_id *impl_id = nfss->nfs_client->impl_id;
>> +		seq_printf(m, "\n\timpl_id:\tname='%s',domain='%s',"
>> +			   "date='%llu,%u'",
>> +			   impl_id->name, impl_id->domain,
>> +			   impl_id->date.seconds, impl_id->date.nseconds);
>> +	}
>> +}
>> #else
>> static void show_pnfs(struct seq_file *m, struct nfs_server *server) {}
>> +static void show_implementation_id(struct seq_file *m, struct nfs_server *nfss)
>> +{
>> +}
>> #endif
>> #endif
>>
>> @@ -836,13 +850,7 @@ static int nfs_show_stats(struct seq_file *m, struct dentry *root)
>>
>> 	seq_printf(m, "\n\tage:\t%lu", (jiffies - nfss->mount_time) / HZ);
>>
>> -	if (nfss->nfs_client && nfss->nfs_client->impl_id) {
>> -		struct nfs41_impl_id *impl_id = nfss->nfs_client->impl_id;
>> -		seq_printf(m, "\n\timpl_id:\tname='%s',domain='%s',"
>> -			   "date='%llu,%u'",
>> -			   impl_id->name, impl_id->domain,
>> -			   impl_id->date.seconds, impl_id->date.nseconds);
>> -	}
>> +	show_implementation_id(m, nfss);
>>
>> 	seq_printf(m, "\n\tcaps:\t");
>> 	seq_printf(m, "caps=0x%x", nfss->caps);
>> -- 
>> 1.7.7.6
> 
> Works for me.  I need to test with different CONFIG opts more often!


That's actually how I found this.  I set up Jenkins to change all the nfs CONFIG options to make sure I had everything covered for my modules patches.  I've added compile testing to my normal nightly tests now, so these issuse should be caught faster.

- Bryan

> 
> -dros



^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2012-03-06 17:15 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-02-17 20:20 [PATCH 1/3] NFSv4: Send implementation id with exchange_id Weston Andros Adamson
2012-02-17 20:20 ` [PATCH 2/3] NFSv4: fix server_scope memory leak Weston Andros Adamson
2012-02-17 20:20 ` [PATCH 3/3] NFSv4: parse and display server implementation ids Weston Andros Adamson
2012-03-03 14:09   ` Bryan Schumaker
2012-03-04 23:33     ` Myklebust, Trond
2012-03-06 17:08       ` Adamson, Dros
2012-03-06 17:12         ` Myklebust, Trond
2012-03-06 17:15         ` Bryan Schumaker
  -- strict thread matches above, loose matches on Subject: below --
2012-02-16 16:17 [PATCH 1/3] NFSv4: Send implementation id with exchange_id Weston Andros Adamson
2012-02-16 17:30 ` Jim Rees
2012-02-16 17:36   ` Myklebust, Trond
2012-02-16 17:37   ` Adamson, Dros
2012-02-16 17:41     ` Adamson, Dros
2012-02-16 20:10       ` Jim Rees
2012-02-16 20:35         ` Myklebust, Trond
2012-02-16 20:40 ` Myklebust, Trond
2012-02-16 20:52   ` Adamson, Dros

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).