1170808Sdelphij/*	$NetBSD: tmpfs_fifoops.c,v 1.5 2005/12/11 12:24:29 christos Exp $	*/
2170808Sdelphij
3182739Sdelphij/*-
4170808Sdelphij * Copyright (c) 2005 The NetBSD Foundation, Inc.
5170808Sdelphij * All rights reserved.
6170808Sdelphij *
7170808Sdelphij * This code is derived from software contributed to The NetBSD Foundation
8170808Sdelphij * by Julio M. Merino Vidal, developed as part of Google's Summer of Code
9170808Sdelphij * 2005 program.
10170808Sdelphij *
11170808Sdelphij * Redistribution and use in source and binary forms, with or without
12170808Sdelphij * modification, are permitted provided that the following conditions
13170808Sdelphij * are met:
14170808Sdelphij * 1. Redistributions of source code must retain the above copyright
15170808Sdelphij *    notice, this list of conditions and the following disclaimer.
16170808Sdelphij * 2. Redistributions in binary form must reproduce the above copyright
17170808Sdelphij *    notice, this list of conditions and the following disclaimer in the
18170808Sdelphij *    documentation and/or other materials provided with the distribution.
19170808Sdelphij *
20170808Sdelphij * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
21170808Sdelphij * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
22170808Sdelphij * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
23170808Sdelphij * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
24170808Sdelphij * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25170808Sdelphij * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26170808Sdelphij * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27170808Sdelphij * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28170808Sdelphij * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29170808Sdelphij * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30170808Sdelphij * POSSIBILITY OF SUCH DAMAGE.
31170808Sdelphij */
32170808Sdelphij
33170808Sdelphij/*
34170808Sdelphij * tmpfs vnode interface for named pipes.
35170808Sdelphij */
36170808Sdelphij#include <sys/cdefs.h>
37170808Sdelphij __FBSDID("$FreeBSD$");
38170808Sdelphij
39170808Sdelphij#include <sys/param.h>
40170808Sdelphij#include <sys/filedesc.h>
41170808Sdelphij#include <sys/proc.h>
42170808Sdelphij#include <sys/vnode.h>
43170808Sdelphij
44170808Sdelphij#include <vm/vm.h>
45170808Sdelphij#include <vm/vm_object.h>
46170808Sdelphij
47170808Sdelphij#include <fs/tmpfs/tmpfs.h>
48170808Sdelphij#include <fs/tmpfs/tmpfs_fifoops.h>
49170808Sdelphij#include <fs/tmpfs/tmpfs_vnops.h>
50170808Sdelphij
51170808Sdelphij/* --------------------------------------------------------------------- */
52170808Sdelphij
53171069Sdelphijstatic int
54170808Sdelphijtmpfs_fifo_kqfilter(struct vop_kqfilter_args *ap)
55170808Sdelphij{
56170808Sdelphij	struct vnode *vp;
57170808Sdelphij	struct tmpfs_node *node;
58170808Sdelphij
59170808Sdelphij	vp = ap->a_vp;
60170808Sdelphij	node = VP_TO_TMPFS_NODE(vp);
61170808Sdelphij
62170808Sdelphij	switch (ap->a_kn->kn_filter){
63170808Sdelphij	case EVFILT_READ:
64171070Sdelphij		node->tn_status |= TMPFS_NODE_ACCESSED;
65170808Sdelphij		break;
66170808Sdelphij	case EVFILT_WRITE:
67170808Sdelphij		node->tn_status |= TMPFS_NODE_MODIFIED;
68170808Sdelphij		break;
69170808Sdelphij	}
70171070Sdelphij
71170808Sdelphij	return fifo_specops.vop_kqfilter(ap);
72170808Sdelphij}
73170808Sdelphij
74170808Sdelphij/* --------------------------------------------------------------------- */
75170808Sdelphij
76171069Sdelphijstatic int
77170808Sdelphijtmpfs_fifo_close(struct vop_close_args *v)
78170808Sdelphij{
79170808Sdelphij	struct tmpfs_node *node;
80170808Sdelphij	node = VP_TO_TMPFS_NODE(v->a_vp);
81170808Sdelphij	node->tn_status |= TMPFS_NODE_ACCESSED;
82171070Sdelphij
83170808Sdelphij	tmpfs_update(v->a_vp);
84170808Sdelphij	return fifo_specops.vop_close(v);
85170808Sdelphij}
86171069Sdelphij
87171069Sdelphij/*
88171069Sdelphij * vnode operations vector used for fifos stored in a tmpfs file system.
89171069Sdelphij */
90171069Sdelphijstruct vop_vector tmpfs_fifoop_entries = {
91171069Sdelphij	.vop_default =			&fifo_specops,
92171069Sdelphij	.vop_close =			tmpfs_fifo_close,
93171069Sdelphij	.vop_reclaim =			tmpfs_reclaim,
94171069Sdelphij	.vop_access =			tmpfs_access,
95171069Sdelphij	.vop_getattr =			tmpfs_getattr,
96171069Sdelphij	.vop_setattr =			tmpfs_setattr,
97171069Sdelphij	.vop_kqfilter =			tmpfs_fifo_kqfilter,
98171069Sdelphij};
99171069Sdelphij
100