Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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 <torvalds@linux-foundation.org>

+5 -4
+5 -4
include/linux/fs.h
··· 744 744 745 745 spinlock_t i_lock; /* i_blocks, i_bytes, maybe i_size */ 746 746 unsigned int i_flags; 747 + unsigned int i_state; 748 + #ifdef CONFIG_SECURITY 749 + void *i_security; 750 + #endif 747 751 struct mutex i_mutex; 748 752 749 - unsigned long i_state; 753 + 750 754 unsigned long dirtied_when; /* jiffies of first dirtying */ 751 755 752 756 struct hlist_node i_hash; ··· 802 798 atomic_t i_readcount; /* struct files open RO */ 803 799 #endif 804 800 atomic_t i_writecount; 805 - #ifdef CONFIG_SECURITY 806 - void *i_security; 807 - #endif 808 801 #ifdef CONFIG_FS_POSIX_ACL 809 802 struct posix_acl *i_acl; 810 803 struct posix_acl *i_default_acl;