While tracking down a problem, I ran into a problem due to the 'struct inode'
declaration in SLES8 having been modified from the stock kernel version. In
the SLES8 sources, struct inode contains two items right after the filesystem
specific portion of the inode structure. Those items are:
#ifdef __NEED_I_SIZE_ORDERED
volatile int i_size_version1;
volatile int i_size_version2;
#endif
and inline functions are defined for manipulating those items.
My question is: Why were these fields added *AFTER* the filesystem specific
portion, rather than before that union? On 2.6 it also appears
at the end, but there the union of filesystem specific data has
been removed in favour of a single pointer (void *generic_ip),
making the choice there make a lot more sense.
Reason for asking is that OpenAFS uses a modification of the inode struct to
represent vnodes. Since it does not need the filesystem specific portion, it
can save about 176 bytes by not including that union. With these two items
added, any code that could do the same now suddenly has to take a hit of about
176 bytes per instance of that structure.
Kris