The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Интерактивная система просмотра системных руководств (man-ов)

 ТемаНаборКатегория 
 
 [Cписок руководств | Печать]

VOP_FSYNC (9)
  • >> VOP_FSYNC (9) ( FreeBSD man: Ядро )

  • BSD mandoc
     

    NAME

    VOP_FSYNC
    
     - flush file system buffers for a file
    
     
    

    SYNOPSIS

       #include <sys/param.h>
       #include <sys/vnode.h>
    int VOP_FSYNC (struct vnode *vp int waitfor struct thread *td);
     

    DESCRIPTION

    This call flushes any dirty file system buffers for the file. It is used to implement the sync(2) and fsync(2) system calls.

    Its arguments are:

    Fa vp
    The vnode of the file.
    Fa waitfor
    Whether the function should wait for I/O to complete. Possible values are:

    MNT_WAIT
    Synchronously wait for I/O to complete.
    MNT_NOWAIT
    Start all I/O, but do not wait for it.
    MNT_LAZY
    Push data not written by file system syncer.

    Fa td
    The calling thread.

    The argument Fa waitfor is either MNT_WAIT or MNT_NOWAIT and specifies whether or not the function should wait for the writes to finish before returning.  

    LOCKS

    The file should be locked on entry.  

    RETURN VALUES

    Zero is returned if the call is successful, otherwise an appropriate error code is returned.  

    PSEUDOCODE

    int
    vop_fsync(struct vnode *vp, int waitfor, struct thread *td)
    {
        struct buf *bp;
        struct buf *nbp;
        struct timeval tv;
        int s;
    
    loop:
        s = splbio();
        for (bp = vp->v_dirtyblkhd.lh_first; bp; bp = nbp) {
            nbp = bp->b_vnbufs.le_next;
    
            /*
             * Ignore buffers which are already being written.
             */
            if (bp->b_flags & B_BUSY)
                continue;
    
            /*
             * Make sure the buffer is dirty.
             */
            if ((bp->b_flags & B_DELWRI) == 0)
                panic("vop_fsync: not dirty");
    
            vfs_bio_awrite(bp);
            splx(s);
            goto loop;
        }
        splx(s);
    
        if (waitfor == MNT_WAIT) {
            s = splbio();
            while (vp->v_numoutput) {
                vp->v_flag |= VBWAIT;
                tsleep((caddr_t)&vp->v_numoutput, PRIBIO + 1, "vopfsn");
            }
            splx(s);
    #ifdef DIAGNOSTIC
            if (vp->v_dirtyblkhd.lh_first) {
                vprint("vop_fsync: dirty", vp);
                goto loop;
            }
    #endif
        }
    
        /*
         * Write out the on-disc version of the vnode.
         */
        tv = time;
        return VOP_UPDATE(vp, &tv, &tv, waitfor == MNT_WAIT);
    }
    
     

    ERRORS

    Bq Er ENOSPC
    The file system is full.
    Bq Er EDQUOT
    Quota exceeded.

     

    SEE ALSO

    vnode(9)  

    AUTHORS

    This manual page was written by An Doug Rabson .


     

    Index

    NAME
    SYNOPSIS
    DESCRIPTION
    LOCKS
    RETURN VALUES
    PSEUDOCODE
    ERRORS
    SEE ALSO
    AUTHORS


    Поиск по тексту MAN-ов: 




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру