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/sys/mountctl.h

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 /*
    2  * Copyright (c) 2004 The DragonFly Project.  All rights reserved.
    3  * 
    4  * This code is derived from software contributed to The DragonFly Project
    5  * by Matthew Dillon <dillon@backplane.com>
    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  * 
   11  * 1. Redistributions of source code must retain the above copyright
   12  *    notice, this list of conditions and the following disclaimer.
   13  * 2. Redistributions in binary form must reproduce the above copyright
   14  *    notice, this list of conditions and the following disclaimer in
   15  *    the documentation and/or other materials provided with the
   16  *    distribution.
   17  * 3. Neither the name of The DragonFly Project nor the names of its
   18  *    contributors may be used to endorse or promote products derived
   19  *    from this software without specific, prior written permission.
   20  * 
   21  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
   22  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
   23  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
   24  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE
   25  * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
   26  * INCIDENTAL, SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING,
   27  * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
   28  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
   29  * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   30  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   31  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   32  * SUCH DAMAGE.
   33  *
   34  * $DragonFly: src/sys/sys/mountctl.h,v 1.15 2008/06/01 19:27:37 dillon Exp $
   35  */
   36 
   37 #ifndef _SYS_MOUNTCTL_H_
   38 #define _SYS_MOUNTCTL_H_
   39 
   40 #ifndef _SYS_TYPES_H_
   41 #include <sys/types.h>
   42 #endif
   43 #ifndef _SYS_TIME_H_
   44 #include <sys/time.h>
   45 #endif
   46 #ifndef _SYS_QUEUE_H_
   47 #include <sys/queue.h>
   48 #endif
   49 
   50 #ifdef _KERNEL
   51 
   52 #ifndef _SYS_THREAD_H_
   53 #include <sys/thread.h>
   54 #endif
   55 #ifndef _SYS_MALLOC_H_
   56 #include <sys/malloc.h>
   57 #endif
   58 
   59 #endif
   60 
   61 /*
   62  * General constants
   63  */
   64 
   65 #define JIDMAX          32      /* id string buf[] size (incls \0) */
   66 
   67 #define MOUNTCTL_INSTALL_VFS_JOURNAL    1
   68 #define MOUNTCTL_REMOVE_VFS_JOURNAL     2
   69 #define MOUNTCTL_RESYNC_VFS_JOURNAL     3
   70 #define MOUNTCTL_STATUS_VFS_JOURNAL     4
   71 #define MOUNTCTL_RESTART_VFS_JOURNAL    5
   72 
   73 #define MOUNTCTL_INSTALL_BLK_JOURNAL    8
   74 #define MOUNTCTL_REMOVE_BLK_JOURNAL     9
   75 #define MOUNTCTL_RESYNC_BLK_JOURNAL     10
   76 #define MOUNTCTL_STATUS_BLK_JOURNAL     11
   77 
   78 #define MOUNTCTL_SET_EXPORT             16      /* sys/mount.h:export_args */
   79 #define MOUNTCTL_STATVFS                17      /* get extended stats */
   80 #define MOUNTCTL_MOUNTFLAGS             18      /* extract mountflags */
   81 
   82 /*
   83  * Data structures for the journaling API
   84  */
   85 
   86 struct mountctl_install_journal {
   87         char    id[JIDMAX];
   88         int     flags;          /* journaling flags */
   89         int     unused01;
   90         int64_t membufsize;     /* backing store */
   91         int64_t swapbufsize;    /* backing store */
   92         int64_t transid;        /* starting with specified transaction id */
   93         int64_t unused02;
   94         int     stallwarn;      /* stall warning (seconds) */
   95         int     stallerror;     /* stall error (seconds) */
   96         int     unused03;
   97         int     unused04;
   98 };
   99 
  100 #define MC_JOURNAL_UNUSED0001           0x00000001
  101 #define MC_JOURNAL_STOP_REQ             0x00000002      /* stop request pend */
  102 #define MC_JOURNAL_STOP_IMM             0x00000004      /* STOP+trash fifo */
  103 #define MC_JOURNAL_WACTIVE              0x00000008      /* wthread running */
  104 #define MC_JOURNAL_RACTIVE              0x00000010      /* rthread running */
  105 #define MC_JOURNAL_WWAIT                0x00000040      /* write stall */
  106 #define MC_JOURNAL_WANT_AUDIT           0x00010000      /* audit trail */
  107 #define MC_JOURNAL_WANT_REVERSABLE      0x00020000      /* reversable stream */
  108 #define MC_JOURNAL_WANT_FULLDUPLEX      0x00040000      /* has ack stream */
  109 
  110 struct mountctl_restart_journal {
  111         char    id[JIDMAX];
  112         int     flags;
  113         int     unused01;
  114 };
  115 
  116 struct mountctl_remove_journal {
  117         char    id[JIDMAX];
  118         int     flags;
  119 };
  120 
  121 #define MC_JOURNAL_REMOVE_TRASH         0x00000001      /* data -> trash */
  122 #define MC_JOURNAL_REMOVE_ASSYNC        0x00000002      /* asynchronous op */
  123 
  124 struct mountctl_status_journal {
  125         char    id[JIDMAX];
  126         int     index;
  127 };
  128 
  129 #define MC_JOURNAL_INDEX_ALL            -2
  130 #define MC_JOURNAL_INDEX_ID             -1
  131 
  132 struct mountctl_journal_ret_status {
  133         int     recsize;
  134         char    id[JIDMAX];
  135         int     index;
  136         int     flags;
  137         int64_t membufsize;
  138         int64_t membufused;
  139         int64_t membufunacked;
  140         int64_t swapbufsize;
  141         int64_t swapbufused;
  142         int64_t swapbufunacked;
  143         int64_t transidstart;
  144         int64_t transidcurrent;
  145         int64_t transidunacked;
  146         int64_t transidacked;
  147         int64_t bytessent;
  148         int64_t bytesacked;
  149         int64_t fifostalls;
  150         int64_t reserved[4];
  151         struct timeval lastack;
  152 };
  153 
  154 #define MC_JOURNAL_STATUS_MORETOCOME    0x00000001
  155 
  156 #if defined(_KERNEL) || defined(_KERNEL_STRUCTURES)
  157 
  158 /*
  159  * Support structures for the generic journaling structure
  160  */
  161 struct journal_memfifo {
  162         int     size;           /* size (power of two) */
  163         int     mask;           /* index mask (size - 1) */
  164         int     rindex;         /* stream reader index (track fd writes) */
  165         int     xindex;         /* last acked / reader restart */
  166         int     windex;         /* stream writer index */
  167         char    *membase;       /* memory buffer representing the FIFO */
  168 };
  169 
  170 /*
  171  * Generic journaling structure attached to a mount point.
  172  */
  173 struct journal {
  174         TAILQ_ENTRY(journal) jentry;
  175         struct file     *fp;
  176         char            id[JIDMAX];
  177         int             flags;          /* journaling flags */
  178         int64_t         transid;
  179         int64_t         total_acked;
  180         int64_t         fifostalls;
  181         struct journal_memfifo fifo;
  182         struct thread   wthread;
  183         struct thread   rthread;
  184 };
  185 
  186 
  187 /*
  188  * The jrecord structure is used to build a journaling transaction.  Since
  189  * a single journaling transaction might encompass very large buffers it 
  190  * is possible for multiple transactions to be written out to the FIFO
  191  * in parallel and in peacemeal.
  192  */
  193 struct jrecord {
  194         struct journal  *jo;
  195         char            *stream_ptr;
  196         int             stream_residual;
  197         int             stream_reserved;
  198         struct journal_rawrecbeg *rawp;
  199         struct journal_subrecord *parent;
  200         struct journal_subrecord *last;
  201         int16_t         streamid;
  202         int             pushcount;
  203         int             pushptrgood;
  204         int             residual;
  205         int             residual_align;
  206 
  207         /*
  208          * These fields are not used by the jrecord routines.  They may
  209          * be used by higher level routines to manage multiple jrecords.
  210          * See the jreclist_*() functions.
  211          */
  212         TAILQ_ENTRY(jrecord) user_entry;
  213         void *user_save;
  214 };
  215 
  216 struct jrecord_list {
  217         TAILQ_HEAD(, jrecord) list;
  218         int16_t         streamid;
  219 };
  220 
  221 #endif  /* kernel or kernel structures */
  222 
  223 #if defined(_KERNEL)
  224 
  225 struct namecache;
  226 struct ucred;
  227 struct uio;
  228 struct xio;
  229 struct vnode;
  230 struct vattr;
  231 struct vm_page;
  232 
  233 void journal_create_threads(struct journal *jo);
  234 void journal_destroy_threads(struct journal *jo, int flags);
  235 
  236 /*
  237  * Primary journal record support procedures
  238  */
  239 void jrecord_init(struct journal *jo,
  240                         struct jrecord *jrec, int16_t streamid);
  241 struct journal_subrecord *jrecord_push(
  242                         struct jrecord *jrec, int16_t rectype);
  243 void jrecord_pop(struct jrecord *jrec, struct journal_subrecord *parent);
  244 void jrecord_leaf(struct jrecord *jrec,
  245                         int16_t rectype, void *ptr, int bytes);
  246 void jrecord_leaf_uio(struct jrecord *jrec,
  247                         int16_t rectype, struct uio *uio);
  248 void jrecord_leaf_xio(struct jrecord *jrec,
  249                         int16_t rectype, struct xio *xio);
  250 struct journal_subrecord *jrecord_write(struct jrecord *jrec,
  251                         int16_t rectype, int bytes);
  252 void jrecord_done(struct jrecord *jrec, int abortit);
  253 
  254 /*
  255  * Rollup journal record support procedures
  256  */
  257 void jrecord_write_path(struct jrecord *jrec,
  258                         int16_t rectype, struct namecache *ncp);
  259 void jrecord_write_vattr(struct jrecord *jrec, struct vattr *vat);
  260 void jrecord_write_cred(struct jrecord *jrec, struct thread *td,
  261                         struct ucred *cred);
  262 void jrecord_write_vnode_ref(struct jrecord *jrec, struct vnode *vp);
  263 void jrecord_write_vnode_link(struct jrecord *jrec, struct vnode *vp,
  264                         struct namecache *notncp);
  265 void jrecord_write_pagelist(struct jrecord *jrec, int16_t rectype,
  266                         struct vm_page **pglist, int *rtvals, int pgcount,
  267                         off_t offset);
  268 void jrecord_write_uio(struct jrecord *jrec, int16_t rectype, struct uio *uio);
  269 void jrecord_file_data(struct jrecord *jrec, struct vnode *vp,
  270                         off_t off, off_t bytes);
  271 
  272 MALLOC_DECLARE(M_JOURNAL);
  273 MALLOC_DECLARE(M_JFIFO);
  274 
  275 #else
  276 
  277 #include <sys/cdefs.h>
  278 
  279 __BEGIN_DECLS
  280 int     mountctl (const char *path, int op, int fd, void *ctl, int ctllen,
  281                   void *buf, int buflen);
  282 __END_DECLS
  283 
  284 #endif  /* kernel */
  285 
  286 #endif  /* header */

Cache object: e62e75f1978d5d8383439c660ce0fc42


[ 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.