qemu-block
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-block] [RFC PATCH v2 4/7] file-posix: Implement bdrv_co_copy_r


From: Stefan Hajnoczi
Subject: Re: [Qemu-block] [RFC PATCH v2 4/7] file-posix: Implement bdrv_co_copy_range
Date: Thu, 3 May 2018 10:25:28 +0100
User-agent: Mutt/1.9.2 (2017-12-15)

On Wed, Apr 18, 2018 at 11:04:21AM +0800, Fam Zheng wrote:
> diff --git a/block/file-posix.c b/block/file-posix.c
> index 3794c0007a..45ad543481 100644
> --- a/block/file-posix.c
> +++ b/block/file-posix.c
> @@ -100,6 +100,7 @@
>  #ifdef CONFIG_XFS
>  #include <xfs/xfs.h>
>  #endif
> +#include <sys/syscall.h>

Is sys/syscall.h available on all systems?  I wasn't able to find it in
the POSIX specs.

>  
>  //#define DEBUG_BLOCK
>  
> @@ -185,6 +186,8 @@ typedef struct RawPosixAIOData {
>  #define aio_ioctl_cmd   aio_nbytes /* for QEMU_AIO_IOCTL */
>      off_t aio_offset;
>      int aio_type;
> +    int fd2;
> +    off_t offset2;

Is there a reason for abandoning the aio_* field naming convention?

>  } RawPosixAIOData;
>  
>  #if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
> @@ -1421,6 +1424,48 @@ static ssize_t 
> handle_aiocb_write_zeroes(RawPosixAIOData *aiocb)
>      return -ENOTSUP;
>  }
>  
> +#ifdef __NR_copy_file_range
> +#define HAS_COPY_FILE_RANGE
> +#endif
> +
> +#ifdef HAS_COPY_FILE_RANGE
> +static off_t copy_file_range(int in_fd, off_t *in_off, int out_fd,
> +                             off_t *out_off, size_t len, unsigned int flags)
> +{
> +    return syscall(__NR_copy_file_range, in_fd, in_off, out_fd,
> +                   out_off, len, flags);
> +}
> +#endif

Further #ifdefs can be avoided by providing an implementation here:

#else
static off_t copy_file_range(int in_fd, off_t *in_off, int out_fd,
                             off_t *out_off, size_t len, unsigned int flags)
{
    errno = ENOSYS;
    return -1;
}
#endif /* !HAS_COPY_FILE_RANGE */

Attachment: signature.asc
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]