vfs_default.c revision 30489
130489Sphk/* 230489Sphk * Copyright (c) 1989, 1993 330489Sphk * The Regents of the University of California. All rights reserved. 430489Sphk * 530489Sphk * This code is derived from software contributed 630489Sphk * to Berkeley by John Heidemann of the UCLA Ficus project. 730489Sphk * 830489Sphk * Source: * @(#)i405_init.c 2.10 92/04/27 UCLA Ficus project 930489Sphk * 1030489Sphk * Redistribution and use in source and binary forms, with or without 1130489Sphk * modification, are permitted provided that the following conditions 1230489Sphk * are met: 1330489Sphk * 1. Redistributions of source code must retain the above copyright 1430489Sphk * notice, this list of conditions and the following disclaimer. 1530489Sphk * 2. Redistributions in binary form must reproduce the above copyright 1630489Sphk * notice, this list of conditions and the following disclaimer in the 1730489Sphk * documentation and/or other materials provided with the distribution. 1830489Sphk * 3. All advertising materials mentioning features or use of this software 1930489Sphk * must display the following acknowledgement: 2030489Sphk * This product includes software developed by the University of 2130489Sphk * California, Berkeley and its contributors. 2230489Sphk * 4. Neither the name of the University nor the names of its contributors 2330489Sphk * may be used to endorse or promote products derived from this software 2430489Sphk * without specific prior written permission. 2530489Sphk * 2630489Sphk * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 2730489Sphk * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 2830489Sphk * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 2930489Sphk * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 3030489Sphk * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 3130489Sphk * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 3230489Sphk * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 3330489Sphk * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 3430489Sphk * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 3530489Sphk * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 3630489Sphk * SUCH DAMAGE. 3730489Sphk * 3830489Sphk */ 3930489Sphk 4030489Sphk#include <sys/param.h> 4130489Sphk#include <sys/systm.h> 4230489Sphk#include <sys/kernel.h> 4330489Sphk#include <sys/mount.h> 4430489Sphk#include <sys/vnode.h> 4530489Sphk 4630489Sphkint vop_notsupp __P((struct vop_generic_args *ap)); 4730489Sphkstatic int vop_nostrategy __P((struct vop_strategy_args *)); 4830489Sphk 4930489Sphk/* 5030489Sphk * This vnode table stores what we want to do if the filesystem doesn't 5130489Sphk * implement a particular VOP. 5230489Sphk * 5330489Sphk * If there is no specific entry here, we will return EOPNOTSUPP. 5430489Sphk * 5530489Sphk */ 5630489Sphk 5730489Sphkvop_t **default_vnodeop_p; 5830489Sphkstatic struct vnodeopv_entry_desc default_vnodeop_entries[] = { 5930489Sphk { &vop_default_desc, (vop_t *) vop_notsupp }, 6030489Sphk { &vop_abortop_desc, (vop_t *) nullop }, 6130489Sphk { &vop_bwrite_desc, (vop_t *) vn_bwrite }, 6230489Sphk { &vop_lease_desc, (vop_t *) lease_check }, 6330489Sphk { &vop_poll_desc, (vop_t *) vop_nopoll }, 6430489Sphk { &vop_revoke_desc, (vop_t *) vop_revoke }, 6530489Sphk { &vop_strategy_desc, (vop_t *) vop_nostrategy }, 6630489Sphk { NULL, NULL } 6730489Sphk}; 6830489Sphk 6930489Sphkstatic struct vnodeopv_desc default_vnodeop_opv_desc = 7030489Sphk { &default_vnodeop_p, default_vnodeop_entries }; 7130489Sphk 7230489SphkVNODEOP_SET(default_vnodeop_opv_desc); 7330489Sphk 7430489Sphkint 7530489Sphkvop_notsupp(struct vop_generic_args *ap) 7630489Sphk{ 7730489Sphk /* 7830489Sphk printf("vn_notsupp[%s]\n", ap->a_desc->vdesc_name); 7930489Sphk */ 8030489Sphk 8130489Sphk return (EOPNOTSUPP); 8230489Sphk} 8330489Sphk 8430489Sphkint 8530489Sphkvn_defaultop(struct vop_generic_args *ap) 8630489Sphk{ 8730489Sphk 8830489Sphk return (VOCALL(default_vnodeop_p, ap->a_desc->vdesc_offset, ap)); 8930489Sphk} 9030489Sphk 9130489Sphk 9230489Sphkstatic int 9330489Sphkvop_nostrategy (struct vop_strategy_args *ap) 9430489Sphk{ 9530489Sphk printf("No strategy for buffer at %p\n", ap->a_bp); 9630489Sphk vprint("", ap->a_bp->b_vp); 9730489Sphk ap->a_bp->b_flags |= B_ERROR; 9830489Sphk ap->a_bp->b_error = EOPNOTSUPP; 9930489Sphk biodone(ap->a_bp); 10030489Sphk return (EOPNOTSUPP); 10130489Sphk} 102