describe ap (Kirk); delete lfs_mntinvalbuf, lfs_vinvalbuf, add
[unix-history] / usr / src / sys / ufs / lfs / lfs_subr.c
index 269bf71..4e4d98c 100644 (file)
@@ -4,17 +4,17 @@
  *
  * %sccs.include.redist.c%
  *
  *
  * %sccs.include.redist.c%
  *
- *     @(#)lfs_subr.c  7.10 (Berkeley) %G%
+ *     @(#)lfs_subr.c  7.13 (Berkeley) %G%
  */
 
 #include <sys/param.h>
 #include <sys/namei.h>
 #include <sys/vnode.h>
 #include <sys/buf.h>
  */
 
 #include <sys/param.h>
 #include <sys/namei.h>
 #include <sys/vnode.h>
 #include <sys/buf.h>
+#include <sys/mount.h>
 
 #include <ufs/ufs/quota.h>
 #include <ufs/ufs/inode.h>
 
 #include <ufs/ufs/quota.h>
 #include <ufs/ufs/inode.h>
-
 #include <ufs/lfs/lfs.h>
 #include <ufs/lfs/lfs_extern.h>
 
 #include <ufs/lfs/lfs.h>
 #include <ufs/lfs/lfs_extern.h>
 
  * remaining space in the directory.
  */
 int
  * remaining space in the directory.
  */
 int
-lfs_blkatoff (ap)
-       struct vop_blkatoff_args *ap;
-#define vp (ap->a_vp)
-#define offset (ap->a_offset)
-#define res (ap->a_res)
-#define bpp (ap->a_bpp)
+lfs_blkatoff(ap)
+       struct vop_blkatoff_args /* {
+               struct vnode *a_vp;
+               off_t a_offset;
+               char **a_res;
+               struct buf **a_bpp;
+       } */ *ap;
 {
        register struct lfs *fs;
        struct inode *ip;
 {
        register struct lfs *fs;
        struct inode *ip;
@@ -37,22 +38,43 @@ lfs_blkatoff (ap)
        daddr_t lbn;
        int bsize, error;
 
        daddr_t lbn;
        int bsize, error;
 
-       ip = VTOI(vp);
+       ip = VTOI(ap->a_vp);
        fs = ip->i_lfs;
        fs = ip->i_lfs;
-       lbn = lblkno(fs, offset);
+       lbn = lblkno(fs, ap->a_offset);
        bsize = blksize(fs);
 
        bsize = blksize(fs);
 
-       *bpp = NULL;
-       if (error = bread(vp, lbn, bsize, NOCRED, &bp)) {
+       *ap->a_bpp = NULL;
+       if (error = bread(ap->a_vp, lbn, bsize, NOCRED, &bp)) {
                brelse(bp);
                return (error);
        }
                brelse(bp);
                return (error);
        }
-       if (res)
-               *res = bp->b_un.b_addr + blkoff(fs, offset);
-       *bpp = bp;
+       if (ap->a_res)
+               *ap->a_res = bp->b_un.b_addr + blkoff(fs, ap->a_offset);
+       *ap->a_bpp = bp;
        return (0);
 }
        return (0);
 }
-#undef vp
-#undef offset
-#undef res
-#undef bpp
+
+/*
+ * lfs_seglock --
+ *     Single thread the segment writer.
+ */
+void
+lfs_seglock(fs)
+       struct lfs *fs;
+{
+       while (fs->lfs_seglock)
+               (void)tsleep(&fs->lfs_seglock, PRIBIO + 1, "lfs seglock", 0);
+       fs->lfs_seglock = 1;
+}
+
+/*
+ * lfs_segunlock --
+ *     Single thread the segment writer.
+ */
+void
+lfs_segunlock(fs)
+       struct lfs *fs;
+{
+       fs->lfs_seglock = 0;
+       wakeup(&fs->lfs_seglock);       /* XXX: May not be necessary. */
+}