Skip to content

Commit

Permalink
deploy/libmount: Fix build with old util-linux 2.23 (CentOS7)
Browse files Browse the repository at this point in the history
#705 broke the build
on CentOS 7 which only has util-linux 2.23.

When I was thinking about this, I realized that there must really be a way to
make this safe even for older versions. Looking at that version of util-linux,
all we need to do is invert the order of frees so we `mnt_free_table()` *before*
`mnt_free_cache()`, like util-linux does:

https://github.com/karelzak/util-linux/blob/stable/v2.23/sys-utils/eject.c#L1131

We still use the `_unref()` versions if available.  I also fixed
the ordering there too for double plus redundant safety.

Closes: #712
Approved by: jlebon
  • Loading branch information
cgwalters authored and rh-atomic-bot committed Feb 24, 2017
1 parent 877a27d commit cee57a0
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 1 deletion.
4 changes: 4 additions & 0 deletions configure.ac
Expand Up @@ -299,6 +299,10 @@ AS_IF([ test x$with_libmount != xno ], [
AC_DEFINE([HAVE_LIBMOUNT], 1, [Define if we have libmount.pc])
PKG_CHECK_MODULES(OT_DEP_LIBMOUNT, $LIBMOUNT_DEPENDENCY)
with_libmount=yes
save_LIBS=$LIBS
LIBS=$OT_DEP_LIBMOUNT_LIBS
AC_CHECK_FUNCS(mnt_unref_cache)
LIBS=$save_LIBS
], [
with_libmount=no
])
Expand Down
7 changes: 6 additions & 1 deletion src/libostree/ostree-sysroot-deploy.c
Expand Up @@ -1692,8 +1692,13 @@ is_ro_mount (const char *path)

fs = mnt_table_find_target(tb, path, MNT_ITER_BACKWARD);
is_mount = fs && mnt_fs_get_target (fs);
mnt_unref_cache (cache);
#ifdef HAVE_MNT_UNREF_CACHE
mnt_unref_table (tb);
mnt_unref_cache (cache);
#else
mnt_free_table (tb);
mnt_free_cache (cache);
#endif

if (!is_mount)
return FALSE;
Expand Down

0 comments on commit cee57a0

Please sign in to comment.