1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License, Version 1.0 only
   6  * (the "License").  You may not use this file except in compliance
   7  * with the License.
   8  *
   9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10  * or http://www.opensolaris.org/os/licensing.
  11  * See the License for the specific language governing permissions
  12  * and limitations under the License.
  13  *
  14  * When distributing Covered Code, include this CDDL HEADER in each
  15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16  * If applicable, add the following below this CDDL HEADER, with the
  17  * fields enclosed by brackets "[]" replaced with your own identifying
  18  * information: Portions Copyright [yyyy] [name of copyright owner]
  19  *
  20  * CDDL HEADER END
  21  */
  22 /*
  23  * Copyright (c) 1994-2001 by Sun Microsystems, Inc.
  24  * All rights reserved.
  25  */
  26 
  27 #ifndef _CFSD_FSCACHE_H
  28 #define _CFSD_FSCACHE_H
  29 
  30 #pragma ident   "%Z%%M% %I%     %E% SMI"
  31 
  32 #ifdef  __cplusplus
  33 extern "C" {
  34 #endif
  35 
  36 #define CFS_MAXMNTOPTLEN        MAXPATHLEN * 4
  37 
  38 typedef struct cfsd_fscache_object {
  39         char    i_name[MAXNAMELEN];             /* fscache name */
  40         char    i_cachepath[MAXPATHLEN];        /* cache pathname */
  41         int     i_fscacheid;                    /* fscache identifier */
  42 
  43         char    i_mntpt[MAXPATHLEN];            /* mount point */
  44         char    i_backfs[MAXPATHLEN * 2];       /* back file system */
  45         char    i_backpath[MAXPATHLEN];         /* back file system path */
  46         char    i_backfstype[MAXNAMELEN];       /* back file system type */
  47         char    i_cfsopt[CFS_MAXMNTOPTLEN];     /* cachefs mount options */
  48         char    i_bfsopt[CFS_MAXMNTOPTLEN];     /* backfs mount options */
  49 
  50         mutex_t         i_lock;                 /* synchronizing lock */
  51         int             i_refcnt;               /* refs to object */
  52         volatile int    i_disconnectable:1;     /* 1 if okay to disconnect */
  53         volatile int    i_mounted:1;            /* 1 if fs is mounted */
  54         volatile int    i_threaded:1;           /* 1 if thread running */
  55         volatile int    i_connected:1;          /* 1 if connected */
  56         volatile int    i_reconcile:1;          /* 1 if reconciling */
  57         volatile int    i_changes:1;            /* 1 if changes to push back */
  58         volatile int    i_simdis:1;             /* 1 means sim disconnect */
  59         volatile int    i_tryunmount:1;         /* 1 if should try unmount */
  60         volatile int    i_backunmount:1;        /* 1 if need to umount backfs */
  61         time_t          i_time_state;           /* time of last dis/connect */
  62         time_t          i_time_mnt;             /* time of last u/mount */
  63         int             i_modify;               /* changed when modified */
  64 
  65         int             i_ofd;                  /* message file descriptor */
  66 
  67         thread_t        i_threadid;             /* id of thread, if running */
  68         cond_t          i_cvwait;               /* cond var to wait on */
  69 
  70         off_t           i_again_offset;         /* offset to head modify op */
  71         int             i_again_seq;            /* seq num of head modify op */
  72         struct cfsd_fscache_object *i_next;     /* next fscache object */
  73 } cfsd_fscache_object_t;
  74 
  75 cfsd_fscache_object_t *cfsd_fscache_create(const char *name,
  76     const char *cachepath, int fscacheid);
  77 void cfsd_fscache_destroy(cfsd_fscache_object_t *fscache_object_p);
  78 
  79 void fscache_lock(cfsd_fscache_object_t *fscache_object_p);
  80 void fscache_unlock(cfsd_fscache_object_t *fscache_object_p);
  81 
  82 void fscache_setup(cfsd_fscache_object_t *fscache_object_p);
  83 void fscache_process(cfsd_fscache_object_t *fscache_object_p);
  84 int fscache_simdisconnect(cfsd_fscache_object_t *fscache_object_p,
  85     int disconnect);
  86 int fscache_unmount(cfsd_fscache_object_t *fscache_object_p, int);
  87 void fscache_server_alive(cfsd_fscache_object_t *fscache_object_p,
  88     cfsd_kmod_object_t *kmod_object_p);
  89 int fscache_pingserver(cfsd_fscache_object_t *fscache_object_p);
  90 int fscache_roll(cfsd_fscache_object_t *fscache_object_p,
  91     cfsd_kmod_object_t *kmod_object_p);
  92 int fscache_rollone(cfsd_fscache_object_t *fscache_object_p,
  93     cfsd_kmod_object_t *kmod_object_p,
  94     cfsd_maptbl_object_t *maptbl_object_p,
  95     cfsd_logfile_object_t *logfile_object_p,
  96     ulong_t seq);
  97 int fscache_addagain(cfsd_fscache_object_t *fscache_object_p,
  98     cfsd_logfile_object_t *logfile_object_p,
  99     ulong_t nseq);
 100 void fscache_fsproblem(cfsd_fscache_object_t *fscache_object_p,
 101     cfsd_kmod_object_t *kmod_object_p);
 102 void fscache_changes(cfsd_fscache_object_t *fscache_object_p, int tt);
 103 
 104 #ifdef  __cplusplus
 105 }
 106 #endif
 107 
 108 #endif  /* _CFSD_FSCACHE_H */