mirror of
https://git.proxmox.com/git/mirror_zfs.git
synced 2026-05-22 10:37:35 +03:00
Read spl_hostid module parameter before gethostid()
If spl_hostid is set via module parameter, it's likely different from gethostid(). Therefore, the userspace tool should read it first before falling back to gethostid(). Signed-off-by: Chunwei Chen <tuxoko@gmail.com> Signed-off-by: Brian Behlendorf <behlendorf1@llnl.gov> Closes #3034
This commit is contained in:
committed by
Brian Behlendorf
parent
aa2ef419e4
commit
53698a453d
@@ -195,7 +195,7 @@ check_status(nvlist_t *config, boolean_t isimport, zpool_errata_t *erratap)
|
||||
uint64_t suspended;
|
||||
uint64_t hostid = 0;
|
||||
uint64_t errata = 0;
|
||||
unsigned long system_hostid = gethostid() & 0xffffffff;
|
||||
unsigned long system_hostid = get_system_hostid();
|
||||
|
||||
verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION,
|
||||
&version) == 0);
|
||||
|
||||
+25
-1
@@ -1107,6 +1107,30 @@ umem_out_of_memory(void)
|
||||
return (0);
|
||||
}
|
||||
|
||||
static unsigned long
|
||||
get_spl_hostid(void)
|
||||
{
|
||||
FILE *f;
|
||||
unsigned long hostid;
|
||||
|
||||
f = fopen("/sys/module/spl/parameters/spl_hostid", "r");
|
||||
if (!f)
|
||||
return (0);
|
||||
if (fscanf(f, "%lu", &hostid) != 1)
|
||||
hostid = 0;
|
||||
fclose(f);
|
||||
return (hostid & 0xffffffff);
|
||||
}
|
||||
|
||||
unsigned long
|
||||
get_system_hostid(void)
|
||||
{
|
||||
unsigned long system_hostid = get_spl_hostid();
|
||||
if (system_hostid == 0)
|
||||
system_hostid = gethostid() & 0xffffffff;
|
||||
return (system_hostid);
|
||||
}
|
||||
|
||||
void
|
||||
kernel_init(int mode)
|
||||
{
|
||||
@@ -1120,7 +1144,7 @@ kernel_init(int mode)
|
||||
(double)physmem * sysconf(_SC_PAGE_SIZE) / (1ULL << 30));
|
||||
|
||||
(void) snprintf(hw_serial, sizeof (hw_serial), "%ld",
|
||||
(mode & FWRITE) ? gethostid() : 0);
|
||||
(mode & FWRITE) ? get_system_hostid() : 0);
|
||||
|
||||
VERIFY((random_fd = open("/dev/random", O_RDONLY)) != -1);
|
||||
VERIFY((urandom_fd = open("/dev/urandom", O_RDONLY)) != -1);
|
||||
|
||||
Reference in New Issue
Block a user