mirror of https://github.com/openzfs/zfs.git
Add zone_get_hostid() function
Minimal support added for the zone_get_hostid() function. Only global zones are supported therefore this function must be called with a NULL argumment. Additionally, I've added the HW_HOSTID_LEN define and updated all instances where a hard coded magic value of 11 was used; "A good riddance of bad rubbish!"
This commit is contained in:
parent
63a93055fb
commit
99639e4a13
|
@ -33,6 +33,7 @@
|
|||
#include <linux/sysctl.h>
|
||||
#include <linux/seq_file.h>
|
||||
#include <sys/sysmacros.h>
|
||||
#include <sys/systeminfo.h>
|
||||
#include <sys/kmem.h>
|
||||
#include <sys/mutex.h>
|
||||
#include <sys/kstat.h>
|
||||
|
|
|
@ -143,6 +143,7 @@ extern int p0;
|
|||
|
||||
/* Missing misc functions */
|
||||
extern int highbit(unsigned long i);
|
||||
extern uint32_t zone_get_hostid(void *zone);
|
||||
|
||||
#define makedevice(maj,min) makedev(maj,min)
|
||||
|
||||
|
|
|
@ -1,4 +1,9 @@
|
|||
#ifndef _SPL_SYSTEMINFO_H
|
||||
#define _SPL_SYSTEMINFO_H
|
||||
|
||||
#define HW_INVALID_HOSTID 0xFFFFFFFF /* an invalid hostid */
|
||||
#define HW_HOSTID_LEN 11 /* minimum buffer size needed */
|
||||
/* to hold a decimal or hex */
|
||||
/* hostid string */
|
||||
|
||||
#endif /* SPL_SYSTEMINFO_H */
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
*/
|
||||
|
||||
#include <sys/sysmacros.h>
|
||||
#include <sys/systeminfo.h>
|
||||
#include <sys/vmsystm.h>
|
||||
#include <sys/vnode.h>
|
||||
#include <sys/kmem.h>
|
||||
|
@ -47,7 +48,7 @@ char spl_version[16] = "SPL v" VERSION;
|
|||
long spl_hostid = 0;
|
||||
EXPORT_SYMBOL(spl_hostid);
|
||||
|
||||
char hw_serial[11] = "<none>";
|
||||
char hw_serial[HW_HOSTID_LEN] = "<none>";
|
||||
EXPORT_SYMBOL(hw_serial);
|
||||
|
||||
int p0 = 0;
|
||||
|
@ -253,6 +254,21 @@ set_hostid(void)
|
|||
return call_usermodehelper(sh_path, argv, envp, 1);
|
||||
}
|
||||
|
||||
uint32_t
|
||||
zone_get_hostid(void *zone)
|
||||
{
|
||||
unsigned long hostid;
|
||||
|
||||
/* Only the global zone is supported */
|
||||
ASSERT(zone == NULL);
|
||||
|
||||
if (ddi_strtoul(hw_serial, NULL, HW_HOSTID_LEN-1, &hostid) != 0)
|
||||
return HW_INVALID_HOSTID;
|
||||
|
||||
return (uint32_t)hostid;
|
||||
}
|
||||
EXPORT_SYMBOL(zone_get_hostid);
|
||||
|
||||
static int __init spl_init(void)
|
||||
{
|
||||
int rc = 0;
|
||||
|
|
|
@ -470,7 +470,8 @@ proc_dohostid(struct ctl_table *table, int write, struct file *filp,
|
|||
RETURN(-EINVAL);
|
||||
|
||||
spl_hostid = (long)val;
|
||||
(void)snprintf(hw_serial, 11, "%u", (val >= 0) ? val : -val);
|
||||
(void)snprintf(hw_serial, HW_HOSTID_LEN-1, "%u",
|
||||
(val >= 0) ? val : -val);
|
||||
*ppos += *lenp;
|
||||
} else {
|
||||
len = snprintf(str, sizeof(str), "%lx", spl_hostid);
|
||||
|
|
Loading…
Reference in New Issue