linux-nfs.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] NFS: Revert default r/wsize behavior
@ 2009-09-10 21:05 Chuck Lever
       [not found] ` <20090910205950.3670.7878.stgit-RytpoXr2tKZ9HhUboXbp9zCvJB+x5qRC@public.gmane.org>
  0 siblings, 1 reply; 5+ messages in thread
From: Chuck Lever @ 2009-09-10 21:05 UTC (permalink / raw)
  To: james-p-5Ol4pYTxKWu0ML75eksnrtBPR1lH4CV8; +Cc: linux-nfs

When the "rsize=" or "wsize=" mount options are not specified,
text-based mounts have slightly different behavior than legacy binary
mounts.  Text-based mounts use the smaller of the server's maximum
and the client's maximum, but binary mounts use the smaller of the
server's _preferred_ size and the client's maximum.

This difference is actually pretty subtle.  Most servers advertise
the same value as their largest and their preferred transfer size, so
the end result is the same in most cases.

The reason for this difference is that for text-based mounts, if
r/wsize are not specified, they are set to the largest value supported
by the client.  For binary mounts, the values are set to zero if these
options are not specified.

nfs_server_set_fsinfo() can negotiate the defaults correctly in any
case.  There's no need to specify any particular value as default in
the text-based option parsing logic.

Thanks to James Pearson <james-p-5Ol4pYTxKWu0ML75eksnrtBPR1lH4CV8@public.gmane.org> for reporting and
diagnosing the problem.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
---

James-

Is this what you want?

 fs/nfs/super.c |    4 ----
 1 files changed, 0 insertions(+), 4 deletions(-)

diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index bde444b..cf0d754 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -1635,8 +1635,6 @@ static int nfs_validate_mount_data(void *options,
 		goto out_no_data;
 
 	args->flags		= (NFS_MOUNT_VER3 | NFS_MOUNT_TCP);
-	args->rsize		= NFS_MAX_FILE_IO_SIZE;
-	args->wsize		= NFS_MAX_FILE_IO_SIZE;
 	args->acregmin		= NFS_DEF_ACREGMIN;
 	args->acregmax		= NFS_DEF_ACREGMAX;
 	args->acdirmin		= NFS_DEF_ACDIRMIN;
@@ -2351,8 +2349,6 @@ static int nfs4_validate_mount_data(void *options,
 	if (data == NULL)
 		goto out_no_data;
 
-	args->rsize		= NFS_MAX_FILE_IO_SIZE;
-	args->wsize		= NFS_MAX_FILE_IO_SIZE;
 	args->acregmin		= NFS_DEF_ACREGMIN;
 	args->acregmax		= NFS_DEF_ACREGMAX;
 	args->acdirmin		= NFS_DEF_ACDIRMIN;


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

* Re: [PATCH] NFS: Revert default r/wsize behavior
       [not found] ` <20090910205950.3670.7878.stgit-RytpoXr2tKZ9HhUboXbp9zCvJB+x5qRC@public.gmane.org>
@ 2009-09-10 21:17   ` Trond Myklebust
       [not found]     ` <1252617432.8722.157.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
  2009-09-11  9:33   ` James Pearson
  1 sibling, 1 reply; 5+ messages in thread
From: Trond Myklebust @ 2009-09-10 21:17 UTC (permalink / raw)
  To: Chuck Lever; +Cc: james-p-5Ol4pYTxKWu0ML75eksnrtBPR1lH4CV8, linux-nfs

On Thu, 2009-09-10 at 17:05 -0400, Chuck Lever wrote:
> When the "rsize=" or "wsize=" mount options are not specified,
> text-based mounts have slightly different behavior than legacy binary
> mounts.  Text-based mounts use the smaller of the server's maximum
> and the client's maximum, but binary mounts use the smaller of the
> server's _preferred_ size and the client's maximum.
> 
> This difference is actually pretty subtle.  Most servers advertise
> the same value as their largest and their preferred transfer size, so
> the end result is the same in most cases.
> 
> The reason for this difference is that for text-based mounts, if
> r/wsize are not specified, they are set to the largest value supported
> by the client.  For binary mounts, the values are set to zero if these
> options are not specified.
> 
> nfs_server_set_fsinfo() can negotiate the defaults correctly in any
> case.  There's no need to specify any particular value as default in
> the text-based option parsing logic.
> 
> Thanks to James Pearson <james-p-5Ol4pYTxKWu0ML75eksnrtBPR1lH4CV8@public.gmane.org> for reporting and
> diagnosing the problem.
> 
> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
> ---
> 
> James-
> 
> Is this what you want?

Hmm.... Strictly speaking, I don't think we need to do this for the
NFSv4 case, since that has no equivalent to the NFSv3 rtpref/wtpref
attribute. It might help make the code look more consistent, though.

Note: at some point soon, I want to clean those functions up by
introducing an 'alloc_nfs_parsed_mount_data()' function that both
allocates the nfs_parsed_mount_data structure and initialises it with
the common defaults.


>  fs/nfs/super.c |    4 ----
>  1 files changed, 0 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> index bde444b..cf0d754 100644
> --- a/fs/nfs/super.c
> +++ b/fs/nfs/super.c
> @@ -1635,8 +1635,6 @@ static int nfs_validate_mount_data(void *options,
>  		goto out_no_data;
>  
>  	args->flags		= (NFS_MOUNT_VER3 | NFS_MOUNT_TCP);
> -	args->rsize		= NFS_MAX_FILE_IO_SIZE;
> -	args->wsize		= NFS_MAX_FILE_IO_SIZE;
>  	args->acregmin		= NFS_DEF_ACREGMIN;
>  	args->acregmax		= NFS_DEF_ACREGMAX;
>  	args->acdirmin		= NFS_DEF_ACDIRMIN;
> @@ -2351,8 +2349,6 @@ static int nfs4_validate_mount_data(void *options,
>  	if (data == NULL)
>  		goto out_no_data;
>  
> -	args->rsize		= NFS_MAX_FILE_IO_SIZE;
> -	args->wsize		= NFS_MAX_FILE_IO_SIZE;
>  	args->acregmin		= NFS_DEF_ACREGMIN;
>  	args->acregmax		= NFS_DEF_ACREGMAX;
>  	args->acdirmin		= NFS_DEF_ACDIRMIN;
> 
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



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

* Re: [PATCH] NFS: Revert default r/wsize behavior
       [not found]     ` <1252617432.8722.157.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
@ 2009-09-10 21:30       ` Chuck Lever
  2009-09-30 15:14       ` James Pearson
  1 sibling, 0 replies; 5+ messages in thread
From: Chuck Lever @ 2009-09-10 21:30 UTC (permalink / raw)
  To: Trond Myklebust; +Cc: james-p-5Ol4pYTxKWu0ML75eksnrtBPR1lH4CV8, linux-nfs

On Sep 10, 2009, at 5:17 PM, Trond Myklebust wrote:
> On Thu, 2009-09-10 at 17:05 -0400, Chuck Lever wrote:
>> When the "rsize=" or "wsize=" mount options are not specified,
>> text-based mounts have slightly different behavior than legacy binary
>> mounts.  Text-based mounts use the smaller of the server's maximum
>> and the client's maximum, but binary mounts use the smaller of the
>> server's _preferred_ size and the client's maximum.
>>
>> This difference is actually pretty subtle.  Most servers advertise
>> the same value as their largest and their preferred transfer size, so
>> the end result is the same in most cases.
>>
>> The reason for this difference is that for text-based mounts, if
>> r/wsize are not specified, they are set to the largest value  
>> supported
>> by the client.  For binary mounts, the values are set to zero if  
>> these
>> options are not specified.
>>
>> nfs_server_set_fsinfo() can negotiate the defaults correctly in any
>> case.  There's no need to specify any particular value as default in
>> the text-based option parsing logic.
>>
>> Thanks to James Pearson <james-p-5Ol4pYTxKWu0ML75eksnrtBPR1lH4CV8@public.gmane.org> for reporting  
>> and
>> diagnosing the problem.
>>
>> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
>> ---
>>
>> James-
>>
>> Is this what you want?
>
> Hmm.... Strictly speaking, I don't think we need to do this for the
> NFSv4 case, since that has no equivalent to the NFSv3 rtpref/wtpref
> attribute. It might help make the code look more consistent, though.

I was just about to check that against mount.nfs4.

> Note: at some point soon, I want to clean those functions up by
> introducing an 'alloc_nfs_parsed_mount_data()' function that both
> allocates the nfs_parsed_mount_data structure and initialises it with
> the common defaults.

Sounds good.

> fs/nfs/super.c |    4 ----
>> 1 files changed, 0 insertions(+), 4 deletions(-)
>>
>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>> index bde444b..cf0d754 100644
>> --- a/fs/nfs/super.c
>> +++ b/fs/nfs/super.c
>> @@ -1635,8 +1635,6 @@ static int nfs_validate_mount_data(void  
>> *options,
>> 		goto out_no_data;
>>
>> 	args->flags		= (NFS_MOUNT_VER3 | NFS_MOUNT_TCP);
>> -	args->rsize		= NFS_MAX_FILE_IO_SIZE;
>> -	args->wsize		= NFS_MAX_FILE_IO_SIZE;
>> 	args->acregmin		= NFS_DEF_ACREGMIN;
>> 	args->acregmax		= NFS_DEF_ACREGMAX;
>> 	args->acdirmin		= NFS_DEF_ACDIRMIN;
>> @@ -2351,8 +2349,6 @@ static int nfs4_validate_mount_data(void  
>> *options,
>> 	if (data == NULL)
>> 		goto out_no_data;
>>
>> -	args->rsize		= NFS_MAX_FILE_IO_SIZE;
>> -	args->wsize		= NFS_MAX_FILE_IO_SIZE;
>> 	args->acregmin		= NFS_DEF_ACREGMIN;
>> 	args->acregmax		= NFS_DEF_ACREGMAX;
>> 	args->acdirmin		= NFS_DEF_ACDIRMIN;
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux- 
>> nfs" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>
>

--
Chuck Lever
chuck[dot]lever[at]oracle[dot]com




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

* Re: [PATCH] NFS: Revert default r/wsize behavior
       [not found] ` <20090910205950.3670.7878.stgit-RytpoXr2tKZ9HhUboXbp9zCvJB+x5qRC@public.gmane.org>
  2009-09-10 21:17   ` Trond Myklebust
@ 2009-09-11  9:33   ` James Pearson
  1 sibling, 0 replies; 5+ messages in thread
From: James Pearson @ 2009-09-11  9:33 UTC (permalink / raw)
  To: Chuck Lever; +Cc: linux-nfs

Chuck Lever wrote:
> When the "rsize=" or "wsize=" mount options are not specified,
> text-based mounts have slightly different behavior than legacy binary
> mounts.  Text-based mounts use the smaller of the server's maximum
> and the client's maximum, but binary mounts use the smaller of the
> server's _preferred_ size and the client's maximum.
> 
> This difference is actually pretty subtle.  Most servers advertise
> the same value as their largest and their preferred transfer size, so
> the end result is the same in most cases.
> 
> The reason for this difference is that for text-based mounts, if
> r/wsize are not specified, they are set to the largest value supported
> by the client.  For binary mounts, the values are set to zero if these
> options are not specified.
> 
> nfs_server_set_fsinfo() can negotiate the defaults correctly in any
> case.  There's no need to specify any particular value as default in
> the text-based option parsing logic.
> 
> Thanks to James Pearson <james-p-5Ol4pYTxKWu0ML75eksnrtBPR1lH4CV8@public.gmane.org> for reporting and
> diagnosing the problem.
> 
> Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
> ---
> 
> James-
> 
> Is this what you want?
> 
>  fs/nfs/super.c |    4 ----
>  1 files changed, 0 insertions(+), 4 deletions(-)
> 
> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> index bde444b..cf0d754 100644
> --- a/fs/nfs/super.c
> +++ b/fs/nfs/super.c
> @@ -1635,8 +1635,6 @@ static int nfs_validate_mount_data(void *options,
>  		goto out_no_data;
>  
>  	args->flags		= (NFS_MOUNT_VER3 | NFS_MOUNT_TCP);
> -	args->rsize		= NFS_MAX_FILE_IO_SIZE;
> -	args->wsize		= NFS_MAX_FILE_IO_SIZE;
>  	args->acregmin		= NFS_DEF_ACREGMIN;
>  	args->acregmax		= NFS_DEF_ACREGMAX;
>  	args->acdirmin		= NFS_DEF_ACDIRMIN;
> @@ -2351,8 +2349,6 @@ static int nfs4_validate_mount_data(void *options,
>  	if (data == NULL)
>  		goto out_no_data;
>  
> -	args->rsize		= NFS_MAX_FILE_IO_SIZE;
> -	args->wsize		= NFS_MAX_FILE_IO_SIZE;
>  	args->acregmin		= NFS_DEF_ACREGMIN;
>  	args->acregmax		= NFS_DEF_ACREGMAX;
>  	args->acdirmin		= NFS_DEF_ACDIRMIN;

That is what I've already done myself for the NFSv3 case - personally I 
would implicitly set args->[rw]size to zero (although args would have 
been initialled with kzalloc()), just to make it clear that the defaults 
are zero.

Thanks

James Pearson

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

* Re: [PATCH] NFS: Revert default r/wsize behavior
       [not found]     ` <1252617432.8722.157.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
  2009-09-10 21:30       ` Chuck Lever
@ 2009-09-30 15:14       ` James Pearson
  1 sibling, 0 replies; 5+ messages in thread
From: James Pearson @ 2009-09-30 15:14 UTC (permalink / raw)
  To: Trond Myklebust; +Cc: Chuck Lever, linux-nfs

Trond Myklebust wrote:
> 
> Hmm.... Strictly speaking, I don't think we need to do this for the
> NFSv4 case, since that has no equivalent to the NFSv3 rtpref/wtpref
> attribute. It might help make the code look more consistent, though.
> 
> Note: at some point soon, I want to clean those functions up by
> introducing an 'alloc_nfs_parsed_mount_data()' function that both
> allocates the nfs_parsed_mount_data structure and initialises it with
> the common defaults.

I notice that 2.6.32-rc1 now has the 'alloc_nfs_parsed_mount_data()' 
function - but [rw]size still defaults to NFS_MAX_FILE_IO_SIZE - 
shouldn't these now be set to 0 by default?

Thanks

James Pearson







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

end of thread, other threads:[~2009-09-30 15:14 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-09-10 21:05 [PATCH] NFS: Revert default r/wsize behavior Chuck Lever
     [not found] ` <20090910205950.3670.7878.stgit-RytpoXr2tKZ9HhUboXbp9zCvJB+x5qRC@public.gmane.org>
2009-09-10 21:17   ` Trond Myklebust
     [not found]     ` <1252617432.8722.157.camel-rJ7iovZKK19ZJLDQqaL3InhyD016LWXt@public.gmane.org>
2009-09-10 21:30       ` Chuck Lever
2009-09-30 15:14       ` James Pearson
2009-09-11  9:33   ` James Pearson

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).