Btw, given that you're micro-optimizing in this area: block devices still use ->direct_IO in the I/O path. It might make sense to switch to the model of the file systems that use iomap where we avoid that indirect call and can optimize the code for the direct I/O fast path. With that you woudn't even end up using this i_size_read at all