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