diff options
-rw-r--r-- | kernel/fuse_vnops.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/kernel/fuse_vnops.c b/kernel/fuse_vnops.c index d07abaf..87c040e 100644 --- a/kernel/fuse_vnops.c +++ b/kernel/fuse_vnops.c @@ -748,6 +748,21 @@ static int fuse_open(struct vnode **vpp, int flag, struct cred *cred_p, struct vnode *vp = *vpp; int err = 0; + /* Bounce the openings of special devices */ + if (vp && (vp->v_type == VFIFO)) { + vnode_t *svp; + + svp = specvp(vp, vp->v_rdev, vp->v_type, cred_p); + VN_RELE(vp); + if (svp == NULL) + err = ENOSYS; + else + *vpp = svp; + if (!err) + err = VOP_OPEN(vpp, flag, cred_p, ct); + return (err); + } + if ((err = get_filehandle(vp, flag, cred_p, NULL, CACHE_LIST_NO_CHECK))) { DTRACE_PROBE2(fuse_open_err_filehandle, |