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@acf0ade362.

Signed-off-by: Darik Horn <dajhorn@vanadac.com>
Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov>
Closes #2794
This commit is contained in:
Darik Horn 2014-10-12 22:57:49 -05:00 committed by Brian Behlendorf
parent 33074f2254
commit d94fd5f0de

View File

@ -1914,13 +1914,13 @@ do_import(nvlist_t *config, const char *newname, const char *mntopts,
return (1); return (1);
} else if (state != POOL_STATE_EXPORTED && } else if (state != POOL_STATE_EXPORTED &&
!(flags & ZFS_IMPORT_ANY_HOST)) { !(flags & ZFS_IMPORT_ANY_HOST)) {
uint64_t hostid; uint64_t hostid = 0;
if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_HOSTID,
&hostid) == 0) {
unsigned long system_hostid = gethostid() & 0xffffffff; unsigned long system_hostid = gethostid() & 0xffffffff;
if ((unsigned long)hostid != system_hostid) { (void) nvlist_lookup_uint64(config, ZPOOL_CONFIG_HOSTID,
&hostid);
if (hostid != 0 && (unsigned long)hostid != system_hostid) {
char *hostname; char *hostname;
uint64_t timestamp; uint64_t timestamp;
time_t t; time_t t;
@ -1940,13 +1940,6 @@ do_import(nvlist_t *config, const char *newname, const char *mntopts,
"import anyway\n")); "import anyway\n"));
return (1); 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"));
return (1);
}
} }
if (zpool_import_props(g_zfs, config, newname, props, flags) != 0) if (zpool_import_props(g_zfs, config, newname, props, flags) != 0)