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 */