diff --git a/include/linux/Makefile.am b/include/linux/Makefile.am index c2a7491218..fc2df090ef 100644 --- a/include/linux/Makefile.am +++ b/include/linux/Makefile.am @@ -4,7 +4,8 @@ KERNEL_H = \ $(top_srcdir)/include/linux/dcache_compat.h \ $(top_srcdir)/include/linux/xattr_compat.h \ $(top_srcdir)/include/linux/vfs_compat.h \ - $(top_srcdir)/include/linux/blkdev_compat.h + $(top_srcdir)/include/linux/blkdev_compat.h \ + $(top_srcdir)/include/linux/utsname_compat.h USER_H = diff --git a/lib/libspl/include/sys/utsname.h b/include/linux/utsname_compat.h similarity index 50% rename from lib/libspl/include/sys/utsname.h rename to include/linux/utsname_compat.h index e16e22dbdc..88da45cf50 100644 --- a/lib/libspl/include/sys/utsname.h +++ b/include/linux/utsname_compat.h @@ -2,33 +2,28 @@ * CDDL HEADER START * * The contents of this file are subject to the terms of the - * Common Development and Distribution License, Version 1.0 only - * (the "License"). You may not use this file except in compliance - * with the License. + * Common Development and Distribution License (the "License"). + * You may not use this file except in compliance with the License. * - * You can obtain a copy of the license at usr/src/OPENLIBSPLARIS.LICENSE + * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each - * file and include the License file at usr/src/OPENLIBSPLARIS.LICENSE. + * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ -/* - * Copyright 2007 Sun Microsystems, Inc. All rights reserved. - * Use is subject to license terms. - */ -#ifndef _LIBSPL_UTSNAME_H -#define _LIBSPL_UTSNAME_H +#ifndef _ZFS_UTSNAME_H +#define _ZFS_UTSNAME_H -#include_next +#include -struct utsname utsname; +typedef struct new_utsname utsname_t; -#endif /* _LIBSPL_UTSNAME_H */ +#endif /* _ZFS_UTSNAME_H */ diff --git a/include/sys/zfs_context.h b/include/sys/zfs_context.h index f26c827dc7..ee8221d534 100644 --- a/include/sys/zfs_context.h +++ b/include/sys/zfs_context.h @@ -67,6 +67,7 @@ #include #include #include +#include #else /* _KERNEL */ @@ -117,6 +118,7 @@ #include #include #include +#include /* * Stack @@ -673,6 +675,9 @@ extern int ddi_strtoul(const char *str, char **nptr, int base, extern int ddi_strtoull(const char *str, char **nptr, int base, u_longlong_t *result); +typedef struct utsname utsname_t; +extern utsname_t *utsname(void); + /* ZFS Boot Related stuff. */ struct _buf { diff --git a/lib/libspl/include/sys/Makefile.am b/lib/libspl/include/sys/Makefile.am index f55abc8fae..d86cc6a560 100644 --- a/lib/libspl/include/sys/Makefile.am +++ b/lib/libspl/include/sys/Makefile.am @@ -47,7 +47,6 @@ libspl_HEADERS = \ $(top_srcdir)/lib/libspl/include/sys/types.h \ $(top_srcdir)/lib/libspl/include/sys/tzfile.h \ $(top_srcdir)/lib/libspl/include/sys/uio.h \ - $(top_srcdir)/lib/libspl/include/sys/utsname.h \ $(top_srcdir)/lib/libspl/include/sys/va_list.h \ $(top_srcdir)/lib/libspl/include/sys/varargs.h \ $(top_srcdir)/lib/libspl/include/sys/vnode.h \ diff --git a/lib/libzpool/kernel.c b/lib/libzpool/kernel.c index 5adcfa617a..995f61d05d 100644 --- a/lib/libzpool/kernel.c +++ b/lib/libzpool/kernel.c @@ -47,10 +47,7 @@ int aok; uint64_t physmem; vnode_t *rootdir = (vnode_t *)0xabcd1234; char hw_serial[HW_HOSTID_LEN]; - -struct utsname utsname = { - "userland", "libzpool", "1", "1", "na" -}; +struct utsname hw_utsname; /* this only exists to have its address taken */ struct proc p0; @@ -1089,6 +1086,12 @@ ddi_strtoull(const char *str, char **nptr, int base, u_longlong_t *result) return (0); } +utsname_t * +utsname(void) +{ + return (&hw_utsname); +} + /* * ========================================================================= * kernel emulation setup & teardown @@ -1121,6 +1124,7 @@ kernel_init(int mode) VERIFY((random_fd = open("/dev/random", O_RDONLY)) != -1); VERIFY((urandom_fd = open("/dev/urandom", O_RDONLY)) != -1); + VERIFY0(uname(&hw_utsname)); thread_init(); system_taskq_init(); diff --git a/module/zfs/spa_config.c b/module/zfs/spa_config.c index c8fe79ed52..a08456d56f 100644 --- a/module/zfs/spa_config.c +++ b/module/zfs/spa_config.c @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -408,8 +407,8 @@ spa_config_generate(spa_t *spa, vdev_t *vd, uint64_t txg, int getstats) VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_HOSTID, hostid) == 0); } - VERIFY(nvlist_add_string(config, ZPOOL_CONFIG_HOSTNAME, - utsname.nodename) == 0); + VERIFY0(nvlist_add_string(config, ZPOOL_CONFIG_HOSTNAME, + utsname()->nodename)); if (vd != rvd) { VERIFY(nvlist_add_uint64(config, ZPOOL_CONFIG_TOP_GUID, diff --git a/module/zfs/spa_history.c b/module/zfs/spa_history.c index 5b82238b90..1c434197d8 100644 --- a/module/zfs/spa_history.c +++ b/module/zfs/spa_history.c @@ -32,7 +32,6 @@ #include #include #include -#include #include #include #include @@ -236,9 +235,8 @@ spa_history_log_sync(void *arg, dmu_tx_t *tx) #endif fnvlist_add_uint64(nvl, ZPOOL_HIST_TIME, gethrestime_sec()); -#ifdef _KERNEL - fnvlist_add_string(nvl, ZPOOL_HIST_HOST, utsname.nodename); -#endif + fnvlist_add_string(nvl, ZPOOL_HIST_HOST, utsname()->nodename); + if (nvlist_exists(nvl, ZPOOL_HIST_CMD)) { zfs_dbgmsg("command: %s", fnvlist_lookup_string(nvl, ZPOOL_HIST_CMD)); @@ -546,11 +544,12 @@ spa_history_log_internal_dd(dsl_dir_t *dd, const char *operation, void spa_history_log_version(spa_t *spa, const char *operation) { + utsname_t *u = utsname(); + spa_history_log_internal(spa, operation, NULL, "pool version %llu; software version %llu/%d; uts %s %s %s %s", (u_longlong_t)spa_version(spa), SPA_VERSION, ZPL_VERSION, - utsname.nodename, utsname.release, utsname.version, - utsname.machine); + u->nodename, u->release, u->version, u->machine); } #if defined(_KERNEL) && defined(HAVE_SPL)