Skip to content

Commit 13e12d1

Browse files
committed
vfs: reorganize 'struct inode' layout a bit
This tries to make the 'struct inode' accesses denser in the data cache by moving a commonly accessed field (i_security) closer to other fields that are accessed often. It also makes 'i_state' just an 'unsigned int' rather than 'unsigned long', since we only use a few bits of that field, and moves it next to the existing 'i_flags' so that we potentially get better structure layout (although depending on config options, i_flags may already have packed in the same word as i_lock, so this improves packing only for the case of spinlock debugging) Out 'struct inode' is still way too big, and we should probably move some other fields around too (the acl fields in particular) for better data cache access density. Other fields (like the inode hash) are likely to be entirely irrelevant under most loads. Signed-off-by: Linus Torvalds <[email protected]>
1 parent 95f4efb commit 13e12d1

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

include/linux/fs.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -744,9 +744,13 @@ struct inode {
744744

745745
spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */
746746
unsigned int i_flags;
747+
unsigned int i_state;
748+
#ifdef CONFIG_SECURITY
749+
void *i_security;
750+
#endif
747751
struct mutex i_mutex;
748752

749-
unsigned long i_state;
753+
750754
unsigned long dirtied_when; /* jiffies of first dirtying */
751755

752756
struct hlist_node i_hash;
@@ -798,9 +802,6 @@ struct inode {
798802
atomic_t i_readcount; /* struct files open RO */
799803
#endif
800804
atomic_t i_writecount;
801-
#ifdef CONFIG_SECURITY
802-
void *i_security;
803-
#endif
804805
#ifdef CONFIG_FS_POSIX_ACL
805806
struct posix_acl *i_acl;
806807
struct posix_acl *i_default_acl;

0 commit comments

Comments
 (0)