Re: [PATCH 2/2] copy: always align to at least page size

"Darrick J. Wong" <[email protected]> Wed, 29 Jul 2026 08:30:35 -0700
Newsgroups org.kernel.vger.linux-xfs
Message-ID <20260729153035.GX2901224@frogsfrogsfrogs>
On Wed, Jul 29, 2026 at 02:58:57PM +0200, Christoph Hellwig wrote:
> The buffers used by xfs_copy need to fit the alignment of both the source
> and target.  As we can't rely on statx for more detailed information yet,
> work around this by never going below the default page size alignment.
> 
> This fixes copy an image from an xfs file systems on a NVMe device that
> only reqires dword alignment to a virtio_blk device that requires
> 512-byte alignment.
> 
> Signed-off-by: Christoph Hellwig <[email protected]>

Mmmmmm, fun...
Reviewed-by: "Darrick J. Wong" <[email protected]>

--D

> ---
>  copy/xfs_copy.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/copy/xfs_copy.c b/copy/xfs_copy.c
> index ad18ceb1ac1b..5435c87dba38 100644
> --- a/copy/xfs_copy.c
> +++ b/copy/xfs_copy.c
> @@ -673,6 +673,7 @@ main(int argc, char **argv)
>  	if (S_ISREG(statbuf.st_mode))
>  		source_is_file = 1;
>  
> +	wbuf_align = getpagesize();
>  	if (source_is_file && platform_test_xfs_fd(source_fd))  {
>  		if (fcntl(source_fd, F_SETFL, open_flags | O_DIRECT) < 0)  {
>  			do_log(_("%s: Cannot set direct I/O flag on \"%s\".\n"),
> @@ -685,13 +686,12 @@ main(int argc, char **argv)
>  			die_perror();
>  		}
>  
> -		wbuf_align = d.d_mem;
> +		wbuf_align = max(wbuf_align, d.d_mem);
>  		wbuf_size = min(d.d_maxiosz, 1 * 1024 * 1024);
>  		wbuf_miniosize = d.d_miniosz;
>  	} else  {
>  		/* set arbitrary I/O params, miniosize at least 1 disk block */
>  
> -		wbuf_align = getpagesize();
>  		wbuf_size = 1 * 1024 * 1024;
>  		wbuf_miniosize = -1;	/* set after mounting source fs */
>  	}
> -- 
> 2.53.0
> 
>