Re: Error compiling isboot-kmod

From: Ian Lepore <ian_at_freebsd.org>
Date: Mon, 29 Jan 2018 10:54:40 -0700
On Mon, 2018-01-29 at 10:29 -0700, John Nielsen wrote:
> > 
> > On Jan 27, 2018, at 9:20 AM, Ian Lepore <ian_at_FreeBSD.org> wrote:
> > 
> > On Fri, 2018-01-26 at 23:20 -0700, John Nielsen wrote:
> > > 
> > > > 
> > > > 
> > > > On Jan 26, 2018, at 9:42 PM, John Nielsen <lists_at_jnielsen.net>
> > > > wrote:
> > > > 
> > > > > 
> > > > > 
> > > > > [...]
> > > > --- iscsi.o ---
> > > > iscsi.c:1146:3: error: incompatible pointer types passing 'void
> > > > (struct mbuf *, void *, void *)' to parameter of type
> > > > 'm_ext_free_t *' (aka 'void (*)(struct mbuf *)') [-Werror,-
> > > > Wincompatible-pointer-types]
> > > >                MEXTADD(md, (caddr_t)ds_dd, (ISCSI_ALIGN(pp-
> > > > >ds_len)
> > > >                ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> > > > ~~~~
> > > > /usr/src/sys/sys/mbuf.h:887:42: note: expanded from macro
> > > > 'MEXTADD'
> > > >    m_extadd((m), (char *)(buf), (size), (free), (arg1),
> > > > (arg2),        \
> > > >                                         ^~~~~~
> > > > /usr/src/sys/sys/mbuf.h:634:59: note: passing argument to
> > > > parameter here
> > > > void             m_extadd(struct mbuf *, char *, u_int,
> > > > m_ext_free_t,
> > > Looks like iscsi.c needs to be fixed up following r324446
> > > (https://svnweb.freebsd.org/changeset/base/324446). Starting to
> > > be
> > > out of my depth unless there's a mechanical way to make the
> > > changes?
> > I'm not set up to test-compile this against -current right now, so
> > I'm
> > not sure if this is all that remains or just another breadcrumb on
> > the
> > trail, but... try the attached patch.
> > 
> > -- Ian
> > --- iscsi.c.orig	2018-01-27 08:43:26.937858000 -0700
> > +++ iscsi.c	2018-01-27 09:15:39.631501000 -0700
> > _at__at_ -1071,17 +1071,23 _at__at_
> > }
> > 
> > 
> > -#if __FreeBSD_version >= 1100000
> > +#if __FreeBSD_version >= 1200051
> > +static void
> > +isboot_free_mbufext(struct mbuf *m)
> > +{
> > +	void *p = m->m_ext.ext_arg1;
> > +#elif __FreeBSD_version >= 1100000
> > static void
> > isboot_free_mbufext(struct mbuf *m, void *p, void *optarg)
> > #elif __FreeBSD_version >= 1000050 && __FreeBSD_version < 1100000
> > static int
> > isboot_free_mbufext(struct mbuf *m, void *p, void *optarg)
> > +{
> > #else
> > static void
> > isboot_free_mbufext(void *p, void *optarg)
> > -#endif
> > {
> > +#endif
> Thanks Ian. I think I ran in to a copy/paste issue on my end with the
> above but I can compile with this similar patch. Is it functionally
> equivalent to yours?
> 
> --- iscsi.c.orig	2015-11-05 09:50:51.000000000 -0700
> +++ iscsi.c	2018-01-29 10:20:00.586277000 -0700
> _at__at_ -1070,9 +1070,11 _at__at_
>  	return (n);
>  }
>  
> -
> -#if __FreeBSD_version >= 1100000
> +#if __FreeBSD_version >= 1200051
>  static void
> +isboot_free_mbufext(struct mbuf *m)
> +#elif __FreeBSD_version >= 1100000
> +static void
>  isboot_free_mbufext(struct mbuf *m, void *p, void *optarg)
>  #elif __FreeBSD_version >= 1000050 && __FreeBSD_version < 1100000
>  static int
> _at__at_ -1082,7 +1084,9 _at__at_
>  isboot_free_mbufext(void *p, void *optarg)
>  #endif
>  {
> -
> +#if __FreeBSD_version >= 1200051
> +	void *p = m->m_ext.ext_arg1;
> +#endif
>  	ISBOOT_TRACE("isboot_free_mbufext\n");
>  	if (p == NULL)
>  #if __FreeBSD_version >= 1000050 && __FreeBSD_version < 1100000

Yeah, that looks the same.  But someone else reported that once you get
it to compile, it crashes at runtime, not necessarily in a way that
involves this part of the code.  I probably can't help much with that,
I don't know anything about iscsi, and don't have a setup for testing.

-- Ian
Received on Mon Jan 29 2018 - 16:54:49 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:41:14 UTC