Re: [PATCH 3/3] NFSv4: parse and display server implementation ids

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
>>>> ---
>>>> 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@xxxxxxxxxx>
>> 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@xxxxxxxxxx>
>> Signed-off-by: Trond Myklebust <Trond.Myklebust@xxxxxxxxxx>
>> ---
>> 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


--
To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Filesystem Development]     [Linux USB Development]     [Linux Media Development]     [Video for Linux]     [Linux NILFS]     [Linux Audio Users]     [Yosemite Info]     [Linux SCSI]

  Powered by Linux