The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/ufs/ext2fs/ext2fs_subr.c

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    1 /*      $NetBSD: ext2fs_subr.c,v 1.13 2004/03/22 19:23:08 bouyer Exp $  */
    2 
    3 /*
    4  * Copyright (c) 1982, 1986, 1989, 1993
    5  *      The Regents of the University of California.  All rights reserved.
    6  *
    7  * Redistribution and use in source and binary forms, with or without
    8  * modification, are permitted provided that the following conditions
    9  * are met:
   10  * 1. Redistributions of source code must retain the above copyright
   11  *    notice, this list of conditions and the following disclaimer.
   12  * 2. Redistributions in binary form must reproduce the above copyright
   13  *    notice, this list of conditions and the following disclaimer in the
   14  *    documentation and/or other materials provided with the distribution.
   15  * 3. Neither the name of the University nor the names of its contributors
   16  *    may be used to endorse or promote products derived from this software
   17  *    without specific prior written permission.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
   20  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   22  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
   23  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
   24  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
   25  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
   26  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
   27  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
   28  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   29  * SUCH DAMAGE.
   30  *
   31  *      @(#)ffs_subr.c  8.2 (Berkeley) 9/21/93
   32  * Modified for ext2fs by Manuel Bouyer.
   33  */
   34 
   35 /*
   36  * Copyright (c) 1997 Manuel Bouyer.
   37  *
   38  * Redistribution and use in source and binary forms, with or without
   39  * modification, are permitted provided that the following conditions
   40  * are met:
   41  * 1. Redistributions of source code must retain the above copyright
   42  *    notice, this list of conditions and the following disclaimer.
   43  * 2. Redistributions in binary form must reproduce the above copyright
   44  *    notice, this list of conditions and the following disclaimer in the
   45  *    documentation and/or other materials provided with the distribution.
   46  * 3. All advertising materials mentioning features or use of this software
   47  *    must display the following acknowledgement:
   48  *      This product includes software developed by Manuel Bouyer.
   49  * 4. The name of the author may not be used to endorse or promote products
   50  *    derived from this software without specific prior written permission.
   51  *
   52  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
   53  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   54  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   55  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
   56  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   57  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   58  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   59  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   60  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   61  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   62  *
   63  *      @(#)ffs_subr.c  8.2 (Berkeley) 9/21/93
   64  * Modified for ext2fs by Manuel Bouyer.
   65  */
   66 
   67 #include <sys/cdefs.h>
   68 __KERNEL_RCSID(0, "$NetBSD: ext2fs_subr.c,v 1.13 2004/03/22 19:23:08 bouyer Exp $");
   69 
   70 #include <sys/param.h>
   71 #include <sys/systm.h>
   72 #include <sys/vnode.h>
   73 #include <sys/buf.h>
   74 #include <sys/inttypes.h>
   75 #include <ufs/ufs/inode.h>
   76 #include <ufs/ext2fs/ext2fs.h>
   77 #include <ufs/ext2fs/ext2fs_extern.h>
   78 
   79 /*
   80  * Return buffer with the contents of block "offset" from the beginning of
   81  * directory "ip".  If "res" is non-zero, fill it in with a pointer to the
   82  * remaining space in the directory.
   83  */
   84 int
   85 ext2fs_blkatoff(v)
   86         void *v;
   87 {
   88         struct vop_blkatoff_args /* {
   89                 struct vnode *a_vp;
   90                 off_t a_offset;
   91                 char **a_res;
   92                 struct buf **a_bpp;
   93         } */ *ap = v;
   94         struct inode *ip;
   95         struct m_ext2fs *fs;
   96         struct buf *bp;
   97         daddr_t lbn;
   98         int error;
   99 
  100         ip = VTOI(ap->a_vp);
  101         fs = ip->i_e2fs;
  102         lbn = lblkno(fs, ap->a_offset);
  103 
  104         *ap->a_bpp = NULL;
  105         if ((error = bread(ap->a_vp, lbn, fs->e2fs_bsize, NOCRED, &bp)) != 0) {
  106                 brelse(bp);
  107                 return (error);
  108         }
  109         if (ap->a_res)
  110                 *ap->a_res = (char *)bp->b_data + blkoff(fs, ap->a_offset);
  111         *ap->a_bpp = bp;
  112         return (0);
  113 }
  114 
  115 #ifdef DIAGNOSTIC
  116 void
  117 ext2fs_checkoverlap(bp, ip)
  118         struct buf *bp;
  119         struct inode *ip;
  120 {
  121 #if 0
  122         struct buf *ebp, *ep;
  123         daddr_t start, last;
  124         struct vnode *vp;
  125 
  126         ebp = &buf[nbuf];
  127         start = bp->b_blkno;
  128         last = start + btodb(bp->b_bcount) - 1;
  129         for (ep = buf; ep < ebp; ep++) {
  130                 if (ep == bp || (ep->b_flags & B_INVAL) ||
  131                         ep->b_vp == NULLVP)
  132                         continue;
  133                 if (VOP_BMAP(ep->b_vp, (daddr_t)0, &vp, (daddr_t)0, NULL))
  134                         continue;
  135                 if (vp != ip->i_devvp)
  136                         continue;
  137                 /* look for overlap */
  138                 if (ep->b_bcount == 0 || ep->b_blkno > last ||
  139                         ep->b_blkno + btodb(ep->b_bcount) <= start)
  140                         continue;
  141                 vprint("Disk overlap", vp);
  142                 printf("\tstart %" PRId64 ", end %" PRId64 " overlap start "
  143                         "%" PRId64 ", end %" PRId64 "\n",
  144                         start, last, ep->b_blkno,
  145                         ep->b_blkno + btodb(ep->b_bcount) - 1);
  146                 panic("Disk buffer overlap");
  147         }
  148 #else
  149         printf("ext2fs_checkoverlap disabled due to buffer cache implementation changes\n");
  150 #endif
  151 }
  152 #endif

Cache object: 711ebafb11990eb931d069947beaca88


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.