1 /* $OpenBSD: tmpfs_fifoops.c,v 1.9 2024/05/14 08:26:13 jsg Exp $ */
2 /* $NetBSD: tmpfs_fifoops.c,v 1.9 2011/05/24 20:17:49 rmind Exp $ */
3
4 /*
5 * Copyright (c) 2005 The NetBSD Foundation, Inc.
6 * Copyright (c) 2013 Pedro Martelletto
7 * All rights reserved.
8 *
9 * This code is derived from software contributed to The NetBSD Foundation
10 * by Julio M. Merino Vidal, developed as part of Google's Summer of Code
11 * 2005 program.
12 *
13 * Redistribution and use in source and binary forms, with or without
14 * modification, are permitted provided that the following conditions
15 * are met:
16 * 1. Redistributions of source code must retain the above copyright
17 * notice, this list of conditions and the following disclaimer.
18 * 2. Redistributions in binary form must reproduce the above copyright
19 * notice, this list of conditions and the following disclaimer in the
20 * documentation and/or other materials provided with the distribution.
21 *
22 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
23 * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
24 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
25 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
26 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
27 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
28 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
29 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
30 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
31 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
32 * POSSIBILITY OF SUCH DAMAGE.
33 */
34
35 /*
36 * tmpfs vnode interface for named pipes.
37 */
38
39 #include <sys/param.h>
40 #include <sys/vnode.h>
41
42 #include <tmpfs/tmpfs.h>
43 #include <miscfs/fifofs/fifo.h>
44 #include <tmpfs/tmpfs_vnops.h>
45
46 int tmpfs_fifo_read (void *);
47 int tmpfs_fifo_write (void *);
48 int tmpfs_fifo_fsync (void *);
49
50 /*
51 * vnode operations vector used for fifos stored in a tmpfs file system.
52 */
53
54 const struct vops tmpfs_fifovops = {
55 .vop_access = tmpfs_access,
56 .vop_getattr = tmpfs_getattr,
57 .vop_setattr = tmpfs_setattr,
58 .vop_read = tmpfs_fifo_read,
59 .vop_write = tmpfs_fifo_write,
60 .vop_fsync = tmpfs_fifo_fsync,
61 .vop_inactive = tmpfs_inactive,
62 .vop_reclaim = tmpfs_reclaim,
63 .vop_lock = tmpfs_lock,
64 .vop_unlock = tmpfs_unlock,
65 .vop_print = tmpfs_print,
66 .vop_islocked = tmpfs_islocked,
67 .vop_bwrite = tmpfs_bwrite,
68
69 /* XXX: Keep in sync with fifo_vops. */
70 .vop_lookup = vop_generic_lookup,
71 .vop_create = vop_generic_badop,
72 .vop_mknod = vop_generic_badop,
73 .vop_open = fifo_open,
74 .vop_close = fifo_close,
75 .vop_ioctl = fifo_ioctl,
76 .vop_kqfilter = fifo_kqfilter,
77 .vop_revoke = vop_generic_revoke,
78 .vop_remove = vop_generic_badop,
79 .vop_link = vop_generic_badop,
80 .vop_rename = vop_generic_badop,
81 .vop_mkdir = vop_generic_badop,
82 .vop_rmdir = vop_generic_badop,
83 .vop_symlink = vop_generic_badop,
84 .vop_readdir = vop_generic_badop,
85 .vop_readlink = vop_generic_badop,
86 .vop_abortop = vop_generic_badop,
87 .vop_bmap = vop_generic_bmap,
88 .vop_strategy = vop_generic_badop,
89 .vop_pathconf = fifo_pathconf,
90 .vop_advlock = fifo_advlock
91 };
92
93 int
tmpfs_fifo_read(void * v)94 tmpfs_fifo_read(void *v)
95 {
96 struct vop_read_args /* {
97 struct vnode *a_vp;
98 struct uio *a_uio;
99 int a_ioflag;
100 kauth_cred_t a_cred;
101 } */ *ap = v;
102 struct vnode *vp = ap->a_vp;
103
104 tmpfs_update(VP_TO_TMPFS_NODE(vp), TMPFS_NODE_ACCESSED);
105 return (fifo_read(v));
106 }
107
108 int
tmpfs_fifo_write(void * v)109 tmpfs_fifo_write(void *v)
110 {
111 struct vop_write_args /* {
112 struct vnode *a_vp;
113 struct uio *a_uio;
114 int a_ioflag;
115 kauth_cred_t a_cred;
116 } */ *ap = v;
117 struct vnode *vp = ap->a_vp;
118
119 tmpfs_update(VP_TO_TMPFS_NODE(vp), TMPFS_NODE_MODIFIED);
120 return (fifo_write(v));
121 }
122
123 int
tmpfs_fifo_fsync(void * v)124 tmpfs_fifo_fsync(void *v)
125 {
126 return (0);
127 }
128