1 /* 2 * Copyright (c) 2000-2001 Silicon Graphics, Inc. All Rights Reserved. 3 * 4 * This program is free software; you can redistribute it and/or modify it 5 * under the terms of version 2 of the GNU General Public License as 6 * published by the Free Software Foundation. 7 * 8 * This program is distributed in the hope that it would be useful, but 9 * WITHOUT ANY WARRANTY; without even the implied warranty of 10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 11 * 12 * Further, this software is distributed without any warranty that it is 13 * free of the rightful claim of any third person regarding infringement 14 * or the like. Any license provided herein, whether implied or 15 * otherwise, applies only to this software file. Patent licenses, if 16 * any, provided herein do not apply to combinations of this program with 17 * other software, or any other product whatsoever. 18 * 19 * You should have received a copy of the GNU General Public License along 20 * with this program; if not, write the Free Software Foundation, Inc., 59 21 * Temple Place - Suite 330, Boston MA 02111-1307, USA. 22 * 23 * Contact information: Silicon Graphics, Inc., 1600 Amphitheatre Pkwy, 24 * Mountain View, CA 94043, or: 25 * 26 * http://www.sgi.com 27 * 28 * For further information regarding this notice, see: 29 * 30 * http://oss.sgi.com/projects/GenInfo/SGIGPLNoticeExplan/ 31 */ 32 #ifndef __XFS_DIR2_BLOCK_H__ 33 #define __XFS_DIR2_BLOCK_H__ 34 35 /* 36 * xfs_dir2_block.h 37 * Directory version 2, single block format structures 38 */ 39 40 struct uio; 41 struct xfs_dabuf; 42 struct xfs_da_args; 43 struct xfs_dir2_data_hdr; 44 struct xfs_dir2_leaf_entry; 45 struct xfs_inode; 46 struct xfs_mount; 47 struct xfs_trans; 48 49 /* 50 * The single block format is as follows: 51 * xfs_dir2_data_hdr_t structure 52 * xfs_dir2_data_entry_t and xfs_dir2_data_unused_t structures 53 * xfs_dir2_leaf_entry_t structures 54 * xfs_dir2_block_tail_t structure 55 */ 56 57 #define XFS_DIR2_BLOCK_MAGIC 0x58443242 /* XD2B: for one block dirs */ 58 59 typedef struct xfs_dir2_block_tail { 60 __uint32_t count; /* count of leaf entries */ 61 __uint32_t stale; /* count of stale lf entries */ 62 } xfs_dir2_block_tail_t; 63 64 /* 65 * Generic single-block structure, for xfs_db. 66 */ 67 typedef struct xfs_dir2_block { 68 xfs_dir2_data_hdr_t hdr; /* magic XFS_DIR2_BLOCK_MAGIC */ 69 xfs_dir2_data_union_t u[1]; 70 xfs_dir2_leaf_entry_t leaf[1]; 71 xfs_dir2_block_tail_t tail; 72 } xfs_dir2_block_t; 73 74 /* 75 * Pointer to the leaf header embedded in a data block (1-block format) 76 */ 77 #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR2_BLOCK_TAIL_P) 78 xfs_dir2_block_tail_t * 79 xfs_dir2_block_tail_p(struct xfs_mount *mp, xfs_dir2_block_t *block); 80 #define XFS_DIR2_BLOCK_TAIL_P(mp,block) xfs_dir2_block_tail_p(mp,block) 81 #else 82 #define XFS_DIR2_BLOCK_TAIL_P(mp,block) \ 83 (((xfs_dir2_block_tail_t *)((char *)(block) + (mp)->m_dirblksize)) - 1) 84 #endif 85 86 /* 87 * Pointer to the leaf entries embedded in a data block (1-block format) 88 */ 89 #if XFS_WANT_FUNCS || (XFS_WANT_SPACE && XFSSO_XFS_DIR2_BLOCK_LEAF_P) 90 struct xfs_dir2_leaf_entry *xfs_dir2_block_leaf_p_arch( 91 xfs_dir2_block_tail_t *btp, xfs_arch_t arch); 92 #define XFS_DIR2_BLOCK_LEAF_P_ARCH(btp,arch) \ 93 xfs_dir2_block_leaf_p_arch(btp,arch) 94 #else 95 #define XFS_DIR2_BLOCK_LEAF_P_ARCH(btp,arch) \ 96 (((struct xfs_dir2_leaf_entry *)(btp)) - INT_GET((btp)->count, arch)) 97 #endif 98 99 /* 100 * Function declarations. 101 */ 102 103 extern int 104 xfs_dir2_block_addname(struct xfs_da_args *args); 105 106 extern int 107 xfs_dir2_block_getdents(struct xfs_trans *tp, struct xfs_inode *dp, 108 struct uio *uio, int *eofp, struct xfs_dirent *dbp, 109 xfs_dir2_put_t put); 110 111 extern int 112 xfs_dir2_block_lookup(struct xfs_da_args *args); 113 114 extern int 115 xfs_dir2_block_removename(struct xfs_da_args *args); 116 117 extern int 118 xfs_dir2_block_replace(struct xfs_da_args *args); 119 120 extern int 121 xfs_dir2_leaf_to_block(struct xfs_da_args *args, struct xfs_dabuf *lbp, 122 struct xfs_dabuf *dbp); 123 124 extern int 125 xfs_dir2_sf_to_block(struct xfs_da_args *args); 126 127 #endif /* __XFS_DIR2_BLOCK_H__ */ 128