summaryrefslogtreecommitdiff
path: root/kernel/fuse_vnops.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/fuse_vnops.c')
-rw-r--r--kernel/fuse_vnops.c15
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,