On Wed, Nov 28, 2012 at 6:58 PM, Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> wrote: > > But the fact that the code wants to do things like > > block = (sector_t)page->index << (PAGE_CACHE_SHIFT - bbits); > > seriously seems to be the main thing that keeps us using > 'inode->i_blkbits'. Calculating bbits from bh->b_size is just costly > enough to hurt (not everywhere, but on some machines). > > Very annoying. Hmm. Here's a patch that does that anyway. I'm not 100% happy with the whole ilog2 thing, but at the same time, in other cases it actually seems to improve code generation (ie gets rid of the whole unnecessary two dereferences through page->mapping->host just to get the block size, when we have it in the buffer-head that we have to touch *anyway*). Comments? Again, untested. And I notice that Al Viro hasn't been cc'd, which is sad, since he's been involved in much of fs/block_dev.c. Al - this is an independent patch to fs/buffer.c to make fs/block_dev.c able to change the block size of a block device while there is IO in progress that may still use the old block size. The discussion has been on fsdevel and lkml, but you may have missed it... Linus
Attachment:
patch.diff
Description: Binary data