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