Home | History | Annotate | Download | only in fs
      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 */
    108