diff options
| author | pgoyette <pgoyette@NetBSD.org> | 2019-01-27 02:08:33 +0000 |
|---|---|---|
| committer | pgoyette <pgoyette@NetBSD.org> | 2019-01-27 02:08:33 +0000 |
| commit | cc17ee2ece085d7d746bcd8fa9be19170855aaac (patch) | |
| tree | 5be40613f405cb081b2c44410b1506781927f8e3 /sys/dev/bio.c | |
| parent | 10dd4cc92542aa04b0e59469a484a48e4c3cdd24 (diff) | |
Merge the [pgoyette-compat] branch
Diffstat (limited to 'sys/dev/bio.c')
| -rw-r--r-- | sys/dev/bio.c | 50 |
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; |
