diff options
Diffstat (limited to 'module')
-rw-r--r-- | module/spl/spl-generic.c | 18 | ||||
-rw-r--r-- | module/spl/spl-proc.c | 3 |
2 files changed, 19 insertions, 2 deletions
diff --git a/module/spl/spl-generic.c b/module/spl/spl-generic.c index a15cac41e..96a14c62e 100644 --- a/module/spl/spl-generic.c +++ b/module/spl/spl-generic.c @@ -25,6 +25,7 @@ */ #include <sys/sysmacros.h> +#include <sys/systeminfo.h> #include <sys/vmsystm.h> #include <sys/vnode.h> #include <sys/kmem.h> @@ -47,7 +48,7 @@ char spl_version[16] = "SPL v" VERSION; long spl_hostid = 0; EXPORT_SYMBOL(spl_hostid); -char hw_serial[11] = "<none>"; +char hw_serial[HW_HOSTID_LEN] = "<none>"; EXPORT_SYMBOL(hw_serial); int p0 = 0; @@ -253,6 +254,21 @@ set_hostid(void) return call_usermodehelper(sh_path, argv, envp, 1); } +uint32_t +zone_get_hostid(void *zone) +{ + unsigned long hostid; + + /* Only the global zone is supported */ + ASSERT(zone == NULL); + + if (ddi_strtoul(hw_serial, NULL, HW_HOSTID_LEN-1, &hostid) != 0) + return HW_INVALID_HOSTID; + + return (uint32_t)hostid; +} +EXPORT_SYMBOL(zone_get_hostid); + static int __init spl_init(void) { int rc = 0; diff --git a/module/spl/spl-proc.c b/module/spl/spl-proc.c index 1ae1c129a..90c89ce31 100644 --- a/module/spl/spl-proc.c +++ b/module/spl/spl-proc.c @@ -470,7 +470,8 @@ proc_dohostid(struct ctl_table *table, int write, struct file *filp, RETURN(-EINVAL); spl_hostid = (long)val; - (void)snprintf(hw_serial, 11, "%u", (val >= 0) ? val : -val); + (void)snprintf(hw_serial, HW_HOSTID_LEN-1, "%u", + (val >= 0) ? val : -val); *ppos += *lenp; } else { len = snprintf(str, sizeof(str), "%lx", spl_hostid); |