nfs/flexfiles: Use the layout segment for reading unless it a IOMODE_RW and reading...
[linux-2.6-block.git] / fs / nfs / super.c
index f1268280244e4504c175db1844a306eefb1f0d00..2137e0202f2560d39dc383a01ecf33fcfcf4958d 100644 (file)
@@ -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;
@@ -2408,6 +2412,11 @@ static int nfs_compare_super_address(struct nfs_server *server1,
                                     struct nfs_server *server2)
 {
        struct sockaddr *sap1, *sap2;
+       struct rpc_xprt *xprt1 = server1->client->cl_xprt;
+       struct rpc_xprt *xprt2 = server2->client->cl_xprt;
+
+       if (!net_eq(xprt1->xprt_net, xprt2->xprt_net))
+               return 0;
 
        sap1 = (struct sockaddr *)&server1->nfs_client->cl_addr;
        sap2 = (struct sockaddr *)&server2->nfs_client->cl_addr;