File:  [DragonFly] / src / share / man / man9 / VOP_FSYNC.9
Revision 1.4: download - view: text, annotated - select for diffs
Tue Jun 1 11:36:53 2004 UTC (10 years, 5 months ago) by hmp
Branches: MAIN
CVS tags: HEAD, DragonFly_Stable, DragonFly_Snap29Sep2004, DragonFly_Snap13Sep2004, DragonFly_RELEASE_1_4_Slip, DragonFly_RELEASE_1_4, DragonFly_RELEASE_1_2_Slip, DragonFly_RELEASE_1_2, DragonFly_1_0_REL, DragonFly_1_0_RC1, DragonFly_1_0A_REL
Remove '-*- nroff -*-'.

Lets make a habit not to put editor-related magic into our base
files.  They are redundant and useless.

    1: .\" Copyright (c) 1996 Doug Rabson
    2: .\"
    3: .\" All rights reserved.
    4: .\"
    5: .\" This program is free software.
    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: .\"
   16: .\" THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY EXPRESS OR
   17: .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   18: .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
   19: .\" IN NO EVENT SHALL THE DEVELOPERS BE LIABLE FOR ANY DIRECT, INDIRECT,
   20: .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
   21: .\" NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
   22: .\" DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
   23: .\" THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
   24: .\" (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
   25: .\" THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
   26: .\"
   27: .\" $FreeBSD: src/share/man/man9/VOP_FSYNC.9,v 1.6.2.2 2001/12/17 11:30:18 ru Exp $
   28: .\" $DragonFly: src/share/man/man9/VOP_FSYNC.9,v 1.4 2004/06/01 11:36:53 hmp Exp $
   29: .\"
   30: .Dd July 24, 1996
   31: .Os
   32: .Dt VOP_FSYNC 9
   33: .Sh NAME
   34: .Nm VOP_FSYNC
   35: .Nd flush filesystem buffers for a file
   36: .Sh SYNOPSIS
   37: .In sys/param.h
   38: .In sys/vnode.h
   39: .Ft int
   40: .Fn VOP_FSYNC "struct vnode *vp" "struct ucred *cred" "int waitfor" "struct proc *p"
   41: .Sh DESCRIPTION
   42: This call flushes any dirty filesystem buffers for the file.
   43: It is used to implement the
   44: .Xr sync 2
   45: and
   46: .Xr fsync 2
   47: system calls.
   48: .Pp
   49: Its arguments are:
   50: .Bl -tag -width waitfor
   51: .It Ar vp
   52: the vnode of the file
   53: .It Ar cred
   54: the caller's credentials
   55: .It Ar waitfor
   56: whether the function should wait for I/O to complete
   57: .It Ar p
   58: the calling process
   59: .El
   60: .Pp
   61: The argument
   62: .Fa waitfor
   63: is either
   64: .Dv MNT_WAIT
   65: or
   66: .Dv MNT_NOWAIT
   67: and specifies whether or not the function should wait for the writes
   68: to finish before returning.
   69: .Sh LOCKS
   70: The file should be locked on entry.
   71: .Sh RETURN VALUES
   72: Zero is returned if the call is successful, otherwise an appropriate
   73: error code is returned.
   74: .Sh PSEUDOCODE
   75: .Bd -literal
   76: int
   77: vop_fsync(struct vnode *vp, struct ucred *cred, int waitfor, struct proc *p)
   78: {
   79:     struct buf *bp;
   80:     struct buf *nbp;
   81:     struct timeval tv;
   82:     int s;
   83: 
   84: loop:
   85:     s = splbio();
   86:     for (bp = vp->v_dirtyblkhd.lh_first; bp; bp = nbp) {
   87: 	nbp = bp->b_vnbufs.le_next;
   88: 
   89: 	/*
   90: 	 * Ignore buffers which are already being written.
   91: 	 */
   92: 	if (bp->b_flags & B_BUSY)
   93: 	    continue;
   94: 
   95: 	/*
   96: 	 * Make sure the buffer is dirty.
   97: 	 */
   98: 	if ((bp->b_flags & B_DELWRI) == 0)
   99: 	    panic("vop_fsync: not dirty");
  100: 
  101: 	vfs_bio_awrite(bp);
  102: 	splx(s);
  103: 	goto loop;
  104:     }
  105:     splx(s);
  106: 
  107:     if (waitfor == MNT_WAIT) {
  108: 	s = splbio();
  109: 	while (vp->v_numoutput) {
  110: 	    vp->v_flag |= VBWAIT;
  111: 	    tsleep((caddr_t)&vp->v_numoutput, 0, "vopfsn");
  112: 	}
  113: 	splx(s);
  114: #ifdef DIAGNOSTIC
  115: 	if (vp->v_dirtyblkhd.lh_first) {
  116: 	    vprint("vop_fsync: dirty", vp);
  117: 	    goto loop;
  118: 	}
  119: #endif
  120:     }
  121: 
  122:     /*
  123:      * Write out the on-disc version of the vnode.
  124:      */
  125:     tv = time;
  126:     return VOP_UPDATE(vp, &tv, &tv, waitfor == MNT_WAIT);
  127: }
  128: .Ed
  129: .Sh ERRORS
  130: .Bl -tag -width Er
  131: .It Bq Er ENOSPC
  132: The filesystem is full.
  133: .It Bq Er EDQUOT
  134: Quota exceeded.
  135: .El
  136: .Sh SEE ALSO
  137: .Xr vnode 9
  138: .Sh AUTHORS
  139: This man page was written by
  140: .An Doug Rabson .