dinode.h 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149
  1. /*-
  2. * Copyright (c) 2002 Networks Associates Technology, Inc.
  3. * All rights reserved.
  4. *
  5. * This software was developed for the FreeBSD Project by Marshall
  6. * Kirk McKusick and Network Associates Laboratories, the Security
  7. * Research Division of Network Associates, Inc. under DARPA/SPAWAR
  8. * contract N66001-01-C-8035 ("CBOSS"), as part of the DARPA CHATS
  9. * research program
  10. *
  11. * Redistribution and use in source and binary forms, with or without
  12. * modification, are permitted provided that the following conditions
  13. * are met:
  14. * 1. Redistributions of source code must retain the above copyright
  15. * notice, this list of conditions and the following disclaimer.
  16. * 2. Redistributions in binary form must reproduce the above copyright
  17. * notice, this list of conditions and the following disclaimer in the
  18. * documentation and/or other materials provided with the distribution.
  19. *
  20. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  21. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  22. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  23. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  24. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  25. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  26. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  27. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  28. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  29. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  30. * SUCH DAMAGE.
  31. *
  32. * Copyright (c) 1982, 1989, 1993
  33. * The Regents of the University of California. All rights reserved.
  34. * (c) UNIX System Laboratories, Inc.
  35. * All or some portions of this file are derived from material licensed
  36. * to the University of California by American Telephone and Telegraph
  37. * Co. or Unix System Laboratories, Inc. and are reproduced herein with
  38. * the permission of UNIX System Laboratories, Inc.
  39. *
  40. * Redistribution and use in source and binary forms, with or without
  41. * modification, are permitted provided that the following conditions
  42. * are met:
  43. * 1. Redistributions of source code must retain the above copyright
  44. * notice, this list of conditions and the following disclaimer.
  45. * 2. Redistributions in binary form must reproduce the above copyright
  46. * notice, this list of conditions and the following disclaimer in the
  47. * documentation and/or other materials provided with the distribution.
  48. * 3. The names of the authors may not be used to endorse or promote
  49. * products derived from this software without specific prior written
  50. * permission.
  51. *
  52. * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
  53. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  54. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  55. * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
  56. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  57. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  58. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  59. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  60. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  61. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  62. * SUCH DAMAGE.
  63. *
  64. * @(#)dinode.h 8.3 (Berkeley) 1/21/94
  65. * $FreeBSD$
  66. */
  67. /*
  68. * The root inode is the root of the filesystem. Inode 0 can't be used for
  69. * normal purposes and historically bad blocks were linked to inode 1, thus
  70. * the root inode is 2. (Inode 1 is no longer used for this purpose, however
  71. * numerous dump tapes make this assumption, so we are stuck with it).
  72. */
  73. #define UFS_ROOTINO ((ino_t)2)
  74. /*
  75. * The Whiteout inode# is a dummy non-zero inode number which will
  76. * never be allocated to a real file. It is used as a place holder
  77. * in the directory entry which has been tagged as a DT_WHT entry.
  78. * See the comments about UFS_ROOTINO above.
  79. */
  80. #define UFS_WINO ((ino_t)1)
  81. /* File permissions. */
  82. #define IEXEC 0000100 /* Executable. */
  83. #define IWRITE 0000200 /* Writeable. */
  84. #define IREAD 0000400 /* Readable. */
  85. #define ISVTX 0001000 /* Sticky bit. */
  86. #define ISGID 0002000 /* Set-gid. */
  87. #define ISUID 0004000 /* Set-uid. */
  88. /* File types. */
  89. #define IFMT 0170000 /* Mask of file type. */
  90. #define IFIFO 0010000 /* Named pipe (fifo). */
  91. #define IFCHR 0020000 /* Character device. */
  92. #define IFDIR 0040000 /* Directory file. */
  93. #define IFBLK 0060000 /* Block device. */
  94. #define IFREG 0100000 /* Regular file. */
  95. #define IFLNK 0120000 /* Symbolic link. */
  96. #define IFSOCK 0140000 /* UNIX domain socket. */
  97. #define IFWHT 0160000 /* Whiteout. */
  98. /*
  99. * A dinode contains all the meta-data associated with a UFS2 file.
  100. * This structure defines the on-disk format of a dinode. Since
  101. * this structure describes an on-disk structure, all its fields
  102. * are defined by types with precise widths.
  103. */
  104. #define UFS_NXADDR 2 /* External addresses in inode. */
  105. #define UFS_NDADDR 12 /* Direct addresses in inode. */
  106. #define UFS_NIADDR 3 /* Indirect addresses in inode. */
  107. typedef struct ufs2_dinode {
  108. uint16_t di_mode; /* 0: IFMT, permissions; see below. */
  109. int16_t di_nlink; /* 2: File link count. */
  110. uint32_t di_uid; /* 4: File owner. */
  111. uint32_t di_gid; /* 8: File group. */
  112. uint32_t di_blksize; /* 12: Inode blocksize. */
  113. uint64_t di_size; /* 16: File byte count. */
  114. uint64_t di_blocks; /* 24: Blocks actually held. */
  115. ufs_time_t di_atime; /* 32: Last access time. */
  116. ufs_time_t di_mtime; /* 40: Last modified time. */
  117. ufs_time_t di_ctime; /* 48: Last inode change time. */
  118. ufs_time_t di_birthtime; /* 56: Inode creation time. */
  119. int32_t di_mtimensec; /* 64: Last modified time. */
  120. int32_t di_atimensec; /* 68: Last access time. */
  121. int32_t di_ctimensec; /* 72: Last inode change time. */
  122. int32_t di_birthnsec; /* 76: Inode creation time. */
  123. uint32_t di_gen; /* 80: Generation number. */
  124. uint32_t di_kernflags; /* 84: Kernel flags. */
  125. uint32_t di_flags; /* 88: Status flags (chflags). */
  126. uint32_t di_extsize; /* 92: External attributes size. */
  127. ufs2_daddr_t di_extb[UFS_NXADDR];/* 96: External attributes block. */
  128. ufs2_daddr_t di_db[UFS_NDADDR]; /* 112: Direct disk blocks. */
  129. ufs2_daddr_t di_ib[UFS_NIADDR]; /* 208: Indirect disk blocks. */
  130. uint64_t di_modrev; /* 232: i_modrev for NFSv4 */
  131. uint32_t di_freelink; /* 240: SUJ: Next unlinked inode. */
  132. uint32_t di_spare[3]; /* 244: Reserved; currently unused */
  133. } ufs2_dinode;
  134. /*
  135. * The di_db fields may be overlaid with other information for
  136. * file types that do not have associated disk storage. Block
  137. * and character devices overlay the first data block with their
  138. * dev_t value. Short symbolic links place their path in the
  139. * di_db area.
  140. */
  141. #define di_rdev di_db[0]