summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDarik Horn <[email protected]>2011-04-14 14:01:22 -0500
committerBrian Behlendorf <[email protected]>2011-04-21 09:41:09 -0700
commitad35b6a6e99a0e0962d6a33e181784cada44c3c0 (patch)
treed50e4fc460fc38cf2bdc163b864defbd1fb0d82a
parentfa6f7d8f9d4760975ea5fe116a7366604f286195 (diff)
Remove the gawk dependency.
This reverts commit 1814251453c8140f50170ad29d9105c1273d7e08. Demote the gawk call back to awk and ensure that stderr is attached. GNU gawk tolerates a missing stderr handle, but many utilities do not, which could be why a regular awk call was unexplainably failing on some systems. Use argv[0] instead of sh_path for consistency internally and with other Linux drivers. Signed-off-by: Brian Behlendorf <[email protected]>
-rw-r--r--config/spl-build.m417
-rwxr-xr-xconfigure34
-rw-r--r--module/spl/spl-generic.c26
3 files changed, 18 insertions, 59 deletions
diff --git a/config/spl-build.m4 b/config/spl-build.m4
index 97b38234b..b25db38f3 100644
--- a/config/spl-build.m4
+++ b/config/spl-build.m4
@@ -212,24 +212,9 @@ AC_DEFUN([SPL_AC_KERNEL_CONFIG], [
])
dnl #
-dnl # Explicitly check for gawk, we require it for the the usermode
-dnl # helper. For some reason the standard awk command does not
-dnl # behave correctly when invoked from the usermode helper.
-dnl #
-AC_DEFUN([SPL_AC_GAWK], [
- AS_IF([test "x$AWK" != xgawk], [
- AC_MSG_ERROR([
- *** Required util gawk missing. Please install the required
- *** gawk package for your distribution and try again.])
- ])
-])
-
-dnl #
dnl # Default SPL user configuration
dnl #
-AC_DEFUN([SPL_AC_CONFIG_USER], [
- SPL_AC_GAWK
-])
+AC_DEFUN([SPL_AC_CONFIG_USER], [])
dnl #
dnl # Check for rpm+rpmbuild to build RPM packages. If these tools
diff --git a/configure b/configure
index d05ff84ac..1fb10af36 100755
--- a/configure
+++ b/configure
@@ -15719,22 +15719,7 @@ fi
;;
- user)
-
- if test "x$AWK" != xgawk; then
-
- { { $as_echo "$as_me:$LINENO: error:
- *** Required util gawk missing. Please install the required
- *** gawk package for your distribution and try again." >&5
-$as_echo "$as_me: error:
- *** Required util gawk missing. Please install the required
- *** gawk package for your distribution and try again." >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-
-
- ;;
+ user) ;;
all)
@@ -19797,22 +19782,7 @@ fi
-
-
- if test "x$AWK" != xgawk; then
-
- { { $as_echo "$as_me:$LINENO: error:
- *** Required util gawk missing. Please install the required
- *** gawk package for your distribution and try again." >&5
-$as_echo "$as_me: error:
- *** Required util gawk missing. Please install the required
- *** gawk package for your distribution and try again." >&2;}
- { (exit 1); exit 1; }; }
-
-fi
-
-
- ;;
+ ;;
srpm) ;;
*)
{ $as_echo "$as_me:$LINENO: result: Error!" >&5
diff --git a/module/spl/spl-generic.c b/module/spl/spl-generic.c
index 680655d0f..654654148 100644
--- a/module/spl/spl-generic.c
+++ b/module/spl/spl-generic.c
@@ -414,21 +414,25 @@ EXPORT_SYMBOL(zone_get_hostid);
#ifndef HAVE_KALLSYMS_LOOKUP_NAME
/*
- * Because kallsyms_lookup_name() is no longer exported in the
- * mainline kernel we are forced to resort to somewhat drastic
- * measures. This function replaces the functionality by performing
- * an upcall to user space where /proc/kallsyms is consulted for
- * the requested address.
+ * The kallsyms_lookup_name() kernel function is not an exported symbol in
+ * Linux 2.6.19 through 2.6.32 inclusive.
+ *
+ * This function replaces the functionality by performing an upcall to user
+ * space where /proc/kallsyms is consulted for the requested address.
+ *
*/
-#define GET_KALLSYMS_ADDR_CMD \
- "gawk '{ if ( $3 == \"kallsyms_lookup_name\") { print $1 } }' " \
- "/proc/kallsyms >/proc/sys/kernel/spl/kallsyms_lookup_name"
+
+#define GET_KALLSYMS_ADDR_CMD \
+ "exec 0</dev/null " \
+ " 1>/proc/sys/kernel/spl/kallsyms_lookup_name " \
+ " 2>/dev/null; " \
+ "awk '{ if ( $3 == \"kallsyms_lookup_name\" ) { print $1 } }' " \
+ " /proc/kallsyms "
static int
set_kallsyms_lookup_name(void)
{
- char sh_path[] = "/bin/sh";
- char *argv[] = { sh_path,
+ char *argv[] = { "/bin/sh",
"-c",
GET_KALLSYMS_ADDR_CMD,
NULL };
@@ -438,7 +442,7 @@ set_kallsyms_lookup_name(void)
NULL };
int rc;
- rc = call_usermodehelper(sh_path, argv, envp, 1);
+ rc = call_usermodehelper(argv[0], argv, envp, 1);
if (rc)
printk("SPL: Failed user helper '%s %s %s', rc = %d\n",
argv[0], argv[1], argv[2], rc);