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/sysctl.h>
|
||||||
#include <linux/seq_file.h>
|
#include <linux/seq_file.h>
|
||||||
#include <sys/sysmacros.h>
|
#include <sys/sysmacros.h>
|
||||||
|
#include <sys/systeminfo.h>
|
||||||
#include <sys/kmem.h>
|
#include <sys/kmem.h>
|
||||||
#include <sys/mutex.h>
|
#include <sys/mutex.h>
|
||||||
#include <sys/kstat.h>
|
#include <sys/kstat.h>
|
||||||
|
|
|
@ -143,6 +143,7 @@ extern int p0;
|
||||||
|
|
||||||
/* Missing misc functions */
|
/* Missing misc functions */
|
||||||
extern int highbit(unsigned long i);
|
extern int highbit(unsigned long i);
|
||||||
|
extern uint32_t zone_get_hostid(void *zone);
|
||||||
|
|
||||||
#define makedevice(maj,min) makedev(maj,min)
|
#define makedevice(maj,min) makedev(maj,min)
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,9 @@
|
||||||
#ifndef _SPL_SYSTEMINFO_H
|
#ifndef _SPL_SYSTEMINFO_H
|
||||||
#define _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 */
|
#endif /* SPL_SYSTEMINFO_H */
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/sysmacros.h>
|
#include <sys/sysmacros.h>
|
||||||
|
#include <sys/systeminfo.h>
|
||||||
#include <sys/vmsystm.h>
|
#include <sys/vmsystm.h>
|
||||||
#include <sys/vnode.h>
|
#include <sys/vnode.h>
|
||||||
#include <sys/kmem.h>
|
#include <sys/kmem.h>
|
||||||
|
@ -47,7 +48,7 @@ char spl_version[16] = "SPL v" VERSION;
|
||||||
long spl_hostid = 0;
|
long spl_hostid = 0;
|
||||||
EXPORT_SYMBOL(spl_hostid);
|
EXPORT_SYMBOL(spl_hostid);
|
||||||
|
|
||||||
char hw_serial[11] = "<none>";
|
char hw_serial[HW_HOSTID_LEN] = "<none>";
|
||||||
EXPORT_SYMBOL(hw_serial);
|
EXPORT_SYMBOL(hw_serial);
|
||||||
|
|
||||||
int p0 = 0;
|
int p0 = 0;
|
||||||
|
@ -253,6 +254,21 @@ set_hostid(void)
|
||||||
return call_usermodehelper(sh_path, argv, envp, 1);
|
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)
|
static int __init spl_init(void)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
|
|
@ -470,7 +470,8 @@ proc_dohostid(struct ctl_table *table, int write, struct file *filp,
|
||||||
RETURN(-EINVAL);
|
RETURN(-EINVAL);
|
||||||
|
|
||||||
spl_hostid = (long)val;
|
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;
|
*ppos += *lenp;
|
||||||
} else {
|
} else {
|
||||||
len = snprintf(str, sizeof(str), "%lx", spl_hostid);
|
len = snprintf(str, sizeof(str), "%lx", spl_hostid);
|
||||||
|
|
Loading…
Reference in New Issue