Re: [PATCH] block_dev: implement readpages() to optimize sequential read

From: Akinobu Mita
Date: Wed Jul 23 2014 - 12:18:43 EST


2014-07-18 8:14 GMT+09:00 Akinobu Mita <akinobu.mita@xxxxxxxxx>:
> 2014-07-18 3:31 GMT+09:00 Jeff Moyer <jmoyer@xxxxxxxxxx>:
>> Akinobu Mita <akinobu.mita@xxxxxxxxx> writes:
>>
>>> Sequential read from a block device is expected to be equal or faster
>>> than from the file on a filesystem. But it is not correct due to the
>>> lack of effective readpages() in the address space operations for
>>> block device.
>>
>> Ah, a trip down memory lane. ;-) Here's a thread showing issues with
>> the last time this was proposed (by me, incidentally):
>>
>> https://lkml.org/lkml/2009/6/2/480
>>
>> At the very least, we need to see numbers on a real device, and see it
>> booted on something with >4k page size before taking this back in.
>
> Thanks for the information. First, I'll try to reproduce the >4k page
> size issue with qemu with the architecture which can support 64k page.

I can reproduce the issue which attempts to access beyond end of
device, and it turns out that this can be reproducible on 4K page
system, too.

This problem only happens when reading a partition which is being
mounted by the filesystem at the same time. The filesystem sets
the blocksize to a multiple of the logical block size by set_blocksize()
while it is mounted. If the end of the partition is not aligned on
the new blocksize, reading the end of the partition causes access
beyond end of device.

So this patch is incomplete, and some guard check code is required in
mpage_readpages() or altenative solution is needed.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/