On Apr 20, 2012, at 3:21 PM, Weston Andros Adamson wrote: > nfs4_path() was parsing the path component by splitting on the first colon. > This is wrong when an IPv6 address is used to mount a server. > > For example, having mounted 'fc00::10:/export', nfs4_path() returned > ':10:/export'. This causes referrals (using IPv4 or IPv6 addresses) to fail > in nfs4_validate_fspath(). > > Parsing the path component by using the *last* colon works with > IPv6 as well as IPv4 addrs. These ad hoc fixes give me the willies. During a referral, how is the server name and export path getting recombined? In fs_locations data, these are separate. In the forward mount path, IPv6 addresses are escaped via square brackets. (Having not looked at this code in years), is there some way we can keep the server name and path separate here so we don't have to reparse? > Signed-off-by: Weston Andros Adamson <dros@xxxxxxxxxx> > --- > fs/nfs/nfs4namespace.c | 2 +- > 1 files changed, 1 insertions(+), 1 deletions(-) > > diff --git a/fs/nfs/nfs4namespace.c b/fs/nfs/nfs4namespace.c > index 9c8eca3..dd3dd30 100644 > --- a/fs/nfs/nfs4namespace.c > +++ b/fs/nfs/nfs4namespace.c > @@ -59,7 +59,7 @@ static char *nfs4_path(struct dentry *dentry, char *buffer, ssize_t buflen) > char *limit; > char *path = nfs_path(&limit, dentry, buffer, buflen); > if (!IS_ERR(path)) { > - char *colon = strchr(path, ':'); > + char *colon = strrchr(path, ':'); > if (colon && colon < limit) > path = colon + 1; > } > -- > 1.7.4.4 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-nfs" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Chuck Lever chuck[dot]lever[at]oracle[dot]com -- To unsubscribe from this list: send the line "unsubscribe linux-nfs" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html