diff options
author | Darik Horn <[email protected]> | 2014-10-12 22:57:49 -0500 |
---|---|---|
committer | Brian Behlendorf <[email protected]> | 2014-10-17 14:59:05 -0700 |
commit | d94fd5f0def2fbcb720647acac79ae75e2b9fa3b (patch) | |
tree | 44765087069d477abe2efa88a868c0b59ffad8fe /cmd | |
parent | 33074f2254db76f7237e5a29877558ef920ae325 (diff) |
Let `zpool import` ignore a missing hostid record.
Change the zpool program to skip its hostid mismatch check in the
same way that libzfs already does.
Invoked imports fail if the ZPOOL_CONFIG_HOSTID nvpair is missing in
the /etc/zfs/zpool.cache file, which can happen as of the /etc/hostid
deprecation in commit zfsonlinux/spl@acf0ade362cb8b26d67770114ee6fa17816e6b65.
Signed-off-by: Darik Horn <[email protected]>
Signed-off-by: Brian Behlendorf <[email protected]>
Closes #2794
Diffstat (limited to 'cmd')
-rw-r--r-- | cmd/zpool/zpool_main.c | 55 |
1 files changed, 24 insertions, 31 deletions
diff --git a/cmd/zpool/zpool_main.c b/cmd/zpool/zpool_main.c index ff54db8d2..3b5d2fc42 100644 --- a/cmd/zpool/zpool_main.c +++ b/cmd/zpool/zpool_main.c @@ -1914,37 +1914,30 @@ do_import(nvlist_t *config, const char *newname, const char *mntopts, return (1); } else if (state != POOL_STATE_EXPORTED && !(flags & ZFS_IMPORT_ANY_HOST)) { - uint64_t hostid; - - if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_HOSTID, - &hostid) == 0) { - unsigned long system_hostid = gethostid() & 0xffffffff; - - if ((unsigned long)hostid != system_hostid) { - char *hostname; - uint64_t timestamp; - time_t t; - - verify(nvlist_lookup_string(config, - ZPOOL_CONFIG_HOSTNAME, &hostname) == 0); - verify(nvlist_lookup_uint64(config, - ZPOOL_CONFIG_TIMESTAMP, ×tamp) == 0); - t = timestamp; - (void) fprintf(stderr, gettext("cannot import " - "'%s': pool may be in use from other " - "system, it was last accessed by %s " - "(hostid: 0x%lx) on %s"), name, hostname, - (unsigned long)hostid, - asctime(localtime(&t))); - (void) fprintf(stderr, gettext("use '-f' to " - "import anyway\n")); - return (1); - } - } else { - (void) fprintf(stderr, gettext("cannot import '%s': " - "pool may be in use from other system\n"), name); - (void) fprintf(stderr, gettext("use '-f' to import " - "anyway\n")); + uint64_t hostid = 0; + unsigned long system_hostid = gethostid() & 0xffffffff; + + (void) nvlist_lookup_uint64(config, ZPOOL_CONFIG_HOSTID, + &hostid); + + if (hostid != 0 && (unsigned long)hostid != system_hostid) { + char *hostname; + uint64_t timestamp; + time_t t; + + verify(nvlist_lookup_string(config, + ZPOOL_CONFIG_HOSTNAME, &hostname) == 0); + verify(nvlist_lookup_uint64(config, + ZPOOL_CONFIG_TIMESTAMP, ×tamp) == 0); + t = timestamp; + (void) fprintf(stderr, gettext("cannot import " + "'%s': pool may be in use from other " + "system, it was last accessed by %s " + "(hostid: 0x%lx) on %s"), name, hostname, + (unsigned long)hostid, + asctime(localtime(&t))); + (void) fprintf(stderr, gettext("use '-f' to " + "import anyway\n")); return (1); } } |