Commit c9895cb6 authored by Weston Andros Adamson's avatar Weston Andros Adamson Committed by Trond Myklebust

NFS: pnfs IPv6 support

Handle ipv6 remote addresses from GETDEVICEINFO

 - supports netid "tcp" for ipv4 and "tcp6" for ipv6 as rfc 5665 specifies
 - added ds_remotestr to avoid having to handle different AFs in every dprintk
 - tested against pynfs 4.1 server, submitting ipv6 support patch to pynfs
 - tested with IPv6 disabled, it compiles cleanly and relies on rpc_pton to
   refuse to accept IPv6 addresses
Signed-off-by: default avatarWeston Andros Adamson <dros@netapp.com>
Signed-off-by: default avatarTrond Myklebust <Trond.Myklebust@netapp.com>
parent 82c2c8b8
...@@ -344,8 +344,7 @@ filelayout_read_pagelist(struct nfs_read_data *data) ...@@ -344,8 +344,7 @@ filelayout_read_pagelist(struct nfs_read_data *data)
set_bit(lo_fail_bit(IOMODE_READ), &lseg->pls_layout->plh_flags); set_bit(lo_fail_bit(IOMODE_READ), &lseg->pls_layout->plh_flags);
return PNFS_NOT_ATTEMPTED; return PNFS_NOT_ATTEMPTED;
} }
dprintk("%s USE DS:ip %x %hu\n", __func__, dprintk("%s USE DS: %s\n", __func__, ds->ds_remotestr);
ntohl(ds->ds_ip_addr), ntohs(ds->ds_port));
/* No multipath support. Use first DS */ /* No multipath support. Use first DS */
data->ds_clp = ds->ds_clp; data->ds_clp = ds->ds_clp;
...@@ -384,9 +383,9 @@ filelayout_write_pagelist(struct nfs_write_data *data, int sync) ...@@ -384,9 +383,9 @@ filelayout_write_pagelist(struct nfs_write_data *data, int sync)
set_bit(lo_fail_bit(IOMODE_READ), &lseg->pls_layout->plh_flags); set_bit(lo_fail_bit(IOMODE_READ), &lseg->pls_layout->plh_flags);
return PNFS_NOT_ATTEMPTED; return PNFS_NOT_ATTEMPTED;
} }
dprintk("%s ino %lu sync %d req %Zu@%llu DS:%x:%hu\n", __func__, dprintk("%s ino %lu sync %d req %Zu@%llu DS: %s\n", __func__,
data->inode->i_ino, sync, (size_t) data->args.count, offset, data->inode->i_ino, sync, (size_t) data->args.count, offset,
ntohl(ds->ds_ip_addr), ntohs(ds->ds_port)); ds->ds_remotestr);
data->write_done_cb = filelayout_write_done_cb; data->write_done_cb = filelayout_write_done_cb;
data->ds_clp = ds->ds_clp; data->ds_clp = ds->ds_clp;
......
...@@ -49,8 +49,9 @@ enum stripetype4 { ...@@ -49,8 +49,9 @@ enum stripetype4 {
/* Individual ip address */ /* Individual ip address */
struct nfs4_pnfs_ds { struct nfs4_pnfs_ds {
struct list_head ds_node; /* nfs4_pnfs_dev_hlist dev_dslist */ struct list_head ds_node; /* nfs4_pnfs_dev_hlist dev_dslist */
u32 ds_ip_addr; struct sockaddr_storage ds_addr;
u32 ds_port; size_t ds_addrlen;
char *ds_remotestr; /* human readable addr+port */
struct nfs_client *ds_clp; struct nfs_client *ds_clp;
atomic_t ds_count; atomic_t ds_count;
}; };
......
This diff is collapsed.
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment