Skip to content
  • Linus Torvalds's avatar
    vfs: i_state needs to be 'unsigned long' for now · 79568f5b
    Linus Torvalds authored
    Commit 13e12d14 ("vfs: reorganize 'struct inode' layout a bit")
    moved things around a bit changed i_state to be unsigned int instead of
    unsigned long.  That was to help structure layout for the 64-bit case,
    and shrink 'struct inode' a bit (admittedly that only happened when
    spinlock debugging was on and i_flags didn't pack with i_lock).
    
    However, Meelis Roos reports that this results in unaligned exceptions
    on sprc, and it turns out that the bit-locking primitives that we use
    for the I_NEW bit want to use the bitops.  Which want 'unsigned long',
    not 'unsigned int'.
    
    We really should fix the bit locking code to not have that kind of
    requirement, but that's a much bigger change.  So for now, revert that
    field back to 'unsigned long' (but keep the other re-ordering changes
    from the commit that caused this).
    
    Andi points out that we have played games with this in 'struct page', so
    it's solvable with other hacks too, but since right now the struct inode
    size...
    79568f5b