vxfs_dir.h 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2000-2001 Christoph Hellwig.
  4. */
  5. #ifndef _VXFS_DIR_H_
  6. #define _VXFS_DIR_H_
  7. /*
  8. * Veritas filesystem driver - directory structure.
  9. *
  10. * This file contains the definition of the vxfs directory format.
  11. */
  12. /*
  13. * VxFS directory block header.
  14. *
  15. * This entry is the head of every filesystem block in a directory.
  16. * It is used for free space management and additionally includes
  17. * a hash for speeding up directory search (lookup).
  18. *
  19. * The hash may be empty and in fact we do not use it all in the
  20. * Linux driver for now.
  21. */
  22. struct vxfs_dirblk {
  23. __fs16 d_free; /* free space in dirblock */
  24. __fs16 d_nhash; /* no of hash chains */
  25. __fs16 d_hash[1]; /* hash chain */
  26. };
  27. /*
  28. * VXFS_NAMELEN is the maximum length of the d_name field
  29. * of an VxFS directory entry.
  30. */
  31. #define VXFS_NAMELEN 256
  32. /*
  33. * VxFS directory entry.
  34. */
  35. struct vxfs_direct {
  36. __fs32 d_ino; /* inode number */
  37. __fs16 d_reclen; /* record length */
  38. __fs16 d_namelen; /* d_name length */
  39. __fs16 d_hashnext; /* next hash entry */
  40. char d_name[VXFS_NAMELEN]; /* name */
  41. };
  42. /*
  43. * VXFS_DIRPAD defines the directory entry boundaries, is _must_ be
  44. * a multiple of four.
  45. * VXFS_NAMEMIN is the length of a directory entry with a NULL d_name.
  46. * VXFS_DIRROUND is an internal macros that rounds a length to a value
  47. * usable for directory sizes.
  48. * VXFS_DIRLEN calculates the directory entry size for an entry with
  49. * a d_name with size len.
  50. */
  51. #define VXFS_DIRPAD 4
  52. #define VXFS_NAMEMIN offsetof(struct vxfs_direct, d_name)
  53. #define VXFS_DIRROUND(len) ((VXFS_DIRPAD + (len) - 1) & ~(VXFS_DIRPAD -1))
  54. #define VXFS_DIRLEN(len) (VXFS_DIRROUND(VXFS_NAMEMIN + (len)))
  55. /*
  56. * VXFS_DIRBLKOV is the overhead of a specific dirblock.
  57. */
  58. #define VXFS_DIRBLKOV(sbi, dbp) \
  59. ((sizeof(short) * fs16_to_cpu(sbi, dbp->d_nhash)) + 4)
  60. #endif /* _VXFS_DIR_H_ */