2018-04-17 18:42:22

by Steve Dickson

[permalink] [raw]
Subject: [PATCH] nfsd: Set default minor versions

Due to the way the kernel stores the supported
minor versions, when a minor is turned off,
via the -N flag, it can only turned back on
via -V flag.

The default minor values should also enable
these minor versions.

Signed-off-by: Steve Dickson <[email protected]>
---
support/include/nfs/nfs.h | 1 +
utils/nfsd/nfsd.c | 4 ++--
2 files changed, 3 insertions(+), 2 deletions(-)

diff --git a/support/include/nfs/nfs.h b/support/include/nfs/nfs.h
index 7933ff5..b7d9e06 100644
--- a/support/include/nfs/nfs.h
+++ b/support/include/nfs/nfs.h
@@ -40,6 +40,7 @@ struct nfs_fh_len {
#define NFSCTL_TCPISSET(_cltbits) ((_cltbits) & NFSCTL_TCPBIT)

#define NFSCTL_VERDEFAULT (0xc) /* versions 3 and 4 */
+#define NFSCTL_MINDEFAULT (0x7) /* minor versions 4.1 and 4.2 */
#define NFSCTL_VERSET(_cltbits, _v) ((_cltbits) |= (1 << ((_v) - 1)))
#define NFSCTL_MINORSET(_cltbits, _v) ((_cltbits) |= (1 << (_v)))
#define NFSCTL_UDPSET(_cltbits) ((_cltbits) |= NFSCTL_UDPBIT)
diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
index f41a2de..2303a5d 100644
--- a/utils/nfsd/nfsd.c
+++ b/utils/nfsd/nfsd.c
@@ -65,8 +65,8 @@ main(int argc, char **argv)
int hcounter = 0;
struct conf_list *hosts;
int socket_up = 0;
- unsigned int minorvers = 0;
- unsigned int minorversset = 0;
+ unsigned int minorvers = NFSCTL_MINDEFAULT;
+ unsigned int minorversset = NFSCTL_MINDEFAULT;
unsigned int minormask = 0;
unsigned int versbits = NFSCTL_VERDEFAULT;
unsigned int protobits = NFSCTL_PROTODEFAULT;
--
2.14.3



2018-04-18 16:22:28

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH] nfsd: Set default minor versions

On Tue, Apr 17, 2018 at 02:42:20PM -0400, Steve Dickson wrote:
> Due to the way the kernel stores the supported
> minor versions, when a minor is turned off,
> via the -N flag, it can only turned back on
> via -V flag.
>
> The default minor values should also enable
> these minor versions.

Yeah, I remember now why I didn't want this.

It means that by default if somebody installs an old kernel from the
time when 4.1/4.2 support was much more experimental, then they get
4.1 and 4.2 by default.

Whereas if rpc.nfsd just doesn't touch those values then they'll get the
kernel default, leaving 4.1/4.2 off on older kernels and turning them
back on on newer kernels.

But, whatever, I'm not sure that was the right approach. And 4.2's been
the kernel's default for 3 years now anyway.

So, ACK to the patch, thanks.

--b.

>
> Signed-off-by: Steve Dickson <[email protected]>
> ---
> support/include/nfs/nfs.h | 1 +
> utils/nfsd/nfsd.c | 4 ++--
> 2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/support/include/nfs/nfs.h b/support/include/nfs/nfs.h
> index 7933ff5..b7d9e06 100644
> --- a/support/include/nfs/nfs.h
> +++ b/support/include/nfs/nfs.h
> @@ -40,6 +40,7 @@ struct nfs_fh_len {
> #define NFSCTL_TCPISSET(_cltbits) ((_cltbits) & NFSCTL_TCPBIT)
>
> #define NFSCTL_VERDEFAULT (0xc) /* versions 3 and 4 */
> +#define NFSCTL_MINDEFAULT (0x7) /* minor versions 4.1 and 4.2 */
> #define NFSCTL_VERSET(_cltbits, _v) ((_cltbits) |= (1 << ((_v) - 1)))
> #define NFSCTL_MINORSET(_cltbits, _v) ((_cltbits) |= (1 << (_v)))
> #define NFSCTL_UDPSET(_cltbits) ((_cltbits) |= NFSCTL_UDPBIT)
> diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
> index f41a2de..2303a5d 100644
> --- a/utils/nfsd/nfsd.c
> +++ b/utils/nfsd/nfsd.c
> @@ -65,8 +65,8 @@ main(int argc, char **argv)
> int hcounter = 0;
> struct conf_list *hosts;
> int socket_up = 0;
> - unsigned int minorvers = 0;
> - unsigned int minorversset = 0;
> + unsigned int minorvers = NFSCTL_MINDEFAULT;
> + unsigned int minorversset = NFSCTL_MINDEFAULT;
> unsigned int minormask = 0;
> unsigned int versbits = NFSCTL_VERDEFAULT;
> unsigned int protobits = NFSCTL_PROTODEFAULT;
> --
> 2.14.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html

2018-04-20 15:03:07

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH] nfsd: Set default minor versions



On 04/18/2018 12:22 PM, J. Bruce Fields wrote:
> On Tue, Apr 17, 2018 at 02:42:20PM -0400, Steve Dickson wrote:
>> Due to the way the kernel stores the supported
>> minor versions, when a minor is turned off,
>> via the -N flag, it can only turned back on
>> via -V flag.
>>
>> The default minor values should also enable
>> these minor versions.
>
> Yeah, I remember now why I didn't want this.
>
> It means that by default if somebody installs an old kernel from the
> time when 4.1/4.2 support was much more experimental, then they get
> 4.1 and 4.2 by default.
>
> Whereas if rpc.nfsd just doesn't touch those values then they'll get the
> kernel default, leaving 4.1/4.2 off on older kernels and turning them
> back on on newer kernels.
>
> But, whatever, I'm not sure that was the right approach. And 4.2's been
> the kernel's default for 3 years now anyway.
Just for grinds... I added the patch to send unsupported
minor version to an older kernel (RHEL6)... No errors
and /proc/fs/nfsd/versions had the correct info.

So it appears to be harmless...

>
> So, ACK to the patch, thanks.
Thanks!

steved.

>
> --b.
>
>>
>> Signed-off-by: Steve Dickson <[email protected]>
>> ---
>> support/include/nfs/nfs.h | 1 +
>> utils/nfsd/nfsd.c | 4 ++--
>> 2 files changed, 3 insertions(+), 2 deletions(-)
>>
>> diff --git a/support/include/nfs/nfs.h b/support/include/nfs/nfs.h
>> index 7933ff5..b7d9e06 100644
>> --- a/support/include/nfs/nfs.h
>> +++ b/support/include/nfs/nfs.h
>> @@ -40,6 +40,7 @@ struct nfs_fh_len {
>> #define NFSCTL_TCPISSET(_cltbits) ((_cltbits) & NFSCTL_TCPBIT)
>>
>> #define NFSCTL_VERDEFAULT (0xc) /* versions 3 and 4 */
>> +#define NFSCTL_MINDEFAULT (0x7) /* minor versions 4.1 and 4.2 */
>> #define NFSCTL_VERSET(_cltbits, _v) ((_cltbits) |= (1 << ((_v) - 1)))
>> #define NFSCTL_MINORSET(_cltbits, _v) ((_cltbits) |= (1 << (_v)))
>> #define NFSCTL_UDPSET(_cltbits) ((_cltbits) |= NFSCTL_UDPBIT)
>> diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
>> index f41a2de..2303a5d 100644
>> --- a/utils/nfsd/nfsd.c
>> +++ b/utils/nfsd/nfsd.c
>> @@ -65,8 +65,8 @@ main(int argc, char **argv)
>> int hcounter = 0;
>> struct conf_list *hosts;
>> int socket_up = 0;
>> - unsigned int minorvers = 0;
>> - unsigned int minorversset = 0;
>> + unsigned int minorvers = NFSCTL_MINDEFAULT;
>> + unsigned int minorversset = NFSCTL_MINDEFAULT;
>> unsigned int minormask = 0;
>> unsigned int versbits = NFSCTL_VERDEFAULT;
>> unsigned int protobits = NFSCTL_PROTODEFAULT;
>> --
>> 2.14.3
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-nfs" in
>> the body of a message to [email protected]
>> More majordomo info at http://vger.kernel.org/majordomo-info.html

2018-04-20 15:03:52

by Steve Dickson

[permalink] [raw]
Subject: Re: [PATCH] nfsd: Set default minor versions



On 04/17/2018 02:42 PM, Steve Dickson wrote:
> Due to the way the kernel stores the supported
> minor versions, when a minor is turned off,
> via the -N flag, it can only turned back on
> via -V flag.
>
> The default minor values should also enable
> these minor versions.
>
> Signed-off-by: Steve Dickson <[email protected]>
Committed...

steved.
> ---
> support/include/nfs/nfs.h | 1 +
> utils/nfsd/nfsd.c | 4 ++--
> 2 files changed, 3 insertions(+), 2 deletions(-)
>
> diff --git a/support/include/nfs/nfs.h b/support/include/nfs/nfs.h
> index 7933ff5..b7d9e06 100644
> --- a/support/include/nfs/nfs.h
> +++ b/support/include/nfs/nfs.h
> @@ -40,6 +40,7 @@ struct nfs_fh_len {
> #define NFSCTL_TCPISSET(_cltbits) ((_cltbits) & NFSCTL_TCPBIT)
>
> #define NFSCTL_VERDEFAULT (0xc) /* versions 3 and 4 */
> +#define NFSCTL_MINDEFAULT (0x7) /* minor versions 4.1 and 4.2 */
> #define NFSCTL_VERSET(_cltbits, _v) ((_cltbits) |= (1 << ((_v) - 1)))
> #define NFSCTL_MINORSET(_cltbits, _v) ((_cltbits) |= (1 << (_v)))
> #define NFSCTL_UDPSET(_cltbits) ((_cltbits) |= NFSCTL_UDPBIT)
> diff --git a/utils/nfsd/nfsd.c b/utils/nfsd/nfsd.c
> index f41a2de..2303a5d 100644
> --- a/utils/nfsd/nfsd.c
> +++ b/utils/nfsd/nfsd.c
> @@ -65,8 +65,8 @@ main(int argc, char **argv)
> int hcounter = 0;
> struct conf_list *hosts;
> int socket_up = 0;
> - unsigned int minorvers = 0;
> - unsigned int minorversset = 0;
> + unsigned int minorvers = NFSCTL_MINDEFAULT;
> + unsigned int minorversset = NFSCTL_MINDEFAULT;
> unsigned int minormask = 0;
> unsigned int versbits = NFSCTL_VERDEFAULT;
> unsigned int protobits = NFSCTL_PROTODEFAULT;
>