2016-03-16 18:30:50

by Shirley Ma

[permalink] [raw]
Subject: [PATCH] nfs: add nfs IPv6 rdma6 mount option support

Add rdma6 option to support NFS/RDMA IPv6.

Signed-off-by: Shirley Ma <[email protected]>
---

diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index f126828..62a55d0 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -191,6 +191,7 @@ static const match_table_t nfs_mount_option_tokens = {

enum {
Opt_xprt_udp, Opt_xprt_udp6, Opt_xprt_tcp, Opt_xprt_tcp6, Opt_xprt_rdma,
+ Opt_xprt_rdma6,

Opt_xprt_err
};
@@ -201,6 +202,7 @@ static const match_table_t nfs_xprt_protocol_tokens = {
{ Opt_xprt_tcp, "tcp" },
{ Opt_xprt_tcp6, "tcp6" },
{ Opt_xprt_rdma, "rdma" },
+ { Opt_xprt_rdma6, "rdma6" },

{ Opt_xprt_err, NULL }
};
@@ -1456,6 +1458,8 @@ static int nfs_parse_mount_options(char *raw,
mnt->flags |= NFS_MOUNT_TCP;
mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;
break;
+ case Opt_xprt_rdma6:
+ protofamily = AF_INET6;
case Opt_xprt_rdma:
/* vector side protocols to TCP */
mnt->flags |= NFS_MOUNT_TCP;
@@ -1490,6 +1494,8 @@ static int nfs_parse_mount_options(char *raw,
case Opt_xprt_tcp:
mnt->mount_server.protocol = XPRT_TRANSPORT_TCP;
break;
+ case Opt_xprt_rdma6:
+ mountfamily = AF_INET6;
case Opt_xprt_rdma: /* not used for side protocols */
default:
dfprintk(MOUNT, "NFS: unrecognized "
diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h
index 8073713..49b8433 100644
--- a/include/linux/sunrpc/msg_prot.h
+++ b/include/linux/sunrpc/msg_prot.h
@@ -149,6 +149,7 @@ typedef __be32 rpc_fraghdr;
#define RPCBIND_NETID_UDP "udp"
#define RPCBIND_NETID_TCP "tcp"
#define RPCBIND_NETID_RDMA "rdma"
+#define RPCBIND_NETID_RDMA6 "rdma6"
#define RPCBIND_NETID_SCTP "sctp"
#define RPCBIND_NETID_UDP6 "udp6"
#define RPCBIND_NETID_TCP6 "tcp6"



2016-03-16 18:46:56

by J. Bruce Fields

[permalink] [raw]
Subject: Re: [PATCH] nfs: add nfs IPv6 rdma6 mount option support

On Wed, Mar 16, 2016 at 11:30:40AM -0700, Shirley Ma wrote:
> Add rdma6 option to support NFS/RDMA IPv6.

This is client-side: cc'ing Trond and Anna.--b.

>
> Signed-off-by: Shirley Ma <[email protected]>
> ---
>
> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> index f126828..62a55d0 100644
> --- a/fs/nfs/super.c
> +++ b/fs/nfs/super.c
> @@ -191,6 +191,7 @@ static const match_table_t nfs_mount_option_tokens = {
>
> enum {
> Opt_xprt_udp, Opt_xprt_udp6, Opt_xprt_tcp, Opt_xprt_tcp6, Opt_xprt_rdma,
> + Opt_xprt_rdma6,
>
> Opt_xprt_err
> };
> @@ -201,6 +202,7 @@ static const match_table_t nfs_xprt_protocol_tokens = {
> { Opt_xprt_tcp, "tcp" },
> { Opt_xprt_tcp6, "tcp6" },
> { Opt_xprt_rdma, "rdma" },
> + { Opt_xprt_rdma6, "rdma6" },
>
> { Opt_xprt_err, NULL }
> };
> @@ -1456,6 +1458,8 @@ static int nfs_parse_mount_options(char *raw,
> mnt->flags |= NFS_MOUNT_TCP;
> mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;
> break;
> + case Opt_xprt_rdma6:
> + protofamily = AF_INET6;
> case Opt_xprt_rdma:
> /* vector side protocols to TCP */
> mnt->flags |= NFS_MOUNT_TCP;
> @@ -1490,6 +1494,8 @@ static int nfs_parse_mount_options(char *raw,
> case Opt_xprt_tcp:
> mnt->mount_server.protocol = XPRT_TRANSPORT_TCP;
> break;
> + case Opt_xprt_rdma6:
> + mountfamily = AF_INET6;
> case Opt_xprt_rdma: /* not used for side protocols */
> default:
> dfprintk(MOUNT, "NFS: unrecognized "
> diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h
> index 8073713..49b8433 100644
> --- a/include/linux/sunrpc/msg_prot.h
> +++ b/include/linux/sunrpc/msg_prot.h
> @@ -149,6 +149,7 @@ typedef __be32 rpc_fraghdr;
> #define RPCBIND_NETID_UDP "udp"
> #define RPCBIND_NETID_TCP "tcp"
> #define RPCBIND_NETID_RDMA "rdma"
> +#define RPCBIND_NETID_RDMA6 "rdma6"
> #define RPCBIND_NETID_SCTP "sctp"
> #define RPCBIND_NETID_UDP6 "udp6"
> #define RPCBIND_NETID_TCP6 "tcp6"
>

2016-03-22 19:38:25

by Anna Schumaker

[permalink] [raw]
Subject: Re: [PATCH] nfs: add nfs IPv6 rdma6 mount option support

Hi Shirley,

Sorry for the delay in looking at this patch. Comments are below:

On 03/16/2016 02:30 PM, Shirley Ma wrote:
> Add rdma6 option to support NFS/RDMA IPv6.
>
> Signed-off-by: Shirley Ma <[email protected]>

Can you add a little more to the patch description to describe when RDMA with IPv6 would be used?

> ---
>
> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> index f126828..62a55d0 100644
> --- a/fs/nfs/super.c
> +++ b/fs/nfs/super.c
> @@ -191,6 +191,7 @@ static const match_table_t nfs_mount_option_tokens = {
>
> enum {
> Opt_xprt_udp, Opt_xprt_udp6, Opt_xprt_tcp, Opt_xprt_tcp6, Opt_xprt_rdma,
> + Opt_xprt_rdma6,
>
> Opt_xprt_err
> };
> @@ -201,6 +202,7 @@ static const match_table_t nfs_xprt_protocol_tokens = {
> { Opt_xprt_tcp, "tcp" },
> { Opt_xprt_tcp6, "tcp6" },
> { Opt_xprt_rdma, "rdma" },
> + { Opt_xprt_rdma6, "rdma6" },
>
> { Opt_xprt_err, NULL }
> };
> @@ -1456,6 +1458,8 @@ static int nfs_parse_mount_options(char *raw,
> mnt->flags |= NFS_MOUNT_TCP;
> mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;
> break;
> + case Opt_xprt_rdma6:
> + protofamily = AF_INET6;
> case Opt_xprt_rdma:
> /* vector side protocols to TCP */
> mnt->flags |= NFS_MOUNT_TCP;
> @@ -1490,6 +1494,8 @@ static int nfs_parse_mount_options(char *raw,
> case Opt_xprt_tcp:
> mnt->mount_server.protocol = XPRT_TRANSPORT_TCP;
> break;
> + case Opt_xprt_rdma6:
> + mountfamily = AF_INET6;
> case Opt_xprt_rdma: /* not used for side protocols */
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Do we need to be setting mountfamily here? The comment next to Opt_xprt_rdma makes it sound like this code doesn't apply to RDMA.

> default:
> dfprintk(MOUNT, "NFS: unrecognized "
> diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h
> index 8073713..49b8433 100644
> --- a/include/linux/sunrpc/msg_prot.h
> +++ b/include/linux/sunrpc/msg_prot.h
> @@ -149,6 +149,7 @@ typedef __be32 rpc_fraghdr;
> #define RPCBIND_NETID_UDP "udp"
> #define RPCBIND_NETID_TCP "tcp"
> #define RPCBIND_NETID_RDMA "rdma"
> +#define RPCBIND_NETID_RDMA6 "rdma6"

This is defined right after tcp6, so we probably don't need it twice :).

Thanks,
Anna

> #define RPCBIND_NETID_SCTP "sctp"
> #define RPCBIND_NETID_UDP6 "udp6"
> #define RPCBIND_NETID_TCP6 "tcp6"
>
> --
> 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
>


2016-03-22 21:24:16

by Chuck Lever

[permalink] [raw]
Subject: Re: [PATCH] nfs: add nfs IPv6 rdma6 mount option support


> On Mar 22, 2016, at 3:38 PM, Anna Schumaker <[email protected]> wrote:
>
> Hi Shirley,
>
> Sorry for the delay in looking at this patch. Comments are below:
>
> On 03/16/2016 02:30 PM, Shirley Ma wrote:
>> Add rdma6 option to support NFS/RDMA IPv6.
>>
>> Signed-off-by: Shirley Ma <[email protected]>
>
> Can you add a little more to the patch description to describe when RDMA with IPv6 would be used?
>
>> ---
>>
>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>> index f126828..62a55d0 100644
>> --- a/fs/nfs/super.c
>> +++ b/fs/nfs/super.c
>> @@ -191,6 +191,7 @@ static const match_table_t nfs_mount_option_tokens = {
>>
>> enum {
>> Opt_xprt_udp, Opt_xprt_udp6, Opt_xprt_tcp, Opt_xprt_tcp6, Opt_xprt_rdma,
>> + Opt_xprt_rdma6,
>>
>> Opt_xprt_err
>> };
>> @@ -201,6 +202,7 @@ static const match_table_t nfs_xprt_protocol_tokens = {
>> { Opt_xprt_tcp, "tcp" },
>> { Opt_xprt_tcp6, "tcp6" },
>> { Opt_xprt_rdma, "rdma" },
>> + { Opt_xprt_rdma6, "rdma6" },
>>
>> { Opt_xprt_err, NULL }
>> };
>> @@ -1456,6 +1458,8 @@ static int nfs_parse_mount_options(char *raw,
>> mnt->flags |= NFS_MOUNT_TCP;
>> mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;
>> break;
>> + case Opt_xprt_rdma6:
>> + protofamily = AF_INET6;
>> case Opt_xprt_rdma:
>> /* vector side protocols to TCP */
>> mnt->flags |= NFS_MOUNT_TCP;
>> @@ -1490,6 +1494,8 @@ static int nfs_parse_mount_options(char *raw,
>> case Opt_xprt_tcp:
>> mnt->mount_server.protocol = XPRT_TRANSPORT_TCP;
>> break;
>> + case Opt_xprt_rdma6:
>> + mountfamily = AF_INET6;
>> case Opt_xprt_rdma: /* not used for side protocols */
> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
> Do we need to be setting mountfamily here? The comment next to Opt_xprt_rdma makes it sound like this code doesn't apply to RDMA.

I wondered this too.

But what's going on is that for NFSv3 on RDMA, when IPv6 is
used for the main protocol, IPv6 needs to be used for the
mount protocol as well, even though it is going over TCP.


>> default:
>> dfprintk(MOUNT, "NFS: unrecognized "
>> diff --git a/include/linux/sunrpc/msg_prot.h b/include/linux/sunrpc/msg_prot.h
>> index 8073713..49b8433 100644
>> --- a/include/linux/sunrpc/msg_prot.h
>> +++ b/include/linux/sunrpc/msg_prot.h
>> @@ -149,6 +149,7 @@ typedef __be32 rpc_fraghdr;
>> #define RPCBIND_NETID_UDP "udp"
>> #define RPCBIND_NETID_TCP "tcp"
>> #define RPCBIND_NETID_RDMA "rdma"
>> +#define RPCBIND_NETID_RDMA6 "rdma6"
>
> This is defined right after tcp6, so we probably don't need it twice :).
>
> Thanks,
> Anna
>
>> #define RPCBIND_NETID_SCTP "sctp"
>> #define RPCBIND_NETID_UDP6 "udp6"
>> #define RPCBIND_NETID_TCP6 "tcp6"
>>
>> --
>> 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
>>
>
> --
> 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

--
Chuck Lever




2016-03-22 21:46:54

by Trond Myklebust

[permalink] [raw]
Subject: Re: [PATCH] nfs: add nfs IPv6 rdma6 mount option support

On Tue, Mar 22, 2016 at 5:24 PM, Chuck Lever <[email protected]> wrote:
>
>> On Mar 22, 2016, at 3:38 PM, Anna Schumaker <[email protected]> wrote:
>>
>> Hi Shirley,
>>
>> Sorry for the delay in looking at this patch. Comments are below:
>>
>> On 03/16/2016 02:30 PM, Shirley Ma wrote:
>>> Add rdma6 option to support NFS/RDMA IPv6.
>>>
>>> Signed-off-by: Shirley Ma <[email protected]>
>>
>> Can you add a little more to the patch description to describe when RDMA with IPv6 would be used?
>>
>>> ---
>>>
>>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>>> index f126828..62a55d0 100644
>>> --- a/fs/nfs/super.c
>>> +++ b/fs/nfs/super.c
>>> @@ -191,6 +191,7 @@ static const match_table_t nfs_mount_option_tokens = {
>>>
>>> enum {
>>> Opt_xprt_udp, Opt_xprt_udp6, Opt_xprt_tcp, Opt_xprt_tcp6, Opt_xprt_rdma,
>>> + Opt_xprt_rdma6,
>>>
>>> Opt_xprt_err
>>> };
>>> @@ -201,6 +202,7 @@ static const match_table_t nfs_xprt_protocol_tokens = {
>>> { Opt_xprt_tcp, "tcp" },
>>> { Opt_xprt_tcp6, "tcp6" },
>>> { Opt_xprt_rdma, "rdma" },
>>> + { Opt_xprt_rdma6, "rdma6" },
>>>
>>> { Opt_xprt_err, NULL }
>>> };
>>> @@ -1456,6 +1458,8 @@ static int nfs_parse_mount_options(char *raw,
>>> mnt->flags |= NFS_MOUNT_TCP;
>>> mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;
>>> break;
>>> + case Opt_xprt_rdma6:
>>> + protofamily = AF_INET6;
>>> case Opt_xprt_rdma:
>>> /* vector side protocols to TCP */
>>> mnt->flags |= NFS_MOUNT_TCP;
>>> @@ -1490,6 +1494,8 @@ static int nfs_parse_mount_options(char *raw,
>>> case Opt_xprt_tcp:
>>> mnt->mount_server.protocol = XPRT_TRANSPORT_TCP;
>>> break;
>>> + case Opt_xprt_rdma6:
>>> + mountfamily = AF_INET6;
>>> case Opt_xprt_rdma: /* not used for side protocols */
>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>> Do we need to be setting mountfamily here? The comment next to Opt_xprt_rdma makes it sound like this code doesn't apply to RDMA.
>
> I wondered this too.
>
> But what's going on is that for NFSv3 on RDMA, when IPv6 is
> used for the main protocol, IPv6 needs to be used for the
> mount protocol as well, even though it is going over TCP.

It causes nfs_mount_parse_options to immediately stop further parsing
and return '0' == error encountered. The mount is supposed to fail in
that case.

2016-03-22 21:52:50

by Chuck Lever

[permalink] [raw]
Subject: Re: [PATCH] nfs: add nfs IPv6 rdma6 mount option support


> On Mar 22, 2016, at 5:46 PM, Trond Myklebust <[email protected]> wrote:
>
> On Tue, Mar 22, 2016 at 5:24 PM, Chuck Lever <[email protected]> wrote:
>>
>>> On Mar 22, 2016, at 3:38 PM, Anna Schumaker <[email protected]> wrote:
>>>
>>> Hi Shirley,
>>>
>>> Sorry for the delay in looking at this patch. Comments are below:
>>>
>>> On 03/16/2016 02:30 PM, Shirley Ma wrote:
>>>> Add rdma6 option to support NFS/RDMA IPv6.
>>>>
>>>> Signed-off-by: Shirley Ma <[email protected]>
>>>
>>> Can you add a little more to the patch description to describe when RDMA with IPv6 would be used?
>>>
>>>> ---
>>>>
>>>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>>>> index f126828..62a55d0 100644
>>>> --- a/fs/nfs/super.c
>>>> +++ b/fs/nfs/super.c
>>>> @@ -191,6 +191,7 @@ static const match_table_t nfs_mount_option_tokens = {
>>>>
>>>> enum {
>>>> Opt_xprt_udp, Opt_xprt_udp6, Opt_xprt_tcp, Opt_xprt_tcp6, Opt_xprt_rdma,
>>>> + Opt_xprt_rdma6,
>>>>
>>>> Opt_xprt_err
>>>> };
>>>> @@ -201,6 +202,7 @@ static const match_table_t nfs_xprt_protocol_tokens = {
>>>> { Opt_xprt_tcp, "tcp" },
>>>> { Opt_xprt_tcp6, "tcp6" },
>>>> { Opt_xprt_rdma, "rdma" },
>>>> + { Opt_xprt_rdma6, "rdma6" },
>>>>
>>>> { Opt_xprt_err, NULL }
>>>> };
>>>> @@ -1456,6 +1458,8 @@ static int nfs_parse_mount_options(char *raw,
>>>> mnt->flags |= NFS_MOUNT_TCP;
>>>> mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;
>>>> break;
>>>> + case Opt_xprt_rdma6:
>>>> + protofamily = AF_INET6;
>>>> case Opt_xprt_rdma:
>>>> /* vector side protocols to TCP */
>>>> mnt->flags |= NFS_MOUNT_TCP;
>>>> @@ -1490,6 +1494,8 @@ static int nfs_parse_mount_options(char *raw,
>>>> case Opt_xprt_tcp:
>>>> mnt->mount_server.protocol = XPRT_TRANSPORT_TCP;
>>>> break;
>>>> + case Opt_xprt_rdma6:
>>>> + mountfamily = AF_INET6;
>>>> case Opt_xprt_rdma: /* not used for side protocols */
>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>> Do we need to be setting mountfamily here? The comment next to Opt_xprt_rdma makes it sound like this code doesn't apply to RDMA.
>>
>> I wondered this too.
>>
>> But what's going on is that for NFSv3 on RDMA, when IPv6 is
>> used for the main protocol, IPv6 needs to be used for the
>> mount protocol as well, even though it is going over TCP.
>
> It causes nfs_mount_parse_options to immediately stop further parsing
> and return '0' == error encountered. The mount is supposed to fail in
> that case.

Ah, a break; is needed there too.

--
Chuck Lever




2016-03-22 21:55:42

by Trond Myklebust

[permalink] [raw]
Subject: Re: [PATCH] nfs: add nfs IPv6 rdma6 mount option support

On Tue, Mar 22, 2016 at 5:52 PM, Chuck Lever <[email protected]> wrote:
>
>> On Mar 22, 2016, at 5:46 PM, Trond Myklebust <[email protected]> wrote:
>>
>> On Tue, Mar 22, 2016 at 5:24 PM, Chuck Lever <[email protected]> wrote:
>>>
>>>> On Mar 22, 2016, at 3:38 PM, Anna Schumaker <[email protected]> wrote:
>>>>
>>>> Hi Shirley,
>>>>
>>>> Sorry for the delay in looking at this patch. Comments are below:
>>>>
>>>> On 03/16/2016 02:30 PM, Shirley Ma wrote:
>>>>> Add rdma6 option to support NFS/RDMA IPv6.
>>>>>
>>>>> Signed-off-by: Shirley Ma <[email protected]>
>>>>
>>>> Can you add a little more to the patch description to describe when RDMA with IPv6 would be used?
>>>>
>>>>> ---
>>>>>
>>>>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>>>>> index f126828..62a55d0 100644
>>>>> --- a/fs/nfs/super.c
>>>>> +++ b/fs/nfs/super.c
>>>>> @@ -191,6 +191,7 @@ static const match_table_t nfs_mount_option_tokens = {
>>>>>
>>>>> enum {
>>>>> Opt_xprt_udp, Opt_xprt_udp6, Opt_xprt_tcp, Opt_xprt_tcp6, Opt_xprt_rdma,
>>>>> + Opt_xprt_rdma6,
>>>>>
>>>>> Opt_xprt_err
>>>>> };
>>>>> @@ -201,6 +202,7 @@ static const match_table_t nfs_xprt_protocol_tokens = {
>>>>> { Opt_xprt_tcp, "tcp" },
>>>>> { Opt_xprt_tcp6, "tcp6" },
>>>>> { Opt_xprt_rdma, "rdma" },
>>>>> + { Opt_xprt_rdma6, "rdma6" },
>>>>>
>>>>> { Opt_xprt_err, NULL }
>>>>> };
>>>>> @@ -1456,6 +1458,8 @@ static int nfs_parse_mount_options(char *raw,
>>>>> mnt->flags |= NFS_MOUNT_TCP;
>>>>> mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;
>>>>> break;
>>>>> + case Opt_xprt_rdma6:
>>>>> + protofamily = AF_INET6;
>>>>> case Opt_xprt_rdma:
>>>>> /* vector side protocols to TCP */
>>>>> mnt->flags |= NFS_MOUNT_TCP;
>>>>> @@ -1490,6 +1494,8 @@ static int nfs_parse_mount_options(char *raw,
>>>>> case Opt_xprt_tcp:
>>>>> mnt->mount_server.protocol = XPRT_TRANSPORT_TCP;
>>>>> break;
>>>>> + case Opt_xprt_rdma6:
>>>>> + mountfamily = AF_INET6;
>>>>> case Opt_xprt_rdma: /* not used for side protocols */
>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>> Do we need to be setting mountfamily here? The comment next to Opt_xprt_rdma makes it sound like this code doesn't apply to RDMA.
>>>
>>> I wondered this too.
>>>
>>> But what's going on is that for NFSv3 on RDMA, when IPv6 is
>>> used for the main protocol, IPv6 needs to be used for the
>>> mount protocol as well, even though it is going over TCP.
>>
>> It causes nfs_mount_parse_options to immediately stop further parsing
>> and return '0' == error encountered. The mount is supposed to fail in
>> that case.
>
> Ah, a break; is needed there too.
>

I'm saying that makes no sense to allow "rdma6" here in the first
place, since we've already banned the use of "rdma" through that same
mechanism.

2016-03-22 22:02:11

by Chuck Lever

[permalink] [raw]
Subject: Re: [PATCH] nfs: add nfs IPv6 rdma6 mount option support


> On Mar 22, 2016, at 5:55 PM, Trond Myklebust <[email protected]> wrote:
>
> On Tue, Mar 22, 2016 at 5:52 PM, Chuck Lever <[email protected]> wrote:
>>
>>> On Mar 22, 2016, at 5:46 PM, Trond Myklebust <[email protected]> wrote:
>>>
>>> On Tue, Mar 22, 2016 at 5:24 PM, Chuck Lever <[email protected]> wrote:
>>>>
>>>>> On Mar 22, 2016, at 3:38 PM, Anna Schumaker <[email protected]> wrote:
>>>>>
>>>>> Hi Shirley,
>>>>>
>>>>> Sorry for the delay in looking at this patch. Comments are below:
>>>>>
>>>>> On 03/16/2016 02:30 PM, Shirley Ma wrote:
>>>>>> Add rdma6 option to support NFS/RDMA IPv6.
>>>>>>
>>>>>> Signed-off-by: Shirley Ma <[email protected]>
>>>>>
>>>>> Can you add a little more to the patch description to describe when RDMA with IPv6 would be used?
>>>>>
>>>>>> ---
>>>>>>
>>>>>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>>>>>> index f126828..62a55d0 100644
>>>>>> --- a/fs/nfs/super.c
>>>>>> +++ b/fs/nfs/super.c
>>>>>> @@ -191,6 +191,7 @@ static const match_table_t nfs_mount_option_tokens = {
>>>>>>
>>>>>> enum {
>>>>>> Opt_xprt_udp, Opt_xprt_udp6, Opt_xprt_tcp, Opt_xprt_tcp6, Opt_xprt_rdma,
>>>>>> + Opt_xprt_rdma6,
>>>>>>
>>>>>> Opt_xprt_err
>>>>>> };
>>>>>> @@ -201,6 +202,7 @@ static const match_table_t nfs_xprt_protocol_tokens = {
>>>>>> { Opt_xprt_tcp, "tcp" },
>>>>>> { Opt_xprt_tcp6, "tcp6" },
>>>>>> { Opt_xprt_rdma, "rdma" },
>>>>>> + { Opt_xprt_rdma6, "rdma6" },
>>>>>>
>>>>>> { Opt_xprt_err, NULL }
>>>>>> };
>>>>>> @@ -1456,6 +1458,8 @@ static int nfs_parse_mount_options(char *raw,
>>>>>> mnt->flags |= NFS_MOUNT_TCP;
>>>>>> mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;
>>>>>> break;
>>>>>> + case Opt_xprt_rdma6:
>>>>>> + protofamily = AF_INET6;
>>>>>> case Opt_xprt_rdma:
>>>>>> /* vector side protocols to TCP */
>>>>>> mnt->flags |= NFS_MOUNT_TCP;
>>>>>> @@ -1490,6 +1494,8 @@ static int nfs_parse_mount_options(char *raw,
>>>>>> case Opt_xprt_tcp:
>>>>>> mnt->mount_server.protocol = XPRT_TRANSPORT_TCP;
>>>>>> break;
>>>>>> + case Opt_xprt_rdma6:
>>>>>> + mountfamily = AF_INET6;
>>>>>> case Opt_xprt_rdma: /* not used for side protocols */
>>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>>> Do we need to be setting mountfamily here? The comment next to Opt_xprt_rdma makes it sound like this code doesn't apply to RDMA.
>>>>
>>>> I wondered this too.
>>>>
>>>> But what's going on is that for NFSv3 on RDMA, when IPv6 is
>>>> used for the main protocol, IPv6 needs to be used for the
>>>> mount protocol as well, even though it is going over TCP.
>>>
>>> It causes nfs_mount_parse_options to immediately stop further parsing
>>> and return '0' == error encountered. The mount is supposed to fail in
>>> that case.
>>
>> Ah, a break; is needed there too.
>>
>
> I'm saying that makes no sense to allow "rdma6" here in the first
> place, since we've already banned the use of "rdma" through that same
> mechanism.

I see, this is the parsing logic just for "mountproto=".

This hunk should be dropped, and maybe the
"case Opt_xprt_rdma:" can be removed, too.


--
Chuck Lever




2016-03-23 18:04:06

by Shirley Ma

[permalink] [raw]
Subject: Re: [PATCH] nfs: add nfs IPv6 rdma6 mount option support


On 03/22/2016 03:01 PM, Chuck Lever wrote:
>
>> On Mar 22, 2016, at 5:55 PM, Trond Myklebust <[email protected]> wrote:
>>
>> On Tue, Mar 22, 2016 at 5:52 PM, Chuck Lever <[email protected]> wrote:
>>>
>>>> On Mar 22, 2016, at 5:46 PM, Trond Myklebust <[email protected]> wrote:
>>>>
>>>> On Tue, Mar 22, 2016 at 5:24 PM, Chuck Lever <[email protected]> wrote:
>>>>>
>>>>>> On Mar 22, 2016, at 3:38 PM, Anna Schumaker <[email protected]> wrote:
>>>>>>
>>>>>> Hi Shirley,
>>>>>>
>>>>>> Sorry for the delay in looking at this patch. Comments are below:
>>>>>>
>>>>>> On 03/16/2016 02:30 PM, Shirley Ma wrote:
>>>>>>> Add rdma6 option to support NFS/RDMA IPv6.
>>>>>>>
>>>>>>> Signed-off-by: Shirley Ma <[email protected]>
>>>>>>
>>>>>> Can you add a little more to the patch description to describe when RDMA with IPv6 would be used?
>>>>>>
>>>>>>> ---
>>>>>>>
>>>>>>> diff --git a/fs/nfs/super.c b/fs/nfs/super.c
>>>>>>> index f126828..62a55d0 100644
>>>>>>> --- a/fs/nfs/super.c
>>>>>>> +++ b/fs/nfs/super.c
>>>>>>> @@ -191,6 +191,7 @@ static const match_table_t nfs_mount_option_tokens = {
>>>>>>>
>>>>>>> enum {
>>>>>>> Opt_xprt_udp, Opt_xprt_udp6, Opt_xprt_tcp, Opt_xprt_tcp6, Opt_xprt_rdma,
>>>>>>> + Opt_xprt_rdma6,
>>>>>>>
>>>>>>> Opt_xprt_err
>>>>>>> };
>>>>>>> @@ -201,6 +202,7 @@ static const match_table_t nfs_xprt_protocol_tokens = {
>>>>>>> { Opt_xprt_tcp, "tcp" },
>>>>>>> { Opt_xprt_tcp6, "tcp6" },
>>>>>>> { Opt_xprt_rdma, "rdma" },
>>>>>>> + { Opt_xprt_rdma6, "rdma6" },
>>>>>>>
>>>>>>> { Opt_xprt_err, NULL }
>>>>>>> };
>>>>>>> @@ -1456,6 +1458,8 @@ static int nfs_parse_mount_options(char *raw,
>>>>>>> mnt->flags |= NFS_MOUNT_TCP;
>>>>>>> mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;
>>>>>>> break;
>>>>>>> + case Opt_xprt_rdma6:
>>>>>>> + protofamily = AF_INET6;
>>>>>>> case Opt_xprt_rdma:
>>>>>>> /* vector side protocols to TCP */
>>>>>>> mnt->flags |= NFS_MOUNT_TCP;
>>>>>>> @@ -1490,6 +1494,8 @@ static int nfs_parse_mount_options(char *raw,
>>>>>>> case Opt_xprt_tcp:
>>>>>>> mnt->mount_server.protocol = XPRT_TRANSPORT_TCP;
>>>>>>> break;
>>>>>>> + case Opt_xprt_rdma6:
>>>>>>> + mountfamily = AF_INET6;
>>>>>>> case Opt_xprt_rdma: /* not used for side protocols */
>>>>>> ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
>>>>>> Do we need to be setting mountfamily here? The comment next to Opt_xprt_rdma makes it sound like this code doesn't apply to RDMA.
>>>>>
>>>>> I wondered this too.
>>>>>
>>>>> But what's going on is that for NFSv3 on RDMA, when IPv6 is
>>>>> used for the main protocol, IPv6 needs to be used for the
>>>>> mount protocol as well, even though it is going over TCP.
>>>>
>>>> It causes nfs_mount_parse_options to immediately stop further parsing
>>>> and return '0' == error encountered. The mount is supposed to fail in
>>>> that case.
>>>
>>> Ah, a break; is needed there too.
>>>
>>
>> I'm saying that makes no sense to allow "rdma6" here in the first
>> place, since we've already banned the use of "rdma" through that same
>> mechanism.
>
> I see, this is the parsing logic just for "mountproto=".
>
> This hunk should be dropped, and maybe the
> "case Opt_xprt_rdma:" can be removed, too.

Thanks for the review. I will drop mountfamily option case.

>
> --
> Chuck Lever
>
>
>

2016-04-04 18:15:37

by Shirley Ma

[permalink] [raw]
Subject: [PATCH V2] nfs: add mount proto=rdma6 option for NFS/RDMA IPv6 addressing

RFC 5666: The "rdma" netid is to be used when IPv4 addressing
is employed by the underlying transport, and "rdma6" for IPv6
addressing.
Add mount -o proto=rdma6 option to support NFS/RDMA IPv6 addressing.

Changes from v1:
- Integrated comments from Chuck Level, Anna Schumaker, Trodt Myklebust
- Add a little more to the patch description to describe NFS/RDMA
IPv6 usage
- Removed duplicated rdma6 define
- Removed Opt_xprt_rdma mountfamily since this doesn't support

Signed-off-by: Shirley Ma <[email protected]>
---

fs/nfs/super.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/fs/nfs/super.c b/fs/nfs/super.c
index f126828..c884155 100644
--- a/fs/nfs/super.c
+++ b/fs/nfs/super.c
@@ -191,6 +191,7 @@ static const match_table_t nfs_mount_option_tokens = {

enum {
Opt_xprt_udp, Opt_xprt_udp6, Opt_xprt_tcp, Opt_xprt_tcp6, Opt_xprt_rdma,
+ Opt_xprt_rdma6,

Opt_xprt_err
};
@@ -201,6 +202,7 @@ static const match_table_t nfs_xprt_protocol_tokens = {
{ Opt_xprt_tcp, "tcp" },
{ Opt_xprt_tcp6, "tcp6" },
{ Opt_xprt_rdma, "rdma" },
+ { Opt_xprt_rdma6, "rdma6" },

{ Opt_xprt_err, NULL }
};
@@ -1456,6 +1458,8 @@ static int nfs_parse_mount_options(char *raw,
mnt->flags |= NFS_MOUNT_TCP;
mnt->nfs_server.protocol = XPRT_TRANSPORT_TCP;
break;
+ case Opt_xprt_rdma6:
+ protofamily = AF_INET6;
case Opt_xprt_rdma:
/* vector side protocols to TCP */
mnt->flags |= NFS_MOUNT_TCP;

2016-04-04 19:50:50

by Leon Romanovsky

[permalink] [raw]
Subject: Re: [PATCH V2] nfs: add mount proto=rdma6 option for NFS/RDMA IPv6 addressing

On Mon, Apr 04, 2016 at 11:15:27AM -0700, Shirley Ma wrote:
> RFC 5666: The "rdma" netid is to be used when IPv4 addressing
> is employed by the underlying transport, and "rdma6" for IPv6
> addressing.
> Add mount -o proto=rdma6 option to support NFS/RDMA IPv6 addressing.
>
> Changes from v1:
> - Integrated comments from Chuck Level, Anna Schumaker, Trodt Myklebust
> - Add a little more to the patch description to describe NFS/RDMA
> IPv6 usage
> - Removed duplicated rdma6 define
> - Removed Opt_xprt_rdma mountfamily since this doesn't support
>
> Signed-off-by: Shirley Ma <[email protected]>

It will be great if you can update the Documentation too.

Thanks

2016-04-04 20:23:35

by Shirley Ma

[permalink] [raw]
Subject: Re: [PATCH V2] nfs: add mount proto=rdma6 option for NFS/RDMA IPv6 addressing


On 04/04/2016 12:50 PM, Leon Romanovsky wrote:
> On Mon, Apr 04, 2016 at 11:15:27AM -0700, Shirley Ma wrote:
>> RFC 5666: The "rdma" netid is to be used when IPv4 addressing
>> is employed by the underlying transport, and "rdma6" for IPv6
>> addressing.
>> Add mount -o proto=rdma6 option to support NFS/RDMA IPv6 addressing.
>>
>> Changes from v1:
>> - Integrated comments from Chuck Level, Anna Schumaker, Trodt Myklebust
>> - Add a little more to the patch description to describe NFS/RDMA
>> IPv6 usage
>> - Removed duplicated rdma6 define
>> - Removed Opt_xprt_rdma mountfamily since this doesn't support
>>
>> Signed-off-by: Shirley Ma <[email protected]>
>
> It will be great if you can update the Documentation too.

Sure, I will update documentation and man page.

> Thanks
>

2016-04-04 22:08:15

by Shirley Ma

[permalink] [raw]
Subject: [PATCH] Documentation nfs-rdma.txt: Update nfs-rdma kernel module name and add IPv6 addressing option rdma6

Update NFS/RDMA transport module name from client xprtrdma,
server svcrdma to rpcrdma which supports both server and client.
Add mount proto option rdma6 to use IPv6 addressing for NFS/RDMA.

Signed-off-by: Shirley Ma <[email protected]>
---

Documentation/filesystems/nfs/nfs-rdma.txt | 20 ++++++++++----------
1 file changed, 10 insertions(+), 10 deletions(-)

diff --git a/Documentation/filesystems/nfs/nfs-rdma.txt b/Documentation/filesystems/nfs/nfs-rdma.txt
index 1e65645..6101b57 100644
--- a/Documentation/filesystems/nfs/nfs-rdma.txt
+++ b/Documentation/filesystems/nfs/nfs-rdma.txt
@@ -238,12 +238,13 @@ NFS/RDMA Setup

- Start the NFS server

- If the NFS/RDMA server was built as a module (CONFIG_SUNRPC_XPRT_RDMA=m in
- kernel config), load the RDMA transport module:
+ If the NFS/RDMA was built as a module (CONFIG_SUNRPC_XPRT_RDMA=m in
+ kernel config), load the RDMA transport module which supports both client
+ and server:

- $ modprobe svcrdma
+ $ modprobe rpcrdma

- Regardless of how the server was built (module or built-in), start the
+ Regardless of how the rpcrdma was built (module or built-in), start the
server:

$ /etc/init.d/nfs start
@@ -258,15 +259,14 @@ NFS/RDMA Setup

- On the client system

- If the NFS/RDMA client was built as a module (CONFIG_SUNRPC_XPRT_RDMA=m in
- kernel config), load the RDMA client module:
+ Regardless of how rpcrdma was built (module or built-in), use this command
+ to mount the NFS/RDMA server through IPv4 addressing:

- $ modprobe xprtrdma.ko
+ $ mount -o rdma,port=20049 <IPoIB-server-name-or-IPv4-address>:/<export> /mnt

- Regardless of how the client was built (module or built-in), use this
- command to mount the NFS/RDMA server:
+ or through IPv6 addressing

- $ mount -o rdma,port=20049 <IPoIB-server-name-or-address>:/<export> /mnt
+ $ mount -o rdma6,port=20049 [<IPoIB-server-name-or-IPv6-address>]:/<export> /mnt

To verify that the mount is using RDMA, run "cat /proc/mounts" and check
the "proto" field for the given mount.