Subject: Re: linux-next: nfs build failure

From: Trond Myklebust <[email-masked]>
Date: Wed, 18 Jun 2008 17:15:13 -0400

On Wed, 2008-06-18 at 16:37 -0400, Chuck Lever wrote:
> Trond Myklebust wrote:
> > On Wed, 2008-06-18 at 12:52 +1000, Stephen Rothwell wrote:
> >> Hi Trond,
> >>
> >> Today's linux-next build (powerpc ppc64_defconfig) failed like this:
> >>
> >> fs/built-in.o: In function `.nfs_parse_ip_address':
> >> super.c:(.text+0xe2f08): undefined reference to `.__ipv6_addr_type'
> >>
> >> Some CONFIG_IPV6 protections are needed ...
> >>
> >> I reverted commit 09491a874d4f9a8676567bc58bce9dec9539740d ("NFS: handle
> >> interface identifiers in incoming IPv6 addresses").
> > 
> > I suggest something like the attached patch. Comments Chuck?
> > 
> > Trond
> > 
> > 
> > 
> > 
> > ------------------------------------------------------------------------
> > 
> > Subject:
> > NFS: Don't allow IPv6 addresses if CONFIG_IPv6 isn't set
> > From:
> > Trond Myklebust <[email-masked]>
> > Date:
> > Wed, 18 Jun 2008 16:04:22 -0400
> > 
> > 
> > Fixes a compile failure in fs/nfs/super.c
> > 
> > Also fix the compiler warnings:
> >   fs/nfs/super.c:721: warning: field width should have type â€˜intâ€™, but
> >   		      argument 2 has type â€˜size_tâ€™
> 
> I just saw this warning yesterday, and was about to send a fix for it. 
> Sorry for the delay, but I had a power supply go south on me today.
> 
> >   fs/nfs/super.c:809:3: warning: returning void-valued expression
> >   fs/nfs/super.c:811:3: warning: returning void-valued expression
> 
> But I've never seen that one.  Very strange how the warnings vary 
> depending on what platform you compile to.
> 
> > Signed-off-by: Trond Myklebust <[email-masked]>
> > ---
> > 
> >  fs/nfs/super.c |   19 ++++++++++++++-----
> >  1 files changed, 14 insertions(+), 5 deletions(-)
> > 
> > diff --git a/fs/nfs/super.c b/fs/nfs/super.c
> > index e62820c..6a47bc3 100644
> > --- a/fs/nfs/super.c
> > +++ b/fs/nfs/super.c
> > @@ -718,10 +718,10 @@ static void nfs_parse_ipv4_address(char *string, size_t str_len,
> >  	struct sockaddr_in *sin = (struct sockaddr_in *)sap;
> >  	u8 *addr = (u8 *)&sin->sin_addr.s_addr;
> >  
> > -	dfprintk(MOUNT, "NFS: parsing IPv4 address %*s\n",
> > -			str_len, string);
> > -
> >  	if (str_len <= INET_ADDRSTRLEN) {
> > +		dfprintk(MOUNT, "NFS: parsing IPv4 address %*s\n",
> > +				(int)str_len, string);
> > +
> 
> You need the same fix in nfs_parse_ipv6_address().

There is no such printk in nfs_parse_ipv6_address().

> >  		sin->sin_family = AF_INET;
> >  		*addr_len = sizeof(*sin);
> >  		if (in4_pton(string, str_len, addr, '\0', NULL))
> > @@ -732,6 +732,7 @@ static void nfs_parse_ipv4_address(char *string, size_t str_len,
> >  	*addr_len = 0;
> >  }
> >  
> > +#ifdef CONFIG_IPV6
> >  static void nfs_parse_ipv6_scope_id(const char *string, const size_t str_len,
> >  				    const char *delim,
> >  				    struct sockaddr_in6 *sin6)
> > @@ -787,6 +788,14 @@ static void nfs_parse_ipv6_address(char *string, size_t str_len,
> >  	sap->sa_family = AF_UNSPEC;
> >  	*addr_len = 0;
> >  }
> > +#else
> > +static void nfs_parse_ipv6_address(char *string, size_t str_len,
> > +				   struct sockaddr *sap, size_t *addr_len)
> > +{
> > +	sap->sa_family = AF_UNSPEC;
> > +	*addr_len = 0;
> > +}
> > +#endif
> 
> Instead of creating a separate function, you could just wrap everything 
> in nfs_parse_ipv6_address() but these two lines with #ifdef CONFIG_IPV6 
> / #endif.

Getting rid of those #ifdef eyesores inside function definitions is
worth the extra few lines.

Trond

--
To unsubscribe from this list: send the line "unsubscribe linux-next" in
the body of a message to [email-masked]
More majordomo info at  http://vger.kernel.org/majordomo-info.html