1 1.13 riastrad /* $NetBSD: dead_vfsops.c,v 1.13 2022/10/26 23:39:43 riastradh Exp $ */ 2 1.1 hannken 3 1.1 hannken /*- 4 1.1 hannken * Copyright (c) 2014 The NetBSD Foundation, Inc. 5 1.1 hannken * All rights reserved. 6 1.1 hannken * 7 1.1 hannken * This code is derived from software contributed to The NetBSD Foundation 8 1.1 hannken * by Juergen Hannken-Illjes. 9 1.1 hannken * 10 1.1 hannken * Redistribution and use in source and binary forms, with or without 11 1.1 hannken * modification, are permitted provided that the following conditions 12 1.1 hannken * are met: 13 1.1 hannken * 1. Redistributions of source code must retain the above copyright 14 1.1 hannken * notice, this list of conditions and the following disclaimer. 15 1.1 hannken * 2. Redistributions in binary form must reproduce the above copyright 16 1.1 hannken * notice, this list of conditions and the following disclaimer in the 17 1.1 hannken * documentation and/or other materials provided with the distribution. 18 1.1 hannken * 19 1.1 hannken * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 20 1.1 hannken * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 21 1.1 hannken * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 22 1.1 hannken * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 23 1.1 hannken * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 24 1.1 hannken * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 25 1.1 hannken * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 26 1.1 hannken * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 27 1.1 hannken * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 28 1.1 hannken * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 29 1.1 hannken * POSSIBILITY OF SUCH DAMAGE. 30 1.1 hannken */ 31 1.1 hannken 32 1.1 hannken #include <sys/cdefs.h> 33 1.13 riastrad __KERNEL_RCSID(0, "$NetBSD: dead_vfsops.c,v 1.13 2022/10/26 23:39:43 riastradh Exp $"); 34 1.1 hannken 35 1.1 hannken #include <sys/param.h> 36 1.1 hannken #include <sys/systm.h> 37 1.1 hannken #include <sys/vnode.h> 38 1.1 hannken #include <sys/mount.h> 39 1.1 hannken 40 1.13 riastrad #include <miscfs/deadfs/deadfs.h> 41 1.3 hannken #include <miscfs/specfs/specdev.h> 42 1.3 hannken 43 1.3 hannken VFS_PROTOS(dead); 44 1.3 hannken 45 1.3 hannken static void dead_panic(void); 46 1.3 hannken 47 1.1 hannken static const struct vnodeopv_desc * const dead_vnodeopv_descs[] = { 48 1.1 hannken &dead_vnodeop_opv_desc, 49 1.1 hannken NULL 50 1.1 hannken }; 51 1.1 hannken 52 1.3 hannken struct mount *dead_rootmount; 53 1.1 hannken 54 1.1 hannken struct vfsops dead_vfsops = { 55 1.2 hannken .vfs_name = "dead", 56 1.2 hannken .vfs_min_mount_data = 0, 57 1.2 hannken .vfs_mount = (void *)dead_panic, 58 1.2 hannken .vfs_start = (void *)dead_panic, 59 1.2 hannken .vfs_unmount = (void *)dead_panic, 60 1.2 hannken .vfs_root = (void *)dead_panic, 61 1.2 hannken .vfs_quotactl = (void *)dead_panic, 62 1.12 hannken .vfs_statvfs = (void *)eopnotsupp, 63 1.2 hannken .vfs_sync = (void *)dead_panic, 64 1.2 hannken .vfs_vget = (void *)dead_panic, 65 1.4 hannken .vfs_loadvnode = (void *)dead_panic, 66 1.4 hannken .vfs_newvnode = dead_newvnode, 67 1.2 hannken .vfs_fhtovp = (void *)dead_panic, 68 1.12 hannken .vfs_vptofh = (void *)eopnotsupp, 69 1.2 hannken .vfs_init = (void *)dead_panic, 70 1.2 hannken .vfs_reinit = (void *)dead_panic, 71 1.2 hannken .vfs_done = (void *)dead_panic, 72 1.2 hannken .vfs_mountroot = (void *)dead_panic, 73 1.2 hannken .vfs_snapshot = (void *)dead_panic, 74 1.2 hannken .vfs_extattrctl = (void *)dead_panic, 75 1.2 hannken .vfs_suspendctl = (void *)dead_panic, 76 1.2 hannken .vfs_renamelock_enter = (void *)dead_panic, 77 1.2 hannken .vfs_renamelock_exit = (void *)dead_panic, 78 1.2 hannken .vfs_fsync = (void *)eopnotsupp, 79 1.2 hannken .vfs_opv_descs = dead_vnodeopv_descs 80 1.1 hannken }; 81 1.3 hannken 82 1.3 hannken static void 83 1.3 hannken dead_panic(void) 84 1.3 hannken { 85 1.3 hannken 86 1.3 hannken panic("dead fs operation used"); 87 1.3 hannken } 88 1.4 hannken 89 1.4 hannken /* 90 1.4 hannken * Create a new anonymous device vnode. 91 1.4 hannken */ 92 1.4 hannken int 93 1.4 hannken dead_newvnode(struct mount *mp, struct vnode *dvp, struct vnode *vp, 94 1.9 hannken struct vattr *vap, kauth_cred_t cred, void *extra, 95 1.4 hannken size_t *key_len, const void **new_key) 96 1.4 hannken { 97 1.4 hannken 98 1.4 hannken KASSERT(mp == dead_rootmount); 99 1.4 hannken KASSERT(dvp == NULL); 100 1.4 hannken KASSERT(vap->va_type == VCHR || vap->va_type == VBLK); 101 1.4 hannken KASSERT(vap->va_rdev != VNOVAL); 102 1.4 hannken 103 1.4 hannken vp->v_tag = VT_NON; 104 1.4 hannken vp->v_type = vap->va_type; 105 1.4 hannken vp->v_op = spec_vnodeop_p; 106 1.11 hannken vp->v_vflag |= VV_MPSAFE; 107 1.4 hannken uvm_vnp_setsize(vp, 0); 108 1.4 hannken spec_node_init(vp, vap->va_rdev); 109 1.4 hannken 110 1.8 hannken *key_len = 0; 111 1.8 hannken *new_key = NULL; 112 1.4 hannken 113 1.4 hannken return 0; 114 1.4 hannken } 115