summaryrefslogtreecommitdiff
path: root/sys/dev/bio.c
diff options
context:
space:
mode:
authorchristos <christos@NetBSD.org>2015-03-12 15:33:10 +0000
committerchristos <christos@NetBSD.org>2015-03-12 15:33:10 +0000
commit8a37ef05f971c57b733b591aea54be04e92db8a0 (patch)
tree336595502ec027ff54480183cfaae9e73577a1b2 /sys/dev/bio.c
parent9a627e1c771e2a15bc99198a6d5af2058b3a34ab (diff)
Dedup the conversion of bioc_disk and bioc_vol to envsys_data_t
Diffstat (limited to 'sys/dev/bio.c')
-rw-r--r--sys/dev/bio.c66
1 files changed, 64 insertions, 2 deletions
diff --git a/sys/dev/bio.c b/sys/dev/bio.c
index 89ddc78669c..127d0fc5c36 100644
--- a/sys/dev/bio.c
+++ b/sys/dev/bio.c
@@ -1,4 +1,4 @@
-/* $NetBSD: bio.c,v 1.11 2014/07/25 08:10:35 dholland Exp $ */
+/* $NetBSD: bio.c,v 1.12 2015/03/12 15:33:10 christos Exp $ */
/* $OpenBSD: bio.c,v 1.9 2007/03/20 02:35:55 marco Exp $ */
/*
@@ -28,7 +28,7 @@
/* A device controller ioctl tunnelling device. */
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: bio.c,v 1.11 2014/07/25 08:10:35 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bio.c,v 1.12 2015/03/12 15:33:10 christos Exp $");
#include "opt_compat_netbsd.h"
@@ -45,6 +45,7 @@ __KERNEL_RCSID(0, "$NetBSD: bio.c,v 1.11 2014/07/25 08:10:35 dholland Exp $");
#include <sys/kauth.h>
#include <dev/biovar.h>
+#include <dev/sysmon/sysmonvar.h>
struct bio_mapping {
LIST_ENTRY(bio_mapping) bm_link;
@@ -302,3 +303,64 @@ bio_delegate_ioctl(void *cookie, u_long cmd, void *addr)
return bm->bm_ioctl(bm->bm_dev, cmd, addr);
}
+
+void
+bio_disk_to_envsys(envsys_data_t *edata, const struct bioc_disk *bd)
+{
+ switch (bd->bd_status) {
+ case BIOC_SDONLINE:
+ edata->value_cur = ENVSYS_DRIVE_ONLINE;
+ edata->state = ENVSYS_SVALID;
+ break;
+ case BIOC_SDOFFLINE:
+ edata->value_cur = ENVSYS_DRIVE_OFFLINE;
+ edata->state = ENVSYS_SCRITICAL;
+ break;
+ default:
+ edata->value_cur = ENVSYS_DRIVE_FAIL;
+ edata->state = ENVSYS_SCRITICAL;
+ break;
+ }
+}
+
+void
+bio_vol_to_envsys(envsys_data_t *edata, const struct bioc_vol *bv)
+{
+ switch (bv->bv_status) {
+ case BIOC_SVOFFLINE:
+ edata->value_cur = ENVSYS_DRIVE_OFFLINE;
+ edata->state = ENVSYS_SCRITICAL;
+ break;
+ case BIOC_SVDEGRADED:
+ edata->value_cur = ENVSYS_DRIVE_PFAIL;
+ edata->state = ENVSYS_SCRITICAL;
+ break;
+ case BIOC_SVBUILDING:
+ edata->value_cur = ENVSYS_DRIVE_BUILD;
+ edata->state = ENVSYS_SVALID;
+ break;
+ case BIOC_SVMIGRATING:
+ edata->value_cur = ENVSYS_DRIVE_MIGRATING;
+ edata->state = ENVSYS_SVALID;
+ break;
+ case BIOC_SVCHECKING:
+ edata->value_cur = ENVSYS_DRIVE_CHECK;
+ edata->state = ENVSYS_SVALID;
+ break;
+ case BIOC_SVREBUILD:
+ edata->value_cur = ENVSYS_DRIVE_REBUILD;
+ edata->state = ENVSYS_SCRITICAL;
+ break;
+ case BIOC_SVSCRUB:
+ case BIOC_SVONLINE:
+ edata->value_cur = ENVSYS_DRIVE_ONLINE;
+ edata->state = ENVSYS_SVALID;
+ break;
+ case BIOC_SVINVALID:
+ /* FALLTHROUGH */
+ default:
+ edata->value_cur = ENVSYS_DRIVE_EMPTY; /* unknown state */
+ edata->state = ENVSYS_SINVALID;
+ break;
+ }
+}