[Cluster-devel] [GFS2 PATCH] GFS2: Fix direct IO write rounding error

Steven Whitehouse swhiteho at redhat.com
Thu Jan 28 13:29:18 UTC 2016


Hi,

On 28/01/16 13:24, Bob Peterson wrote:
> Hi,
>
> The fsx test in xfstests was failing because it was using direct IO
> writes which were using a bad calculation. It was using
> loff_t lstart = offset & (PAGE_CACHE_SIZE - 1); when it should be
> loff_t lstart = offset & ~(PAGE_CACHE_SIZE - 1);
> Thus, the write at offset 0x67e00 was calculating lstart to be
> 0xe00, the address of our corruption. Instead, it should have been
> 0x67000. This patch fixes the calculation.
>
> Regards,
>
> Bob Peterson
> Red Hat File Systems
>
> Signed-off-by: Bob Peterson <rpeterso at redhat.com>
Acked-by: Steven Whitehouse <swhiteho at redhat.com>

Steve.

> ---
> diff --git a/fs/gfs2/aops.c b/fs/gfs2/aops.c
> index 93f0746..aa016e4 100644
> --- a/fs/gfs2/aops.c
> +++ b/fs/gfs2/aops.c
> @@ -1082,7 +1082,7 @@ static ssize_t gfs2_direct_IO(struct kiocb *iocb, struct iov_iter *iter,
>   	 * the first place, mapping->nr_pages will always be zero.
>   	 */
>   	if (mapping->nrpages) {
> -		loff_t lstart = offset & (PAGE_CACHE_SIZE - 1);
> +		loff_t lstart = offset & ~(PAGE_CACHE_SIZE - 1);
>   		loff_t len = iov_iter_count(iter);
>   		loff_t end = PAGE_ALIGN(offset + len) - 1;
>   
>




More information about the Cluster-devel mailing list