Re: [GIT PULL] Ceph updates for 4.7-rc1

From: Arnd Bergmann
Date: Mon Jun 13 2016 - 09:05:39 EST


On Friday, June 10, 2016 2:32:21 PM CEST Linus Torvalds wrote:
> On Fri, Jun 10, 2016 at 1:42 PM, Arnd Bergmann <arnd@xxxxxxxx> wrote:
> >
> > What I see is that this one exported symbol has a __crc of a different
> > type from all the others:
> >
> > $ nm net/ceph/mon_client.o | grep __crc
> > 48c2e16e A __crc_ceph_monc_get_version
> > 2360d633 A __crc_ceph_monc_get_version_async
> > 0c50a10a A __crc_ceph_monc_got_map
> > w __crc_ceph_monc_do_statfs
>
> A lower-case 'w' in a symbol list just means that it's a local weak
> symbol (with a upper-case 'A' meaning it's an absolute global).
>
> Afaik, that simply means that it never got resolved, and genksyms
> never generated that absolute value for it.
>
> As to _why_ that happens, that's more than I can guess. We've had
> problems with genksyms before, and it tends to be hard to debug.
>
> Is it 100% reliable for you? Because the most common problem has been
> issues with subtle build races, where just causing a re-build will fix
> it.
>
> Your config doesn't work for me, when I do
>
> cp ~/genksyms-config.txt .config
> make ARCH=i386 oldconfig
>
> I get something else than what you had. I tried with both current -git
> and the commit you pinpointed, so I don't know how you generated that
> config file..

I've tracked it down to the use of the 'typeof(((type *)0)->keyfld)'
expression in DEFINE_RB_LOOKUP() now, and sent a patch with subject
"ceph: fix symbol versioning for ceph_monc_do_statfs" that works
around it by rewriting that line in a way that genksyms understands.

Arnd