opensvc / multipath-tools

Other
60 stars 48 forks source link

Build fails with `devmapper.c:387:97: error: unused parameter ‘deferred_remove’ [-Werror=unused-parameter]` #7

Closed paulmenzel closed 3 years ago

paulmenzel commented 3 years ago

Build version 0.8.6 fails with the error below:

$ make
[…]
cc --std=gnu99  -O2 -g -fstack-protector-strong --param=ssp-buffer-size=4 -Werror -Wall -Wextra -Wformat=2 -Werror=implicit-int -Werror=implicit-function-declaration -Werror=format-security -Wno-clobbered -Wno-error=clobbered -Werror=cast-qual -Werror=discarded-qualifiers -pipe -DBIN_DIR=\"/sbin\" -DLIB_STRING=\"lib64\" -DRUN_DIR=\"run\" -MMD -MP -fPIC -I../libmpathcmd -I../libmpathpersist -I../libmultipath/nvme -DUSE_SYSTEMD=242 -DLIBDM_API_FLUSH -D_GNU_SOURCE -DLIBDM_API_COOKIE -DLIBUDEV_API_RECVBUF -Wp,-D_FORTIFY_SOURCE=2  -c -o devmapper.o devmapper.c
devmapper.c: In function ‘dm_simplecmd’:
devmapper.c:387:97: error: unused parameter ‘deferred_remove’ [-Werror=unused-parameter]
  387 | dm_simplecmd (int task, const char *name, int no_flush, int need_sync, uint16_t udev_flags, int deferred_remove) {
      |                                                                                             ~~~~^~~~~~~~~~~~~~~
devmapper.c: In function ‘dm_flush_map_nopaths’:
devmapper.c:1125:48: error: unused parameter ‘deferred_remove’ [-Werror=unused-parameter]
 1125 | dm_flush_map_nopaths(const char * mapname, int deferred_remove)
      |                                            ~~~~^~~~~~~~~~~~~~~
devmapper.c: In function ‘dm_cancel_deferred_remove’:
devmapper.c:1576:46: error: unused parameter ‘mpp’ [-Werror=unused-parameter]
 1576 | dm_cancel_deferred_remove (struct multipath *mpp)
      |                            ~~~~~~~~~~~~~~~~~~^~~
mwilck commented 3 years ago

Interesting ... what distro / compiler are you using?

paulmenzel commented 3 years ago

We have our own distribution based loosely on Linux From Scratch (MarIuX64).

I tested GCC 7.5 and 10.1.

mwilck commented 3 years ago

asking because we are testing quite a few compilers in our github worklflows. Still not covering everything, obviously.

mwilck commented 3 years ago

OK - it's because you don't have LIBDM_API_DEFERRED set. You seem to be using a very old version of libdevmapper.

paulmenzel commented 3 years ago

Indeed, /usr/include/libdevmapper.h is from lvm2-2.02.100-0.x86_64.

mwilck commented 3 years ago

I'll create a patch to avoid this error. Be advised though that multipath testing has almost exclusively been done with newer versions of libdevmapper for several years. Maybe it's time to update :-)

paulmenzel commented 3 years ago

Thank you for your analysis and help.

Indeed, updating is a good idea. I only need kpartx and will run it manually.

mwilck commented 3 years ago

The easiest workaround in cases like this is to just using somewhat less strict warning flags. You could simply add -Wno-unused in the WARNFLAGS (Makefile.inc), for example. If you examine the warnings, you'll see that they are non-fatal, so loosening the flags a bit is justified for that specific use case. We are trying to use strict warn flags to catch errors, but making that work for any distro (or like in your case, with any old library version) is almost impossible, and thus we focus on more modern distros. Our CI goes back to Debian "Jessie", but we can't cover everything.

mwilck commented 3 years ago

Please test with 20c2697 (mwilck/tip).

paulmenzel commented 3 years ago

Perfect. Tested successfully.

(In the commit message, you might want to prefix the issue URL with Resolves:. (But maybe you waited for my test.))

Thank you very much.

mwilck commented 3 years ago

Commit msg updated.

mwilck commented 3 years ago

I took the liberty to also add a Tested-by: Paul Menzel tag.

paulmenzel commented 3 years ago

Yes, thank you. I received your patch message.

xosevp commented 3 years ago

Indeed, /usr/include/libdevmapper.h is from _lvm2-2.02.100-0.x8664.

It's nearly 8 years old !!!

You are going to find a lot of bugs fun.

mwilck commented 3 years ago

Well, at least code wise, we still support these old versions. We just haven't tested current multipath-tools on them for a long time. Also, there are enterprise distros released in 2014 which still have some years of support left. So, I'm generally glad about bug reports like this.