From: Andrew Morton <[email protected]>
> You propose to remove i_blksize.
> It is used in stat only, so we have to produce some value for stat.
> Do you want to replace
> inode->i_blksize
> by
> inode->i_sb->s_optimal_io_size
> ?
No, that's different. You are referring to stat.st_blksize. That is a
different animal, and we can leave that alone.
inode->i_blksize is equal to (1 << inode->i_blkbits) always, all the time.
It is just duplicated nonsense and usually leads to poorer code -
multiplications instead of shifts.
It should be a pretty easy incremental set of patches to ease i_blksize out
of the kernel.
Hmm. Let me first read stat.c.
generic_fillattr():
stat->blksize = inode->i_blksize;
vfs_getattr():
generic_fillattr(inode, stat);
if (!stat->blksize)
stat->blksize = s->s_blocksize;
cp_new_stat64():
tmp.st_blksize = stat->blksize;
copy_to_user(statbuf, &tmp, sizeof(tmp));
So really, if inode->i_blksize has a nonzero value,
this value is returned in stat.st_blksize.
Remains your other claim: inode->i_blksize == (1 << inode->i_blkbits).
I don't see any code that would enforce that.
Andries
[and there are lots of comments around:
inode->i_blksize = PAGE_SIZE; /* This is the optimal IO size ... */
]
Maybe also a good candidate for renaming if it is not eliminated?
[email protected] wrote:
>
> Hmm. Let me first read stat.c.
hmm indeed. Looks like I got myself confused:
fs/ext2/ialloc.c: inode->i_blksize = PAGE_SIZE; /* This is the optimal IO size (for stat), not the fs block size */