diff options
author | Richard Yao <[email protected]> | 2013-08-28 16:17:47 -0400 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2013-10-10 16:56:51 -0700 |
commit | 1db7b9be75a225cedb3b7a60028ca5695e5b8346 (patch) | |
tree | be7f7d6429d47ecd9afacb845b103e2c0f523252 | |
parent | 65ee05acd773beafd03bfedf96a092dd08cb2739 (diff) |
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 <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Issue #1751
-rw-r--r-- | config/user-libblkid.m4 | 33 | ||||
-rw-r--r-- | lib/libzfs/libzfs_import.c | 2 |
2 files changed, 27 insertions, 8 deletions
diff --git a/config/user-libblkid.m4 b/config/user-libblkid.m4 index 276587fd3..2dd26238c 100644 --- a/config/user-libblkid.m4 +++ b/config/user-libblkid.m4 @@ -22,26 +22,45 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBBLKID], [ [with_blkid=check]) 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_MSG_CHECKING([for blkid zfs support]) 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 echo -en "\x0c\xb1\xba\0\0\0\0\0" | \ dd of=$ZFS_DEV bs=1k count=8 \ seek=132 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=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" - LDFLAGS="-lblkid" + saved_LIBS="$LIBS" + LIBS="-lblkid" AC_RUN_IFELSE([AC_LANG_PROGRAM( [ #include <stdio.h> + #include <stdlib.h> #include <blkid/blkid.h> ], [ @@ -58,10 +77,10 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBBLKID], [ return 2; } - if (strcmp(value, "zfs")) { + if (strcmp(value, "zfs_member")) { free(value); blkid_put_cache(cache); - return 3; + return 0; } free(value); @@ -82,7 +101,7 @@ AC_DEFUN([ZFS_AC_CONFIG_USER_LIBBLKID], [ [--with-blkid given but unavailable])]) ]) - LDFLAGS="$saved_LDFLAGS" + LIBS="$saved_LIBS" ], [ AS_IF([test "x$with_blkid" != xcheck], diff --git a/lib/libzfs/libzfs_import.c b/lib/libzfs/libzfs_import.c index 53609f2cb..d1fa98e67 100644 --- a/lib/libzfs/libzfs_import.c +++ b/lib/libzfs/libzfs_import.c @@ -965,7 +965,7 @@ zpool_find_import_blkid(libzfs_handle_t *hdl, pool_list_t *pools) goto err_blkid2; } - err = blkid_dev_set_search(iter, "TYPE", "zfs"); + err = blkid_dev_set_search(iter, "TYPE", "zfs_member"); if (err != 0) { (void) zfs_error_fmt(hdl, EZFS_BADCACHE, dgettext(TEXT_DOMAIN, "blkid_dev_set_search() %d"), err); |