diff options
author | Darik Horn <[email protected]> | 2011-04-25 10:18:07 -0500 |
---|---|---|
committer | Darik Horn <[email protected]> | 2011-04-25 10:36:17 -0500 |
commit | 492b8e9e7b6f3df55eed04f7288db6b62c17c668 (patch) | |
tree | d2d497ddd77b93bbd816e8c4a8ccd9ffd8bea9dc /cmd/zpool | |
parent | a1cc0b3290dcf1b5cf759c89352d8bdb44ee41e6 (diff) |
Use gethostid in the Linux convention.
Disable the gethostid() override for Solaris behavior because Linux systems
implement the POSIX standard in a way that allows a negative result.
Mask the gethostid() result to the lower four bytes, like coreutils does in
/usr/bin/hostid, to prevent junk bits or sign-extension on systems that have an
eight byte long type. This can cause a spurious hostid mismatch that prevents
zpool import on 64-bit systems.
Diffstat (limited to 'cmd/zpool')
-rw-r--r-- | cmd/zpool/zpool_main.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c index bad4e2a4f..3b8157392 100644 --- a/cmd/zpool/zpool_main.c +++ b/cmd/zpool/zpool_main.c @@ -1533,7 +1533,9 @@ do_import(nvlist_t *config, const char *newname, const char *mntopts, if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_HOSTID, &hostid) == 0) { - if ((unsigned long)hostid != gethostid()) { + unsigned long system_hostid = gethostid() & 0xffffffff; + + if ((unsigned long)hostid != system_hostid) { char *hostname; uint64_t timestamp; time_t t; |