Re: [regression] fix 32-bit breakage in block device read(2) (was Re: 32-bit bug in iovec iterator changes)

Bruno Wolff III
2014-06-26T15:35:19Z

On Mon, Jun 23, 2014 at 08:44:40 +0100,
Al Viro <viro@ZenIV.linux.org.uk> wrote:
>
>blkdev_read_iter() wants to cap the iov_iter by the amount of
>data remaining to the end of device. That's what iov_iter_truncate()
>is for (trim iter->count if it's above the given limit). So far,
>so good, but the argument of iov_iter_truncate() is size_t, so on
>32bit boxen (in case of a large device) we end up with that upper
>limit truncated down to 32 bits *before* comparing it with iter->count.

This seems to fix a problem I had
(https://bugzilla.kernel.org/show_bug.cgi?id=78711) with a partition device
(/dev/sda3) being zero size on 3.16 kernels. However I am having some
other issues with 3.16 on i686 and the amount of testing was the raid
array using /dev/sda3 appeared to start (which it hadn't previously), but
the system hung before finishing the boot process.