15792664070c62479b088e4909000582de3686396Christoph Hellwig/* 25792664070c62479b088e4909000582de3686396Christoph Hellwig * Copyright (c) 2000-2001,2005 Silicon Graphics, Inc. 35792664070c62479b088e4909000582de3686396Christoph Hellwig * All Rights Reserved. 45792664070c62479b088e4909000582de3686396Christoph Hellwig * 55792664070c62479b088e4909000582de3686396Christoph Hellwig * This program is free software; you can redistribute it and/or 65792664070c62479b088e4909000582de3686396Christoph Hellwig * modify it under the terms of the GNU General Public License as 75792664070c62479b088e4909000582de3686396Christoph Hellwig * published by the Free Software Foundation. 85792664070c62479b088e4909000582de3686396Christoph Hellwig * 95792664070c62479b088e4909000582de3686396Christoph Hellwig * This program is distributed in the hope that it would be useful, 105792664070c62479b088e4909000582de3686396Christoph Hellwig * but WITHOUT ANY WARRANTY; without even the implied warranty of 115792664070c62479b088e4909000582de3686396Christoph Hellwig * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 125792664070c62479b088e4909000582de3686396Christoph Hellwig * GNU General Public License for more details. 135792664070c62479b088e4909000582de3686396Christoph Hellwig * 145792664070c62479b088e4909000582de3686396Christoph Hellwig * You should have received a copy of the GNU General Public License 155792664070c62479b088e4909000582de3686396Christoph Hellwig * along with this program; if not, write the Free Software Foundation, 165792664070c62479b088e4909000582de3686396Christoph Hellwig * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA 175792664070c62479b088e4909000582de3686396Christoph Hellwig */ 185792664070c62479b088e4909000582de3686396Christoph Hellwig#ifndef __XFS_DIR2_PRIV_H__ 195792664070c62479b088e4909000582de3686396Christoph Hellwig#define __XFS_DIR2_PRIV_H__ 205792664070c62479b088e4909000582de3686396Christoph Hellwig 210cb97766f2928579f1029ea7b28ae946cdd6fbe1Dave Chinnerstruct dir_context; 220cb97766f2928579f1029ea7b28ae946cdd6fbe1Dave Chinner 23892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 24892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Directory offset/block conversion functions. 25892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * 26892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * DB blocks here are logical directory block numbers, not filesystem blocks. 27892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 28892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 29892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 30892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert dataptr to byte in file space 31892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 32892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dir2_off_t 33892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerxfs_dir2_dataptr_to_byte(xfs_dir2_dataptr_t dp) 34892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 35892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner return (xfs_dir2_off_t)dp << XFS_DIR2_DATA_ALIGN_LOG; 36892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 37892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 38892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 39892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert byte in file space to dataptr. It had better be aligned. 40892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 41892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dir2_dataptr_t 42892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerxfs_dir2_byte_to_dataptr(xfs_dir2_off_t by) 43892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 44892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner return (xfs_dir2_dataptr_t)(by >> XFS_DIR2_DATA_ALIGN_LOG); 45892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 46892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 47892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 48892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert byte in space to (DB) block 49892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 50892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dir2_db_t 5130028030b14d083123c88e3ab45990a8c375abf1Dave Chinnerxfs_dir2_byte_to_db(struct xfs_da_geometry *geo, xfs_dir2_off_t by) 52892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 5330028030b14d083123c88e3ab45990a8c375abf1Dave Chinner return (xfs_dir2_db_t)(by >> geo->blklog); 54892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 55892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 56892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 57892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert dataptr to a block number 58892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 59892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dir2_db_t 6030028030b14d083123c88e3ab45990a8c375abf1Dave Chinnerxfs_dir2_dataptr_to_db(struct xfs_da_geometry *geo, xfs_dir2_dataptr_t dp) 61892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 6230028030b14d083123c88e3ab45990a8c375abf1Dave Chinner return xfs_dir2_byte_to_db(geo, xfs_dir2_dataptr_to_byte(dp)); 63892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 64892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 65892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 66892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert byte in space to offset in a block 67892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 68892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dir2_data_aoff_t 699b3b5522d3f55215ce51c87b0467926c57a6f182Dave Chinnerxfs_dir2_byte_to_off(struct xfs_da_geometry *geo, xfs_dir2_off_t by) 70892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 719b3b5522d3f55215ce51c87b0467926c57a6f182Dave Chinner return (xfs_dir2_data_aoff_t)(by & (geo->blksize - 1)); 72892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 73892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 74892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 75892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert dataptr to a byte offset in a block 76892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 77892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dir2_data_aoff_t 7830028030b14d083123c88e3ab45990a8c375abf1Dave Chinnerxfs_dir2_dataptr_to_off(struct xfs_da_geometry *geo, xfs_dir2_dataptr_t dp) 79892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 8030028030b14d083123c88e3ab45990a8c375abf1Dave Chinner return xfs_dir2_byte_to_off(geo, xfs_dir2_dataptr_to_byte(dp)); 81892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 82892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 83892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 84892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert block and offset to byte in space 85892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 86892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dir2_off_t 879b3b5522d3f55215ce51c87b0467926c57a6f182Dave Chinnerxfs_dir2_db_off_to_byte(struct xfs_da_geometry *geo, xfs_dir2_db_t db, 88892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner xfs_dir2_data_aoff_t o) 89892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 909b3b5522d3f55215ce51c87b0467926c57a6f182Dave Chinner return ((xfs_dir2_off_t)db << geo->blklog) + o; 91892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 92892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 93892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 94892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert block (DB) to block (dablk) 95892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 96892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dablk_t 972998ab1d450a526a9a3a6292f91239b4fc209db0Dave Chinnerxfs_dir2_db_to_da(struct xfs_da_geometry *geo, xfs_dir2_db_t db) 98892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 992998ab1d450a526a9a3a6292f91239b4fc209db0Dave Chinner return (xfs_dablk_t)(db << (geo->blklog - geo->fsblog)); 100892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 101892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 102892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 103892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert byte in space to (DA) block 104892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 105892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dablk_t 10630028030b14d083123c88e3ab45990a8c375abf1Dave Chinnerxfs_dir2_byte_to_da(struct xfs_da_geometry *geo, xfs_dir2_off_t by) 107892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 10830028030b14d083123c88e3ab45990a8c375abf1Dave Chinner return xfs_dir2_db_to_da(geo, xfs_dir2_byte_to_db(geo, by)); 109892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 110892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 111892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 112892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert block and offset to dataptr 113892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 114892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dir2_dataptr_t 11530028030b14d083123c88e3ab45990a8c375abf1Dave Chinnerxfs_dir2_db_off_to_dataptr(struct xfs_da_geometry *geo, xfs_dir2_db_t db, 116892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner xfs_dir2_data_aoff_t o) 117892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 11830028030b14d083123c88e3ab45990a8c375abf1Dave Chinner return xfs_dir2_byte_to_dataptr(xfs_dir2_db_off_to_byte(geo, db, o)); 119892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 120892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 121892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 122892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert block (dablk) to block (DB) 123892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 124892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dir2_db_t 1252998ab1d450a526a9a3a6292f91239b4fc209db0Dave Chinnerxfs_dir2_da_to_db(struct xfs_da_geometry *geo, xfs_dablk_t da) 126892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 1272998ab1d450a526a9a3a6292f91239b4fc209db0Dave Chinner return (xfs_dir2_db_t)(da >> (geo->blklog - geo->fsblog)); 128892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 129892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 130892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 131892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Convert block (dablk) to byte offset in space 132892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 133892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline xfs_dir2_off_t 1342998ab1d450a526a9a3a6292f91239b4fc209db0Dave Chinnerxfs_dir2_da_to_byte(struct xfs_da_geometry *geo, xfs_dablk_t da) 135892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 1362998ab1d450a526a9a3a6292f91239b4fc209db0Dave Chinner return xfs_dir2_db_off_to_byte(geo, xfs_dir2_da_to_db(geo, da), 0); 137892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 138892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 139892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner/* 140892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner * Directory tail pointer accessor functions. Based on block geometry. 141892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner */ 142892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline struct xfs_dir2_block_tail * 1438f66193c89f0b0259db6b27b4df3deb828c294f9Dave Chinnerxfs_dir2_block_tail_p(struct xfs_da_geometry *geo, struct xfs_dir2_data_hdr *hdr) 144892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 145892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner return ((struct xfs_dir2_block_tail *) 1468f66193c89f0b0259db6b27b4df3deb828c294f9Dave Chinner ((char *)hdr + geo->blksize)) - 1; 147892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 148892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 149892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinnerstatic inline struct xfs_dir2_leaf_tail * 1508f66193c89f0b0259db6b27b4df3deb828c294f9Dave Chinnerxfs_dir2_leaf_tail_p(struct xfs_da_geometry *geo, struct xfs_dir2_leaf *lp) 151892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner{ 152892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner return (struct xfs_dir2_leaf_tail *) 1538f66193c89f0b0259db6b27b4df3deb828c294f9Dave Chinner ((char *)lp + geo->blksize - 154892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner sizeof(struct xfs_dir2_leaf_tail)); 155892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner} 156892e3f342f9888066f1ce56f3683572f0ca9b8e9Dave Chinner 1575792664070c62479b088e4909000582de3686396Christoph Hellwig/* xfs_dir2.c */ 1585792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir_ino_validate(struct xfs_mount *mp, xfs_ino_t ino); 1595792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_grow_inode(struct xfs_da_args *args, int space, 1605792664070c62479b088e4909000582de3686396Christoph Hellwig xfs_dir2_db_t *dbp); 1615792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir_cilookup_result(struct xfs_da_args *args, 1625792664070c62479b088e4909000582de3686396Christoph Hellwig const unsigned char *name, int len); 1635792664070c62479b088e4909000582de3686396Christoph Hellwig 1640cb97766f2928579f1029ea7b28ae946cdd6fbe1Dave Chinner#define S_SHIFT 12 1650cb97766f2928579f1029ea7b28ae946cdd6fbe1Dave Chinnerextern const unsigned char xfs_mode_to_ftype[]; 1660cb97766f2928579f1029ea7b28ae946cdd6fbe1Dave Chinner 1670cb97766f2928579f1029ea7b28ae946cdd6fbe1Dave Chinnerextern unsigned char xfs_dir3_get_dtype(struct xfs_mount *mp, 1680cb97766f2928579f1029ea7b28ae946cdd6fbe1Dave Chinner __uint8_t filetype); 1690cb97766f2928579f1029ea7b28ae946cdd6fbe1Dave Chinner 1700cb97766f2928579f1029ea7b28ae946cdd6fbe1Dave Chinner 1715792664070c62479b088e4909000582de3686396Christoph Hellwig/* xfs_dir2_block.c */ 1724a8af273de63d9656559ba5289e91f40aae0441fDave Chinnerextern int xfs_dir3_block_read(struct xfs_trans *tp, struct xfs_inode *dp, 1734a8af273de63d9656559ba5289e91f40aae0441fDave Chinner struct xfs_buf **bpp); 1745792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_block_addname(struct xfs_da_args *args); 1755792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_block_lookup(struct xfs_da_args *args); 1765792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_block_removename(struct xfs_da_args *args); 1775792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_block_replace(struct xfs_da_args *args); 1785792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_leaf_to_block(struct xfs_da_args *args, 1791d9025e56143c0c4aebebdb62e46618d3d284218Dave Chinner struct xfs_buf *lbp, struct xfs_buf *dbp); 1805792664070c62479b088e4909000582de3686396Christoph Hellwig 1815792664070c62479b088e4909000582de3686396Christoph Hellwig/* xfs_dir2_data.c */ 1825792664070c62479b088e4909000582de3686396Christoph Hellwig#ifdef DEBUG 18333363feed1614def83d0a6870051f0a7828cd61bDave Chinner#define xfs_dir3_data_check(dp,bp) __xfs_dir3_data_check(dp, bp); 1845792664070c62479b088e4909000582de3686396Christoph Hellwig#else 18533363feed1614def83d0a6870051f0a7828cd61bDave Chinner#define xfs_dir3_data_check(dp,bp) 1865792664070c62479b088e4909000582de3686396Christoph Hellwig#endif 1871813dd64057490e7a0678a885c4fe6d02f78bdc1Dave Chinner 18833363feed1614def83d0a6870051f0a7828cd61bDave Chinnerextern int __xfs_dir3_data_check(struct xfs_inode *dp, struct xfs_buf *bp); 18933363feed1614def83d0a6870051f0a7828cd61bDave Chinnerextern int xfs_dir3_data_read(struct xfs_trans *tp, struct xfs_inode *dp, 190e4813572640e27d3a5cce3f06751a9f54f77aaa5Dave Chinner xfs_dablk_t bno, xfs_daddr_t mapped_bno, struct xfs_buf **bpp); 1919df2dd0b0d2aad3ce2480e0618bfe14d37c017a3Eric Sandeenextern int xfs_dir3_data_readahead(struct xfs_inode *dp, xfs_dablk_t bno, 1929df2dd0b0d2aad3ce2480e0618bfe14d37c017a3Eric Sandeen xfs_daddr_t mapped_bno); 19382025d7f79148fe66a1594a0ebe4ab38152cf9e6Dave Chinner 1945792664070c62479b088e4909000582de3686396Christoph Hellwigextern struct xfs_dir2_data_free * 1955792664070c62479b088e4909000582de3686396Christoph Hellwigxfs_dir2_data_freeinsert(struct xfs_dir2_data_hdr *hdr, 1962ca9877410594dd321621efc9e1cbcd1ca24d0f3Dave Chinner struct xfs_dir2_data_free *bf, struct xfs_dir2_data_unused *dup, 1972ca9877410594dd321621efc9e1cbcd1ca24d0f3Dave Chinner int *loghead); 198f5f3d9b0161633e8943520e83df634ad540b3b7fDave Chinnerextern int xfs_dir3_data_init(struct xfs_da_args *args, xfs_dir2_db_t blkno, 1991d9025e56143c0c4aebebdb62e46618d3d284218Dave Chinner struct xfs_buf **bpp); 2005792664070c62479b088e4909000582de3686396Christoph Hellwig 2015792664070c62479b088e4909000582de3686396Christoph Hellwig/* xfs_dir2_leaf.c */ 20224df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinnerextern int xfs_dir3_leafn_read(struct xfs_trans *tp, struct xfs_inode *dp, 203e6f7667c4eef42b6f5bc6cdeb31d0bab62fe5f79Dave Chinner xfs_dablk_t fbno, xfs_daddr_t mappedbno, struct xfs_buf **bpp); 2045792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_block_to_leaf(struct xfs_da_args *args, 2051d9025e56143c0c4aebebdb62e46618d3d284218Dave Chinner struct xfs_buf *dbp); 2065792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_leaf_addname(struct xfs_da_args *args); 20724df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinnerextern void xfs_dir3_leaf_compact(struct xfs_da_args *args, 20824df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinner struct xfs_dir3_icleaf_hdr *leafhdr, struct xfs_buf *bp); 20924df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinnerextern void xfs_dir3_leaf_compact_x1(struct xfs_dir3_icleaf_hdr *leafhdr, 21024df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinner struct xfs_dir2_leaf_entry *ents, int *indexp, 2115792664070c62479b088e4909000582de3686396Christoph Hellwig int *lowstalep, int *highstalep, int *lowlogp, int *highlogp); 21224df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinnerextern int xfs_dir3_leaf_get_buf(struct xfs_da_args *args, xfs_dir2_db_t bno, 21324df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinner struct xfs_buf **bpp, __uint16_t magic); 214bc85178a7668db835666c6a5bd53436eebfc94b1Dave Chinnerextern void xfs_dir3_leaf_log_ents(struct xfs_da_args *args, 2154141956ae05e0685b14b30f92fdc8fb11b4a0cb2Dave Chinner struct xfs_buf *bp, int first, int last); 216bc85178a7668db835666c6a5bd53436eebfc94b1Dave Chinnerextern void xfs_dir3_leaf_log_header(struct xfs_da_args *args, 2171d9025e56143c0c4aebebdb62e46618d3d284218Dave Chinner struct xfs_buf *bp); 2185792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_leaf_lookup(struct xfs_da_args *args); 2195792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_leaf_removename(struct xfs_da_args *args); 2205792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_leaf_replace(struct xfs_da_args *args); 2215792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_leaf_search_hash(struct xfs_da_args *args, 2221d9025e56143c0c4aebebdb62e46618d3d284218Dave Chinner struct xfs_buf *lbp); 2235792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_leaf_trim_data(struct xfs_da_args *args, 2241d9025e56143c0c4aebebdb62e46618d3d284218Dave Chinner struct xfs_buf *lbp, xfs_dir2_db_t db); 2255792664070c62479b088e4909000582de3686396Christoph Hellwigextern struct xfs_dir2_leaf_entry * 22624df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinnerxfs_dir3_leaf_find_entry(struct xfs_dir3_icleaf_hdr *leafhdr, 22724df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinner struct xfs_dir2_leaf_entry *ents, int index, int compact, 22824df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinner int lowstale, int highstale, int *lfloglow, int *lfloghigh); 2295792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_node_to_leaf(struct xfs_da_state *state); 2305792664070c62479b088e4909000582de3686396Christoph Hellwig 2314141956ae05e0685b14b30f92fdc8fb11b4a0cb2Dave Chinnerextern bool xfs_dir3_leaf_check_int(struct xfs_mount *mp, struct xfs_inode *dp, 23224df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinner struct xfs_dir3_icleaf_hdr *hdr, struct xfs_dir2_leaf *leaf); 23324df33b45ecf5ca413ef1530e0aca5506d9be2ccDave Chinner 2345792664070c62479b088e4909000582de3686396Christoph Hellwig/* xfs_dir2_node.c */ 2355792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_leaf_to_node(struct xfs_da_args *args, 2361d9025e56143c0c4aebebdb62e46618d3d284218Dave Chinner struct xfs_buf *lbp); 2374141956ae05e0685b14b30f92fdc8fb11b4a0cb2Dave Chinnerextern xfs_dahash_t xfs_dir2_leafn_lasthash(struct xfs_inode *dp, 2384141956ae05e0685b14b30f92fdc8fb11b4a0cb2Dave Chinner struct xfs_buf *bp, int *count); 2391d9025e56143c0c4aebebdb62e46618d3d284218Dave Chinnerextern int xfs_dir2_leafn_lookup_int(struct xfs_buf *bp, 2405792664070c62479b088e4909000582de3686396Christoph Hellwig struct xfs_da_args *args, int *indexp, 2415792664070c62479b088e4909000582de3686396Christoph Hellwig struct xfs_da_state *state); 2424141956ae05e0685b14b30f92fdc8fb11b4a0cb2Dave Chinnerextern int xfs_dir2_leafn_order(struct xfs_inode *dp, struct xfs_buf *leaf1_bp, 2431d9025e56143c0c4aebebdb62e46618d3d284218Dave Chinner struct xfs_buf *leaf2_bp); 2445792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_leafn_split(struct xfs_da_state *state, 2455792664070c62479b088e4909000582de3686396Christoph Hellwig struct xfs_da_state_blk *oldblk, struct xfs_da_state_blk *newblk); 2465792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_leafn_toosmall(struct xfs_da_state *state, int *action); 2475792664070c62479b088e4909000582de3686396Christoph Hellwigextern void xfs_dir2_leafn_unbalance(struct xfs_da_state *state, 2485792664070c62479b088e4909000582de3686396Christoph Hellwig struct xfs_da_state_blk *drop_blk, 2495792664070c62479b088e4909000582de3686396Christoph Hellwig struct xfs_da_state_blk *save_blk); 2505792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_node_addname(struct xfs_da_args *args); 2515792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_node_lookup(struct xfs_da_args *args); 2525792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_node_removename(struct xfs_da_args *args); 2535792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_node_replace(struct xfs_da_args *args); 2545792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_node_trim_free(struct xfs_da_args *args, xfs_fileoff_t fo, 2555792664070c62479b088e4909000582de3686396Christoph Hellwig int *rvalp); 2562025207ca6738a1217126ef14af9d104433f9824Dave Chinnerextern int xfs_dir2_free_read(struct xfs_trans *tp, struct xfs_inode *dp, 2572025207ca6738a1217126ef14af9d104433f9824Dave Chinner xfs_dablk_t fbno, struct xfs_buf **bpp); 2585792664070c62479b088e4909000582de3686396Christoph Hellwig 2595792664070c62479b088e4909000582de3686396Christoph Hellwig/* xfs_dir2_sf.c */ 2605792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_block_sfsize(struct xfs_inode *dp, 2615792664070c62479b088e4909000582de3686396Christoph Hellwig struct xfs_dir2_data_hdr *block, struct xfs_dir2_sf_hdr *sfhp); 2621d9025e56143c0c4aebebdb62e46618d3d284218Dave Chinnerextern int xfs_dir2_block_to_sf(struct xfs_da_args *args, struct xfs_buf *bp, 2635792664070c62479b088e4909000582de3686396Christoph Hellwig int size, xfs_dir2_sf_hdr_t *sfhp); 2645792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_sf_addname(struct xfs_da_args *args); 2655792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_sf_create(struct xfs_da_args *args, xfs_ino_t pino); 2665792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_sf_lookup(struct xfs_da_args *args); 2675792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_sf_removename(struct xfs_da_args *args); 2685792664070c62479b088e4909000582de3686396Christoph Hellwigextern int xfs_dir2_sf_replace(struct xfs_da_args *args); 2695792664070c62479b088e4909000582de3686396Christoph Hellwig 270c24b5dfadc4a4f7a13af373067871479c74455e6Dave Chinner/* xfs_dir2_readdir.c */ 271c24b5dfadc4a4f7a13af373067871479c74455e6Dave Chinnerextern int xfs_readdir(struct xfs_inode *dp, struct dir_context *ctx, 272c24b5dfadc4a4f7a13af373067871479c74455e6Dave Chinner size_t bufsize); 273c24b5dfadc4a4f7a13af373067871479c74455e6Dave Chinner 2745792664070c62479b088e4909000582de3686396Christoph Hellwig#endif /* __XFS_DIR2_PRIV_H__ */ 275