diff options
author | Darik Horn <[email protected]> | 2011-04-14 14:01:22 -0500 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2011-04-21 09:41:09 -0700 |
commit | ad35b6a6e99a0e0962d6a33e181784cada44c3c0 (patch) | |
tree | d50e4fc460fc38cf2bdc163b864defbd1fb0d82a | |
parent | fa6f7d8f9d4760975ea5fe116a7366604f286195 (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.m4 | 17 | ||||
-rwxr-xr-x | configure | 34 | ||||
-rw-r--r-- | module/spl/spl-generic.c | 26 |
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 @@ -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); |