xref: /titanic_44/usr/src/uts/common/sys/fs/cachefs_dir.h (revision ba3594ba9b5dd4c846c472a8d657edcb7c8109ac)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
57c478bd9Sstevel@tonic-gate  * Common Development and Distribution License, Version 1.0 only
67c478bd9Sstevel@tonic-gate  * (the "License").  You may not use this file except in compliance
77c478bd9Sstevel@tonic-gate  * with the License.
87c478bd9Sstevel@tonic-gate  *
97c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
107c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
117c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
127c478bd9Sstevel@tonic-gate  * and limitations under the License.
137c478bd9Sstevel@tonic-gate  *
147c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
157c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
167c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
177c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
187c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
197c478bd9Sstevel@tonic-gate  *
207c478bd9Sstevel@tonic-gate  * CDDL HEADER END
217c478bd9Sstevel@tonic-gate  */
227c478bd9Sstevel@tonic-gate /*
23*ba3594baSGarrett D'Amore  * Copyright 2014 Garrett D'Amore <garrett@damore.org>
24*ba3594baSGarrett D'Amore  *
257c478bd9Sstevel@tonic-gate  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
267c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
277c478bd9Sstevel@tonic-gate  */
287c478bd9Sstevel@tonic-gate 
297c478bd9Sstevel@tonic-gate #ifndef _SYS_FS_CACHEFS_DIR_H
307c478bd9Sstevel@tonic-gate #define	_SYS_FS_CACHEFS_DIR_H
317c478bd9Sstevel@tonic-gate 
327c478bd9Sstevel@tonic-gate #include <sys/types.h>
337c478bd9Sstevel@tonic-gate #include <sys/fs/cachefs_fs.h>
347c478bd9Sstevel@tonic-gate 
357c478bd9Sstevel@tonic-gate #ifdef __cplusplus
367c478bd9Sstevel@tonic-gate extern "C" {
377c478bd9Sstevel@tonic-gate #endif
387c478bd9Sstevel@tonic-gate 
397c478bd9Sstevel@tonic-gate /*
407c478bd9Sstevel@tonic-gate  * c_dirent is stored on disk, so it needs to be the same 32-bit vs. 64-bit.
417c478bd9Sstevel@tonic-gate  */
427c478bd9Sstevel@tonic-gate 
437c478bd9Sstevel@tonic-gate #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
447c478bd9Sstevel@tonic-gate #pragma pack(4)
457c478bd9Sstevel@tonic-gate #endif
467c478bd9Sstevel@tonic-gate 
477c478bd9Sstevel@tonic-gate struct c_dirent {
487c478bd9Sstevel@tonic-gate 	uint_t		d_length;	/* entry length */
497c478bd9Sstevel@tonic-gate 	uint_t		d_flag;		/* entry flags */
507c478bd9Sstevel@tonic-gate 	cfs_cid_t	d_id;		/* file id */
517c478bd9Sstevel@tonic-gate 	offset_t	d_offset;	/* disk offset of this entry */
527c478bd9Sstevel@tonic-gate 	cfs_fid_t	d_cookie;	/* back fid */
537c478bd9Sstevel@tonic-gate 	ushort_t	d_namelen;	/* name length, without null */
547c478bd9Sstevel@tonic-gate 	char		d_name[1];	/* name */
557c478bd9Sstevel@tonic-gate };
567c478bd9Sstevel@tonic-gate 
577c478bd9Sstevel@tonic-gate #if _LONG_LONG_ALIGNMENT == 8 && _LONG_LONG_ALIGNMENT_32 == 4
587c478bd9Sstevel@tonic-gate #pragma pack()
597c478bd9Sstevel@tonic-gate #endif
607c478bd9Sstevel@tonic-gate 
617c478bd9Sstevel@tonic-gate #define	C_DIRSIZ(dp) \
627c478bd9Sstevel@tonic-gate 	(((dp)->d_namelen + (uint_t)sizeof (struct c_dirent) + 7) & ~7)
637c478bd9Sstevel@tonic-gate 
647c478bd9Sstevel@tonic-gate #define	CDE_SIZE(NM) \
657c478bd9Sstevel@tonic-gate 	((strlen(NM) + sizeof (struct c_dirent) + 7) & ~7)
667c478bd9Sstevel@tonic-gate 
677c478bd9Sstevel@tonic-gate /*
687c478bd9Sstevel@tonic-gate  * Various flags stored in c_dirent flag field.
697c478bd9Sstevel@tonic-gate  */
707c478bd9Sstevel@tonic-gate #define	CDE_VALID	0x1		/* entry is valid */
717c478bd9Sstevel@tonic-gate #define	CDE_COMPLETE	0x2		/* entry is complete */
727c478bd9Sstevel@tonic-gate 
737c478bd9Sstevel@tonic-gate 
74*ba3594baSGarrett D'Amore #if defined(_KERNEL)
757c478bd9Sstevel@tonic-gate int cachefs_dir_look(cnode_t *dcp, char *nm, fid_t *cookiep, uint_t *flagp,
767c478bd9Sstevel@tonic-gate     u_offset_t *d_offsetp, cfs_cid_t *cidp);
777c478bd9Sstevel@tonic-gate int cachefs_dir_new(cnode_t *dcp, cnode_t *cp);
787c478bd9Sstevel@tonic-gate int cachefs_dir_enter(cnode_t *dcp, char *nm, fid_t *cookiep, cfs_cid_t *cidp,
797c478bd9Sstevel@tonic-gate     int issync);
807c478bd9Sstevel@tonic-gate int cachefs_dir_rmentry(cnode_t *dcp, char *nm);
817c478bd9Sstevel@tonic-gate void cachefs_dir_modentry(cnode_t *dcp, u_offset_t offset, fid_t *cookiep,
827c478bd9Sstevel@tonic-gate     cfs_cid_t *cidp);
837c478bd9Sstevel@tonic-gate int cachefs_dir_read(struct cnode *dcp, struct uio *uiop, int *eofp);
847c478bd9Sstevel@tonic-gate int cachefs_dir_fill(cnode_t *dcp, cred_t *cr);
857c478bd9Sstevel@tonic-gate int cachefs_dir_empty(cnode_t *dcp);
867c478bd9Sstevel@tonic-gate int cachefs_async_populate_dir(struct cachefs_populate_req *, cred_t *,
877c478bd9Sstevel@tonic-gate     vnode_t *, vnode_t *);
887c478bd9Sstevel@tonic-gate 
89*ba3594baSGarrett D'Amore #endif /* defined(_KERNEL) */
907c478bd9Sstevel@tonic-gate 
917c478bd9Sstevel@tonic-gate #ifdef __cplusplus
927c478bd9Sstevel@tonic-gate }
937c478bd9Sstevel@tonic-gate #endif
947c478bd9Sstevel@tonic-gate 
957c478bd9Sstevel@tonic-gate #endif /* _SYS_FS_CACHEFS_DIR_H */
96