1*26784725Sriastradh /* $NetBSD: dead_vfsops.c,v 1.13 2022/10/26 23:39:43 riastradh Exp $ */
2d940ddccShannken
3d940ddccShannken /*-
4d940ddccShannken * Copyright (c) 2014 The NetBSD Foundation, Inc.
5d940ddccShannken * All rights reserved.
6d940ddccShannken *
7d940ddccShannken * This code is derived from software contributed to The NetBSD Foundation
8d940ddccShannken * by Juergen Hannken-Illjes.
9d940ddccShannken *
10d940ddccShannken * Redistribution and use in source and binary forms, with or without
11d940ddccShannken * modification, are permitted provided that the following conditions
12d940ddccShannken * are met:
13d940ddccShannken * 1. Redistributions of source code must retain the above copyright
14d940ddccShannken * notice, this list of conditions and the following disclaimer.
15d940ddccShannken * 2. Redistributions in binary form must reproduce the above copyright
16d940ddccShannken * notice, this list of conditions and the following disclaimer in the
17d940ddccShannken * documentation and/or other materials provided with the distribution.
18d940ddccShannken *
19d940ddccShannken * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
20d940ddccShannken * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
21d940ddccShannken * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
22d940ddccShannken * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
23d940ddccShannken * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24d940ddccShannken * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25d940ddccShannken * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26d940ddccShannken * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27d940ddccShannken * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28d940ddccShannken * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29d940ddccShannken * POSSIBILITY OF SUCH DAMAGE.
30d940ddccShannken */
31d940ddccShannken
32d940ddccShannken #include <sys/cdefs.h>
33*26784725Sriastradh __KERNEL_RCSID(0, "$NetBSD: dead_vfsops.c,v 1.13 2022/10/26 23:39:43 riastradh Exp $");
34d940ddccShannken
35d940ddccShannken #include <sys/param.h>
36d940ddccShannken #include <sys/systm.h>
37d940ddccShannken #include <sys/vnode.h>
38d940ddccShannken #include <sys/mount.h>
39d940ddccShannken
40*26784725Sriastradh #include <miscfs/deadfs/deadfs.h>
41142e4ca5Shannken #include <miscfs/specfs/specdev.h>
42142e4ca5Shannken
43142e4ca5Shannken VFS_PROTOS(dead);
44142e4ca5Shannken
45142e4ca5Shannken static void dead_panic(void);
46142e4ca5Shannken
47d940ddccShannken static const struct vnodeopv_desc * const dead_vnodeopv_descs[] = {
48d940ddccShannken &dead_vnodeop_opv_desc,
49d940ddccShannken NULL
50d940ddccShannken };
51d940ddccShannken
52142e4ca5Shannken struct mount *dead_rootmount;
53d940ddccShannken
54d940ddccShannken struct vfsops dead_vfsops = {
556d285189Shannken .vfs_name = "dead",
566d285189Shannken .vfs_min_mount_data = 0,
576d285189Shannken .vfs_mount = (void *)dead_panic,
586d285189Shannken .vfs_start = (void *)dead_panic,
596d285189Shannken .vfs_unmount = (void *)dead_panic,
606d285189Shannken .vfs_root = (void *)dead_panic,
616d285189Shannken .vfs_quotactl = (void *)dead_panic,
624c6398a9Shannken .vfs_statvfs = (void *)eopnotsupp,
636d285189Shannken .vfs_sync = (void *)dead_panic,
646d285189Shannken .vfs_vget = (void *)dead_panic,
654e19d4c7Shannken .vfs_loadvnode = (void *)dead_panic,
664e19d4c7Shannken .vfs_newvnode = dead_newvnode,
676d285189Shannken .vfs_fhtovp = (void *)dead_panic,
684c6398a9Shannken .vfs_vptofh = (void *)eopnotsupp,
696d285189Shannken .vfs_init = (void *)dead_panic,
706d285189Shannken .vfs_reinit = (void *)dead_panic,
716d285189Shannken .vfs_done = (void *)dead_panic,
726d285189Shannken .vfs_mountroot = (void *)dead_panic,
736d285189Shannken .vfs_snapshot = (void *)dead_panic,
746d285189Shannken .vfs_extattrctl = (void *)dead_panic,
756d285189Shannken .vfs_suspendctl = (void *)dead_panic,
766d285189Shannken .vfs_renamelock_enter = (void *)dead_panic,
776d285189Shannken .vfs_renamelock_exit = (void *)dead_panic,
786d285189Shannken .vfs_fsync = (void *)eopnotsupp,
796d285189Shannken .vfs_opv_descs = dead_vnodeopv_descs
80d940ddccShannken };
81142e4ca5Shannken
82142e4ca5Shannken static void
dead_panic(void)83142e4ca5Shannken dead_panic(void)
84142e4ca5Shannken {
85142e4ca5Shannken
86142e4ca5Shannken panic("dead fs operation used");
87142e4ca5Shannken }
884e19d4c7Shannken
894e19d4c7Shannken /*
904e19d4c7Shannken * Create a new anonymous device vnode.
914e19d4c7Shannken */
924e19d4c7Shannken int
dead_newvnode(struct mount * mp,struct vnode * dvp,struct vnode * vp,struct vattr * vap,kauth_cred_t cred,void * extra,size_t * key_len,const void ** new_key)934e19d4c7Shannken dead_newvnode(struct mount *mp, struct vnode *dvp, struct vnode *vp,
94b689ec0fShannken struct vattr *vap, kauth_cred_t cred, void *extra,
954e19d4c7Shannken size_t *key_len, const void **new_key)
964e19d4c7Shannken {
974e19d4c7Shannken
984e19d4c7Shannken KASSERT(mp == dead_rootmount);
994e19d4c7Shannken KASSERT(dvp == NULL);
1004e19d4c7Shannken KASSERT(vap->va_type == VCHR || vap->va_type == VBLK);
1014e19d4c7Shannken KASSERT(vap->va_rdev != VNOVAL);
1024e19d4c7Shannken
1034e19d4c7Shannken vp->v_tag = VT_NON;
1044e19d4c7Shannken vp->v_type = vap->va_type;
1054e19d4c7Shannken vp->v_op = spec_vnodeop_p;
1069ea3b23dShannken vp->v_vflag |= VV_MPSAFE;
1074e19d4c7Shannken uvm_vnp_setsize(vp, 0);
1084e19d4c7Shannken spec_node_init(vp, vap->va_rdev);
1094e19d4c7Shannken
1107801661cShannken *key_len = 0;
1117801661cShannken *new_key = NULL;
1124e19d4c7Shannken
1134e19d4c7Shannken return 0;
1144e19d4c7Shannken }
115