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) 1996-1998 by Sun Microsystems, Inc. 24 * All rights reserved. 25 */ 26 27 #ifndef _SYS_FS_CACHEFS_FILEGRP_H 28 #define _SYS_FS_CACHEFS_FILEGRP_H 29 30 #pragma ident "%Z%%M% %I% %E% SMI" 31 32 #ifdef __cplusplus 33 extern "C" { 34 #endif 35 36 struct cachefs_metadata; 37 38 /* 39 * filegrp structure represents a group of front files. 40 */ 41 struct filegrp { 42 uint_t fg_flags; /* CFS_FS_* flags */ 43 int fg_count; /* cnodes in group */ 44 cfs_cid_t fg_id; /* starting id in group */ 45 struct fscache *fg_fscp; /* back ptr to fscache */ 46 47 struct cnode *fg_cnodelist; /* list of cnodes */ 48 49 struct filegrp *fg_next; /* pointer to next */ 50 struct vnode *fg_dirvp; /* filegrp directory vp */ 51 struct vnode *fg_attrvp; /* attrcache vp */ 52 struct attrcache_header *fg_header; /* Attrcache header */ 53 struct attrcache_index *fg_offsets; /* ptr to indexes in header */ 54 uchar_t *fg_alloclist; /* allocation bitmap */ 55 56 int fg_headersize; /* attrcache header size */ 57 int fg_filesize; /* size of attrcache file */ 58 kmutex_t fg_mutex; /* filegrp contents/ac lock */ 59 kmutex_t fg_cnodelock; /* cnode list lock */ 60 }; 61 typedef struct filegrp filegrp_t; 62 63 extern struct kmem_cache *cachefs_filegrp_cache; 64 65 /* fg_flags values */ 66 #define CFS_FG_NOCACHE 0x1 /* no cache mode */ 67 #define CFS_FG_ALLOC_ATTR 0x2 /* no attrcache file yet */ 68 #define CFS_FG_UPDATED 0x4 /* attrcache modified */ 69 #define CFS_FG_ALLOC_FILE 0x10 /* no front file dir yet */ 70 #define CFS_FG_RL 0x20 /* no longer used */ 71 #define CFS_FG_READ 0x40 /* attrcache can be read */ 72 #define CFS_FG_WRITE 0x80 /* attrcache can be written */ 73 74 int filegrp_cache_create(void *, void *, int); 75 void filegrp_cache_destroy(void *, void *); 76 filegrp_t *filegrp_create(struct fscache *fscp, cfs_cid_t *cidp); 77 void filegrp_destroy(filegrp_t *fgp); 78 int filegrp_allocattr(filegrp_t *fgp); 79 int filegrpdir_create(filegrp_t *fgp); 80 int filegrpdir_find(filegrp_t *fgp); 81 void filegrp_hold(filegrp_t *fgp); 82 void filegrp_rele(filegrp_t *fgp); 83 int filegrp_ffhold(filegrp_t *fgp); 84 void filegrp_ffrele(filegrp_t *fgp); 85 86 int filegrp_sync(filegrp_t *fgp); 87 int filegrp_read_metadata(filegrp_t *fgp, cfs_cid_t *cidp, 88 struct cachefs_metadata *mdp); 89 int filegrp_create_metadata(filegrp_t *fgp, struct cachefs_metadata *md, 90 cfs_cid_t *cidp); 91 int filegrp_write_metadata(filegrp_t *fgp, cfs_cid_t *cidp, 92 struct cachefs_metadata *mdp); 93 int filegrp_destroy_metadata(filegrp_t *fgp, cfs_cid_t *cidp); 94 int filegrp_cid_to_slot(filegrp_t *fgp, cfs_cid_t *cidp); 95 96 filegrp_t *filegrp_list_find(struct fscache *fscp, cfs_cid_t *cidp); 97 void filegrp_list_add(struct fscache *fscp, filegrp_t *fgp); 98 void filegrp_list_remove(struct fscache *fscp, filegrp_t *fgp); 99 void filegrp_list_gc(struct fscache *fscp); 100 void filegrp_list_enable_caching_ro(struct fscache *fscp); 101 void filegrp_list_enable_caching_rw(struct fscache *fscp); 102 103 #ifdef __cplusplus 104 } 105 #endif 106 107 #endif /* _SYS_FS_CACHEFS_FILEGRP_H */