summaryrefslogtreecommitdiff
path: root/sys/dev/bio.c
diff options
context:
space:
mode:
authorpgoyette <pgoyette@NetBSD.org>2019-01-27 02:08:33 +0000
committerpgoyette <pgoyette@NetBSD.org>2019-01-27 02:08:33 +0000
commitcc17ee2ece085d7d746bcd8fa9be19170855aaac (patch)
tree5be40613f405cb081b2c44410b1506781927f8e3 /sys/dev/bio.c
parent10dd4cc92542aa04b0e59469a484a48e4c3cdd24 (diff)
Merge the [pgoyette-compat] branch
Diffstat (limited to 'sys/dev/bio.c')
-rw-r--r--sys/dev/bio.c50
1 files changed, 9 insertions, 41 deletions
diff --git a/sys/dev/bio.c b/sys/dev/bio.c
index 50505296ac2..bcc64a1ac6d 100644
--- a/sys/dev/bio.c
+++ b/sys/dev/bio.c
@@ -1,4 +1,4 @@
-/* $NetBSD: bio.c,v 1.13 2015/08/20 14:40:17 christos Exp $ */
+/* $NetBSD: bio.c,v 1.14 2019/01/27 02:08:41 pgoyette 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.13 2015/08/20 14:40:17 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: bio.c,v 1.14 2019/01/27 02:08:41 pgoyette Exp $");
#include "opt_compat_netbsd.h"
@@ -43,6 +43,7 @@ __KERNEL_RCSID(0, "$NetBSD: bio.c,v 1.13 2015/08/20 14:40:17 christos Exp $");
#include <sys/mutex.h>
#include <sys/proc.h>
#include <sys/kauth.h>
+#include <sys/compat_stub.h>
#include <dev/biovar.h>
#include <dev/sysmon/sysmonvar.h>
@@ -127,10 +128,8 @@ bioioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
case BIOCDISK:
case BIOCDISK_NOVOL:
case BIOCVOL:
-#ifdef COMPAT_30
case OBIOCDISK:
case OBIOCVOL:
-#endif
error = kauth_authorize_device_passthru(l->l_cred, dev,
KAUTH_REQ_DEVICE_RAWIO_PASSTHRU_READCONF, addr);
if (error)
@@ -190,43 +189,12 @@ bioioctl(dev_t dev, u_long cmd, void *addr, int flag, struct lwp *l)
return ENOENT;
}
mutex_exit(&bio_lock);
-#ifdef COMPAT_30
- switch (cmd) {
- case OBIOCDISK: {
- struct bioc_disk *bd =
- malloc(sizeof(*bd), M_DEVBUF, M_WAITOK|M_ZERO);
-
- (void)memcpy(bd, addr, sizeof(struct obioc_disk));
- error = bio_delegate_ioctl(common->bc_cookie,
- BIOCDISK, bd);
- if (error) {
- free(bd, M_DEVBUF);
- return error;
- }
-
- (void)memcpy(addr, bd, sizeof(struct obioc_disk));
- free(bd, M_DEVBUF);
- return 0;
- }
- case OBIOCVOL: {
- struct bioc_vol *bv =
- malloc(sizeof(*bv), M_DEVBUF, M_WAITOK|M_ZERO);
-
- (void)memcpy(bv, addr, sizeof(struct obioc_vol));
- error = bio_delegate_ioctl(common->bc_cookie,
- BIOCVOL, bv);
- if (error) {
- free(bv, M_DEVBUF);
- return error;
- }
-
- (void)memcpy(addr, bv, sizeof(struct obioc_vol));
- free(bv, M_DEVBUF);
- return 0;
- }
- }
-#endif
- error = bio_delegate_ioctl(common->bc_cookie, cmd, addr);
+ MODULE_CALL_HOOK(compat_bio_30_hook,
+ (common->bc_cookie, cmd, addr, bio_delegate_ioctl),
+ enosys(), error);
+ if (error == ENOSYS)
+ error = bio_delegate_ioctl(common->bc_cookie, cmd,
+ addr);
return error;
}
return 0;