11da177e4SLinus Torvalds /* 21da177e4SLinus Torvalds * Copyright (c) 2000-2001 Christoph Hellwig. 31da177e4SLinus Torvalds * All rights reserved. 41da177e4SLinus Torvalds * 51da177e4SLinus Torvalds * Redistribution and use in source and binary forms, with or without 61da177e4SLinus Torvalds * modification, are permitted provided that the following conditions 71da177e4SLinus Torvalds * are met: 81da177e4SLinus Torvalds * 1. Redistributions of source code must retain the above copyright 91da177e4SLinus Torvalds * notice, this list of conditions, and the following disclaimer, 101da177e4SLinus Torvalds * without modification. 111da177e4SLinus Torvalds * 2. The name of the author may not be used to endorse or promote products 121da177e4SLinus Torvalds * derived from this software without specific prior written permission. 131da177e4SLinus Torvalds * 141da177e4SLinus Torvalds * Alternatively, this software may be distributed under the terms of the 151da177e4SLinus Torvalds * GNU General Public License ("GPL"). 161da177e4SLinus Torvalds * 171da177e4SLinus Torvalds * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 181da177e4SLinus Torvalds * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 191da177e4SLinus Torvalds * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 201da177e4SLinus Torvalds * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR 211da177e4SLinus Torvalds * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 221da177e4SLinus Torvalds * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 231da177e4SLinus Torvalds * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 241da177e4SLinus Torvalds * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 251da177e4SLinus Torvalds * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 261da177e4SLinus Torvalds * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 271da177e4SLinus Torvalds * SUCH DAMAGE. 281da177e4SLinus Torvalds * 291da177e4SLinus Torvalds */ 301da177e4SLinus Torvalds #ifndef _VXFS_DIR_H_ 311da177e4SLinus Torvalds #define _VXFS_DIR_H_ 321da177e4SLinus Torvalds 331da177e4SLinus Torvalds /* 341da177e4SLinus Torvalds * Veritas filesystem driver - directory structure. 351da177e4SLinus Torvalds * 361da177e4SLinus Torvalds * This file contains the definition of the vxfs directory format. 371da177e4SLinus Torvalds */ 381da177e4SLinus Torvalds 391da177e4SLinus Torvalds 401da177e4SLinus Torvalds /* 411da177e4SLinus Torvalds * VxFS directory block header. 421da177e4SLinus Torvalds * 431da177e4SLinus Torvalds * This entry is the head of every filesystem block in a directory. 44*c78bad11SJoe Perches * It is used for free space management and additionally includes 451da177e4SLinus Torvalds * a hash for speeding up directory search (lookup). 461da177e4SLinus Torvalds * 471da177e4SLinus Torvalds * The hash may be empty and in fact we do not use it all in the 481da177e4SLinus Torvalds * Linux driver for now. 491da177e4SLinus Torvalds */ 501da177e4SLinus Torvalds struct vxfs_dirblk { 511da177e4SLinus Torvalds u_int16_t d_free; /* free space in dirblock */ 521da177e4SLinus Torvalds u_int16_t d_nhash; /* no of hash chains */ 531da177e4SLinus Torvalds u_int16_t d_hash[1]; /* hash chain */ 541da177e4SLinus Torvalds }; 551da177e4SLinus Torvalds 561da177e4SLinus Torvalds /* 571da177e4SLinus Torvalds * VXFS_NAMELEN is the maximum length of the d_name field 581da177e4SLinus Torvalds * of an VxFS directory entry. 591da177e4SLinus Torvalds */ 601da177e4SLinus Torvalds #define VXFS_NAMELEN 256 611da177e4SLinus Torvalds 621da177e4SLinus Torvalds /* 631da177e4SLinus Torvalds * VxFS directory entry. 641da177e4SLinus Torvalds */ 651da177e4SLinus Torvalds struct vxfs_direct { 661da177e4SLinus Torvalds vx_ino_t d_ino; /* inode number */ 671da177e4SLinus Torvalds u_int16_t d_reclen; /* record length */ 681da177e4SLinus Torvalds u_int16_t d_namelen; /* d_name length */ 691da177e4SLinus Torvalds u_int16_t d_hashnext; /* next hash entry */ 701da177e4SLinus Torvalds char d_name[VXFS_NAMELEN]; /* name */ 711da177e4SLinus Torvalds }; 721da177e4SLinus Torvalds 731da177e4SLinus Torvalds /* 741da177e4SLinus Torvalds * VXFS_DIRPAD defines the directory entry boundaries, is _must_ be 751da177e4SLinus Torvalds * a multiple of four. 761da177e4SLinus Torvalds * VXFS_NAMEMIN is the length of a directory entry with a NULL d_name. 771da177e4SLinus Torvalds * VXFS_DIRROUND is an internal macros that rounds a length to a value 781da177e4SLinus Torvalds * usable for directory sizes. 791da177e4SLinus Torvalds * VXFS_DIRLEN calculates the directory entry size for an entry with 801da177e4SLinus Torvalds * a d_name with size len. 811da177e4SLinus Torvalds */ 821da177e4SLinus Torvalds #define VXFS_DIRPAD 4 8385420ccaSAndrew Morton #define VXFS_NAMEMIN offsetof(struct vxfs_direct, d_name) 841da177e4SLinus Torvalds #define VXFS_DIRROUND(len) ((VXFS_DIRPAD + (len) - 1) & ~(VXFS_DIRPAD -1)) 851da177e4SLinus Torvalds #define VXFS_DIRLEN(len) (VXFS_DIRROUND(VXFS_NAMEMIN + (len))) 861da177e4SLinus Torvalds 871da177e4SLinus Torvalds /* 881da177e4SLinus Torvalds * VXFS_DIRBLKOV is the overhead of a specific dirblock. 891da177e4SLinus Torvalds */ 901da177e4SLinus Torvalds #define VXFS_DIRBLKOV(dbp) ((sizeof(short) * dbp->d_nhash) + 4) 911da177e4SLinus Torvalds 921da177e4SLinus Torvalds #endif /* _VXFS_DIR_H_ */ 93