mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2024-12-26 11:19:32 +03:00
Fix libblkid support
libblkid support is dormant because the autotools check is broken and liblkid identifies ZFS vdevs as "zfs_member", not "zfs". We fix that with a few changes: First, we fix the libblkid autotools check to do a few things: 1. Make a 64MB file, which is the minimum size ZFS permits. 2. Make 4 fake uberblock entries to make libblkid's check succeed. 3. Return 0 upon success to make autotools use the success case. 4. Include stdlib.h to avoid implicit declration of free(). 5. Check for "zfs_member", not "zfs" 6. Make --with-blkid disable autotools check (avoids Gentoo sandbox violation) 7. Pass '-lblkid' correctly using LIBS not LDFLAGS. Second, we change the libblkid support to scan for "zfs_member", not "zfs". This makes --with-blkid work on Gentoo. Signed-off-by: Richard Yao <ryao@gentoo.org> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Issue #1751
This commit is contained in:
parent
65ee05acd7
commit
1db7b9be75
@ -22,26 +22,45 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBBLKID], [
|
|||||||
[with_blkid=check])
|
[with_blkid=check])
|
||||||
|
|
||||||
LIBBLKID=
|
LIBBLKID=
|
||||||
AS_IF([test "x$with_blkid" != xno],
|
AS_IF([test "x$with_blkid" = xyes],
|
||||||
|
[
|
||||||
|
AC_SUBST([LIBBLKID], ["-lblkid"])
|
||||||
|
AC_DEFINE([HAVE_LIBBLKID], 1,
|
||||||
|
[Define if you have libblkid])
|
||||||
|
])
|
||||||
|
|
||||||
|
AS_IF([test "x$with_blkid" = xcheck],
|
||||||
[
|
[
|
||||||
AC_CHECK_LIB([blkid], [blkid_get_cache],
|
AC_CHECK_LIB([blkid], [blkid_get_cache],
|
||||||
[
|
[
|
||||||
AC_MSG_CHECKING([for blkid zfs support])
|
AC_MSG_CHECKING([for blkid zfs support])
|
||||||
|
|
||||||
ZFS_DEV=`mktemp`
|
ZFS_DEV=`mktemp`
|
||||||
dd if=/dev/zero of=$ZFS_DEV bs=1024k count=8 \
|
truncate -s 64M $ZFS_DEV
|
||||||
|
echo -en "\x0c\xb1\xba\0\0\0\0\0" | \
|
||||||
|
dd of=$ZFS_DEV bs=1k count=8 \
|
||||||
|
seek=128 conv=notrunc &>/dev/null \
|
||||||
>/dev/null 2>/dev/null
|
>/dev/null 2>/dev/null
|
||||||
echo -en "\x0c\xb1\xba\0\0\0\0\0" | \
|
echo -en "\x0c\xb1\xba\0\0\0\0\0" | \
|
||||||
dd of=$ZFS_DEV bs=1k count=8 \
|
dd of=$ZFS_DEV bs=1k count=8 \
|
||||||
seek=132 conv=notrunc &>/dev/null \
|
seek=132 conv=notrunc &>/dev/null \
|
||||||
>/dev/null 2>/dev/null
|
>/dev/null 2>/dev/null
|
||||||
|
echo -en "\x0c\xb1\xba\0\0\0\0\0" | \
|
||||||
|
dd of=$ZFS_DEV bs=1k count=8 \
|
||||||
|
seek=136 conv=notrunc &>/dev/null \
|
||||||
|
>/dev/null 2>/dev/null
|
||||||
|
echo -en "\x0c\xb1\xba\0\0\0\0\0" | \
|
||||||
|
dd of=$ZFS_DEV bs=1k count=8 \
|
||||||
|
seek=140 conv=notrunc &>/dev/null \
|
||||||
|
>/dev/null 2>/dev/null
|
||||||
|
|
||||||
saved_LDFLAGS="$LDFLAGS"
|
saved_LIBS="$LIBS"
|
||||||
LDFLAGS="-lblkid"
|
LIBS="-lblkid"
|
||||||
|
|
||||||
AC_RUN_IFELSE([AC_LANG_PROGRAM(
|
AC_RUN_IFELSE([AC_LANG_PROGRAM(
|
||||||
[
|
[
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
#include <blkid/blkid.h>
|
#include <blkid/blkid.h>
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
@ -58,10 +77,10 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBBLKID], [
|
|||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (strcmp(value, "zfs")) {
|
if (strcmp(value, "zfs_member")) {
|
||||||
free(value);
|
free(value);
|
||||||
blkid_put_cache(cache);
|
blkid_put_cache(cache);
|
||||||
return 3;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
free(value);
|
free(value);
|
||||||
@ -82,7 +101,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBBLKID], [
|
|||||||
[--with-blkid given but unavailable])])
|
[--with-blkid given but unavailable])])
|
||||||
])
|
])
|
||||||
|
|
||||||
LDFLAGS="$saved_LDFLAGS"
|
LIBS="$saved_LIBS"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
AS_IF([test "x$with_blkid" != xcheck],
|
AS_IF([test "x$with_blkid" != xcheck],
|
||||||
|
@ -965,7 +965,7 @@ zpool_find_import_blkid(libzfs_handle_t *hdl, pool_list_t *pools)
|
|||||||
goto err_blkid2;
|
goto err_blkid2;
|
||||||
}
|
}
|
||||||
|
|
||||||
err = blkid_dev_set_search(iter, "TYPE", "zfs");
|
err = blkid_dev_set_search(iter, "TYPE", "zfs_member");
|
||||||
if (err != 0) {
|
if (err != 0) {
|
||||||
(void) zfs_error_fmt(hdl, EZFS_BADCACHE,
|
(void) zfs_error_fmt(hdl, EZFS_BADCACHE,
|
||||||
dgettext(TEXT_DOMAIN, "blkid_dev_set_search() %d"), err);
|
dgettext(TEXT_DOMAIN, "blkid_dev_set_search() %d"), err);
|
||||||
|
Loading…
Reference in New Issue
Block a user