~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/fs/jfs/jfs_dinode.h

Version: ~ [ linux-6.11-rc3 ] ~ [ linux-6.10.4 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.45 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.104 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.164 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.223 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.281 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.319 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0-or-later */
  2 /*
  3  *   Copyright (C) International Business Machines Corp., 2000-2001
  4  */
  5 #ifndef _H_JFS_DINODE
  6 #define _H_JFS_DINODE
  7 
  8 /*
  9  *      jfs_dinode.h: on-disk inode manager
 10  */
 11 
 12 #define INODESLOTSIZE           128
 13 #define L2INODESLOTSIZE         7
 14 #define log2INODESIZE           9       /* log2(bytes per dinode) */
 15 
 16 
 17 /*
 18  *      on-disk inode : 512 bytes
 19  *
 20  * note: align 64-bit fields on 8-byte boundary.
 21  */
 22 struct dinode {
 23         /*
 24          *      I. base area (128 bytes)
 25          *      ------------------------
 26          *
 27          * define generic/POSIX attributes
 28          */
 29         __le32 di_inostamp;     /* 4: stamp to show inode belongs to fileset */
 30         __le32 di_fileset;      /* 4: fileset number */
 31         __le32 di_number;       /* 4: inode number, aka file serial number */
 32         __le32 di_gen;          /* 4: inode generation number */
 33 
 34         pxd_t di_ixpxd;         /* 8: inode extent descriptor */
 35 
 36         __le64 di_size;         /* 8: size */
 37         __le64 di_nblocks;      /* 8: number of blocks allocated */
 38 
 39         __le32 di_nlink;        /* 4: number of links to the object */
 40 
 41         __le32 di_uid;          /* 4: user id of owner */
 42         __le32 di_gid;          /* 4: group id of owner */
 43 
 44         __le32 di_mode;         /* 4: attribute, format and permission */
 45 
 46         struct timestruc_t di_atime;    /* 8: time last data accessed */
 47         struct timestruc_t di_ctime;    /* 8: time last status changed */
 48         struct timestruc_t di_mtime;    /* 8: time last data modified */
 49         struct timestruc_t di_otime;    /* 8: time created */
 50 
 51         dxd_t di_acl;           /* 16: acl descriptor */
 52 
 53         dxd_t di_ea;            /* 16: ea descriptor */
 54 
 55         __le32 di_next_index;   /* 4: Next available dir_table index */
 56 
 57         __le32 di_acltype;      /* 4: Type of ACL */
 58 
 59         /*
 60          *      Extension Areas.
 61          *
 62          *      Historically, the inode was partitioned into 4 128-byte areas,
 63          *      the last 3 being defined as unions which could have multiple
 64          *      uses.  The first 96 bytes had been completely unused until
 65          *      an index table was added to the directory.  It is now more
 66          *      useful to describe the last 3/4 of the inode as a single
 67          *      union.  We would probably be better off redesigning the
 68          *      entire structure from scratch, but we don't want to break
 69          *      commonality with OS/2's JFS at this time.
 70          */
 71         union {
 72                 struct {
 73                         /*
 74                          * This table contains the information needed to
 75                          * find a directory entry from a 32-bit index.
 76                          * If the index is small enough, the table is inline,
 77                          * otherwise, an x-tree root overlays this table
 78                          */
 79                         struct dir_table_slot _table[12]; /* 96: inline */
 80 
 81                         dtroot_t _dtroot;               /* 288: dtree root */
 82                 } _dir;                                 /* (384) */
 83 #define di_dirtable     u._dir._table
 84 #define di_dtroot       u._dir._dtroot
 85 #define di_parent       di_dtroot.header.idotdot
 86 #define di_DASD         di_dtroot.header.DASD
 87 
 88                 struct {
 89                         union {
 90                                 u8 _data[96];           /* 96: unused */
 91                                 struct {
 92                                         void *_imap;    /* 4: unused */
 93                                         __le32 _gengen; /* 4: generator */
 94                                 } _imap;
 95                         } _u1;                          /* 96: */
 96 #define di_gengen       u._file._u1._imap._gengen
 97 
 98                         union {
 99                                 xtroot_t _xtroot;
100                                 struct {
101                                         u8 unused[16];  /* 16: */
102                                         dxd_t _dxd;     /* 16: */
103                                         union {
104                                                 /*
105                                                  * The fast symlink area
106                                                  * is expected to overflow
107                                                  * into _inlineea when
108                                                  * needed (which will clear
109                                                  * INLINEEA).
110                                                  */
111                                                 struct {
112                                                         union {
113                                                                 __le32 _rdev;   /* 4: */
114                                                                 u8 _fastsymlink[128];
115                                                         } _u;
116                                                         u8 _inlineea[128];
117                                                 };
118                                                 u8 _inline_all[256];
119                                         };
120                                 } _special;
121                         } _u2;
122                 } _file;
123 #define di_xtroot       u._file._u2._xtroot
124 #define di_dxd          u._file._u2._special._dxd
125 #define di_btroot       di_xtroot
126 #define di_inlinedata   u._file._u2._special._u
127 #define di_rdev         u._file._u2._special._u._rdev
128 #define di_fastsymlink  u._file._u2._special._u._fastsymlink
129 #define di_inlineea     u._file._u2._special._inlineea
130 #define di_inline_all   u._file._u2._special._inline_all
131         } u;
132 };
133 
134 /* extended mode bits (on-disk inode di_mode) */
135 #define IFJOURNAL       0x00010000      /* journalled file */
136 #define ISPARSE         0x00020000      /* sparse file enabled */
137 #define INLINEEA        0x00040000      /* inline EA area free */
138 #define ISWAPFILE       0x00800000      /* file open for pager swap space */
139 
140 /* more extended mode bits: attributes for OS/2 */
141 #define IREADONLY       0x02000000      /* no write access to file */
142 #define IHIDDEN         0x04000000      /* hidden file */
143 #define ISYSTEM         0x08000000      /* system file */
144 
145 #define IDIRECTORY      0x20000000      /* directory (shadow of real bit) */
146 #define IARCHIVE        0x40000000      /* file archive bit */
147 #define INEWNAME        0x80000000      /* non-8.3 filename format */
148 
149 #define IRASH           0x4E000000      /* mask for changeable attributes */
150 #define ATTRSHIFT       25      /* bits to shift to move attribute
151                                    specification to mode position */
152 
153 /* extended attributes for Linux */
154 
155 #define JFS_NOATIME_FL          0x00080000 /* do not update atime */
156 
157 #define JFS_DIRSYNC_FL          0x00100000 /* dirsync behaviour */
158 #define JFS_SYNC_FL             0x00200000 /* Synchronous updates */
159 #define JFS_SECRM_FL            0x00400000 /* Secure deletion */
160 #define JFS_UNRM_FL             0x00800000 /* allow for undelete */
161 
162 #define JFS_APPEND_FL           0x01000000 /* writes to file may only append */
163 #define JFS_IMMUTABLE_FL        0x02000000 /* Immutable file */
164 
165 #define JFS_FL_USER_VISIBLE     0x03F80000
166 #define JFS_FL_USER_MODIFIABLE  0x03F80000
167 #define JFS_FL_INHERIT          0x03C80000
168 
169 #endif /*_H_JFS_DINODE */
170 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php