Merged pull request #212 from dajhorn/hostid.
Use gethostid in the Linux convention.
This commit is contained in:
commit
44e9e34793
|
@ -1533,7 +1533,9 @@ do_import(nvlist_t *config, const char *newname, const char *mntopts,
|
||||||
|
|
||||||
if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_HOSTID,
|
if (nvlist_lookup_uint64(config, ZPOOL_CONFIG_HOSTID,
|
||||||
&hostid) == 0) {
|
&hostid) == 0) {
|
||||||
if ((unsigned long)hostid != gethostid()) {
|
unsigned long system_hostid = gethostid() & 0xffffffff;
|
||||||
|
|
||||||
|
if ((unsigned long)hostid != system_hostid) {
|
||||||
char *hostname;
|
char *hostname;
|
||||||
uint64_t timestamp;
|
uint64_t timestamp;
|
||||||
time_t t;
|
time_t t;
|
||||||
|
|
|
@ -44,14 +44,4 @@
|
||||||
# define issetugid() (geteuid() == 0 || getegid() == 0)
|
# define issetugid() (geteuid() == 0 || getegid() == 0)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(__sun__) && !defined(__sun)
|
|
||||||
/* It seems Solaris only returns positive host ids */
|
|
||||||
static inline long fake_gethostid(void)
|
|
||||||
{
|
|
||||||
long id = gethostid();
|
|
||||||
return id >= 0 ? id : -id;
|
|
||||||
}
|
|
||||||
#define gethostid() fake_gethostid()
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* _LIBSPL_UNISTD_H */
|
#endif /* _LIBSPL_UNISTD_H */
|
||||||
|
|
|
@ -179,6 +179,7 @@ check_status(nvlist_t *config, boolean_t isimport)
|
||||||
uint64_t stateval;
|
uint64_t stateval;
|
||||||
uint64_t suspended;
|
uint64_t suspended;
|
||||||
uint64_t hostid = 0;
|
uint64_t hostid = 0;
|
||||||
|
unsigned long system_hostid = gethostid() & 0xffffffff;
|
||||||
|
|
||||||
verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION,
|
verify(nvlist_lookup_uint64(config, ZPOOL_CONFIG_VERSION,
|
||||||
&version) == 0);
|
&version) == 0);
|
||||||
|
@ -202,7 +203,7 @@ check_status(nvlist_t *config, boolean_t isimport)
|
||||||
* Pool last accessed by another system.
|
* Pool last accessed by another system.
|
||||||
*/
|
*/
|
||||||
(void) nvlist_lookup_uint64(config, ZPOOL_CONFIG_HOSTID, &hostid);
|
(void) nvlist_lookup_uint64(config, ZPOOL_CONFIG_HOSTID, &hostid);
|
||||||
if (hostid != 0 && (unsigned long)hostid != gethostid() &&
|
if (hostid != 0 && (unsigned long)hostid != system_hostid &&
|
||||||
stateval == POOL_STATE_ACTIVE)
|
stateval == POOL_STATE_ACTIVE)
|
||||||
return (ZPOOL_STATUS_HOSTID_MISMATCH);
|
return (ZPOOL_STATUS_HOSTID_MISMATCH);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue