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