[PATCH] Added --without-devmapper configuration option to eliminate the dependency in the kernel build to help keep overall size small for implementations that have limited space.
Samuel Mendoza-Jonas
sam at mendozajonas.com
Mon Oct 17 13:18:38 AEDT 2016
On Wed, 2016-10-12 at 14:08 -0500, Daniel C. Birkestrand wrote:
> From: dbirk <dbirk at us.ibm.com>
Hi Daniel, thanks for having a look at this!
A few notes below, but firstly the patch will need your signed-off-by line for
me to accept it. Ideally your "name <email>" should include your full name as
well, eg "Daniel C. Birkestrand <dbirk at us.ibm.com>".
Also could you please split up the title of this patch into a small subject and
a comment if needed? The current line is well above 80 chars and messes up the
formatting a bit.
>
> ---
> configure.ac | 15 +++++++++++++++
> discover/Makefile.am | 11 ++++++++++-
> discover/device-handler.c | 7 +++++++
> discover/udev.c | 2 ++
> 4 files changed, 34 insertions(+), 1 deletion(-)
>
> diff --git a/configure.ac b/configure.ac
> index 41560d1..a08a5cb 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -171,6 +171,21 @@ AS_IF(
> )
>
> AC_ARG_WITH(
> + [devmapper],
> + [AS_HELP_STRING([--without-devmapper],
> + [do not use devmapper, useful for reducing kernel dependencies [default=no]]
> + )],
> + [without_devmapper=yes],
> + [without_devmapper=no]
> +)
It would be a good idea to combine this with the existing check for
libdevmapper further above and only perform the check if --without-devmapper
has not been set.
> +
> +AM_CONDITIONAL([HAVE_DEVMAPPER], [test "x$without_devmapper" != "xyes"])
> +
> +AS_IF([test "x$without_devmapper" = "xyes"],
> + [AC_SUBST([DEFAULT_CPPFLAGS], ["-DDEVMAPPER"])]
> +)
This should define DEVMAPPER but below..
> +
> +AC_ARG_WITH(
> [signed-boot],
> [AS_HELP_STRING([--with-signed-boot],
> [build kernel signature checking support [default=no]]
> diff --git a/discover/Makefile.am b/discover/Makefile.am
> index 4a6cbd0..0a4ef01 100644
> --- a/discover/Makefile.am
> +++ b/discover/Makefile.am
> @@ -24,7 +24,6 @@ discover_pb_discover_SOURCES = \
> discover/device-handler.h \
> discover/discover-server.c \
> discover/discover-server.h \
> - discover/devmapper.c \
> discover/devmapper.h \
> discover/event.c \
> discover/event.h \
> @@ -54,6 +53,11 @@ discover_pb_discover_SOURCES = \
> discover/yaboot-parser.c \
> discover/pxe-parser.c
>
> +if HAVE_DEVMAPPER
> +discover_pb_discover_SOURCES += \
> + discover/devmapper.c
> +endif
> +
> discover_pb_discover_LDADD = \
> discover/grub2/grub2-parser.ro \
> discover/platform.ro \
> @@ -65,6 +69,11 @@ discover_pb_discover_LDFLAGS = \
> $(AM_LDFLAGS) \
> $(DEVMAPPER_LIBS)
>
> +if HAVE_DEVMAPPER
> +discover_pb_discover_LDFLAGS += \
> + -ldevmapper
> +endif
> +
> discover_pb_discover_CPPFLAGS = \
> $(AM_CPPFLAGS) \
> -DLOCAL_STATE_DIR='"$(localstatedir)"' \
> diff --git a/discover/device-handler.c b/discover/device-handler.c
> index 346cb02..9f4f6da 100644
> --- a/discover/device-handler.c
> +++ b/discover/device-handler.c
> @@ -1469,7 +1469,9 @@ static int mount_device(struct discover_device *dev)
> device_path, strerror(errno));
>
> /* If mount fails clean up any snapshot */
> +#if defined(DEVMAPPER)
> devmapper_destroy_snapshot(dev);
> +#endif
..I don't see it defined in these checks in my testing, whether or not
--without-devmapper is specified. You may need to check what is going on with
the configure logic.
These #if defined checks otherwise work but I'd prefer to consolidate them in
one place is possible. For example you could move the #if to devmapper.h and
turn these devmapper_ functions into noops in the negative case.
Cheers,
Sam
>
> pb_rmdir_recursive(mount_base(), dev->mount_path);
> err_free:
> @@ -1494,7 +1496,10 @@ static int umount_device(struct discover_device *dev)
> return -1;
>
> dev->mounted = false;
> +
> +#if defined(DEVMAPPER)
> devmapper_destroy_snapshot(dev);
> +#endif
>
> pb_rmdir_recursive(mount_base(), dev->mount_path);
>
> @@ -1576,7 +1581,9 @@ void device_release_write(struct discover_device *dev, bool release)
> dev->mounted_rw = dev->mounted = false;
>
> if (dev->ramdisk) {
> +#if defined(DEVMAPPER)
> devmapper_merge_snapshot(dev);
> +#endif
> /* device_path becomes stale after merge */
> device_path = get_device_path(dev);
> }
> diff --git a/discover/udev.c b/discover/udev.c
> index f4cefab..8f847d6 100644
> --- a/discover/udev.c
> +++ b/discover/udev.c
> @@ -176,10 +176,12 @@ static int udev_handle_block_add(struct pb_udev *udev, struct udev_device *dev,
>
> udev_setup_device_params(dev, ddev);
>
> +#if defined(DEVMAPPER)
> /* Create a snapshot for all disk devices */
> if ((ddev->device->type == DEVICE_TYPE_DISK ||
> ddev->device->type == DEVICE_TYPE_USB))
> devmapper_init_snapshot(udev->handler, ddev);
> +#endif
>
> device_handler_discover(udev->handler, ddev);
>
More information about the Petitboot
mailing list