Return to ufs_wapbl.c CVS log | Up to [cvs.NetBSD.org] / src / sys / ufs / ufs |
File: [cvs.NetBSD.org] / src / sys / ufs / ufs / Attic / ufs_wapbl.c (download)
Revision 1.23, Fri Jan 27 19:22:50 2012 UTC (12 years, 2 months ago) by para
converting readdir in ffs ext2fs from malloc(9) to kmem(9) while there allocate ufs mount structs from kmem(9) too preceding kmem-vmem-pool-patch releng@ acknowledged |
/* $NetBSD: ufs_wapbl.c,v 1.23 2012/01/27 19:22:50 para Exp $ */ /*- * Copyright (c) 2003,2006,2008 The NetBSD Foundation, Inc. * All rights reserved. * * This code is derived from software contributed to The NetBSD Foundation * by Wasabi Systems, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * Copyright (c) 1982, 1986, 1989, 1993, 1995 * The Regents of the University of California. All rights reserved. * (c) UNIX System Laboratories, Inc. * All or some portions of this file are derived from material licensed * to the University of California by American Telephone and Telegraph * Co. or Unix System Laboratories, Inc. and are reproduced herein with * the permission of UNIX System Laboratories, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * @(#)ufs_vnops.c 8.28 (Berkeley) 7/31/95 */ #include <sys/cdefs.h> __KERNEL_RCSID(0, "$NetBSD: ufs_wapbl.c,v 1.23 2012/01/27 19:22:50 para Exp $"); #include <sys/param.h> #include <sys/systm.h> #include <sys/namei.h> #include <sys/resourcevar.h> #include <sys/kernel.h> #include <sys/file.h> #include <sys/stat.h> #include <sys/buf.h> #include <sys/proc.h> #include <sys/mount.h> #include <sys/vnode.h> #include <sys/dirent.h> #include <sys/lockf.h> #include <sys/kauth.h> #include <sys/wapbl.h> #include <sys/fstrans.h> #include <miscfs/specfs/specdev.h> #include <miscfs/fifofs/fifo.h> #include <ufs/ufs/quota.h> #include <ufs/ufs/inode.h> #include <ufs/ufs/dir.h> #include <ufs/ufs/ufsmount.h> #include <ufs/ufs/ufs_bswap.h> #include <ufs/ufs/ufs_extern.h> #include <ufs/ufs/ufs_wapbl.h> #include <ufs/ext2fs/ext2fs_extern.h> #include <ufs/lfs/lfs_extern.h> #include <uvm/uvm.h> #ifdef WAPBL_DEBUG_INODES #error WAPBL_DEBUG_INODES: not functional before ufs_wapbl.c is updated void ufs_wapbl_verify_inodes(struct mount *mp, const char *str) { struct vnode *vp, *nvp; struct inode *ip; struct buf *bp, *nbp; mutex_enter(&mntvnode_lock); loop: TAILQ_FOREACH_REVERSE(vp, &mp->mnt_vnodelist, vnodelst, v_mntvnodes) { /* * If the vnode that we are about to sync is no longer * associated with this mount point, start over. */ if (vp->v_mount != mp) goto loop; mutex_enter(&vp->v_interlock); nvp = TAILQ_NEXT(vp, v_mntvnodes); ip = VTOI(vp); if (vp->v_type == VNON) { mutex_exit(&vp->v_interlock); continue; } /* verify that update has been called on all inodes */ if (ip->i_flag & (IN_CHANGE | IN_UPDATE)) { panic("wapbl_verify: mp %p: dirty vnode %p (inode %p): 0x%x\n", mp, vp, ip, ip->i_flag); } mutex_exit(&mntvnode_lock); mutex_enter(&bufcache_lock); for (bp = LIST_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) { nbp = LIST_NEXT(bp, b_vnbufs); if ((bp->b_cflags & BC_BUSY)) { continue; } KASSERT((bp->b_oflags & BO_DELWRI) != 0); KASSERT((bp->b_flags & B_LOCKED) != 0); } mutex_exit(&bufcache_lock); mutex_exit(&vp->v_interlock); mutex_enter(&mntvnode_lock); } mutex_exit(&mntvnode_lock); vp = VFSTOUFS(mp)->um_devvp; mutex_enter(&vp->v_interlock); mutex_enter(&bufcache_lock); for (bp = LIST_FIRST(&vp->v_dirtyblkhd); bp; bp = nbp) { nbp = LIST_NEXT(bp, b_vnbufs); if ((bp->b_cflags & BC_BUSY)) { continue; } KASSERT((bp->b_oflags & BO_DELWRI) != 0); KASSERT((bp->b_flags & B_LOCKED) != 0); } mutex_exit(&bufcache_lock); mutex_exit(&vp->v_interlock); } #endif /* WAPBL_DEBUG_INODES */