All of lore.kernel.org
 help / color / mirror / Atom feed
From: "罗勇刚(Yonggang Luo)" <luoyonggang@gmail.com>
To: Peter Lieven <pl@kamp.de>
Cc: Kevin Wolf <kwolf@redhat.com>, Ed Maste <emaste@freebsd.org>,
	Michael Roth <mdroth@linux.vnet.ibm.com>,
	qemu block <qemu-block@nongnu.org>, Stefan Weil <sw@weilnetz.de>,
	Xie Changlong <xiechanglong.d@gmail.com>,
	Richard Henderson <richard.henderson@linaro.org>,
	qemu-devel <qemu-devel@nongnu.org>, Max Reitz <mreitz@redhat.com>,
	Gerd Hoffmann <kraxel@redhat.com>,
	Wen Congyang <wencongyang2@huawei.com>,
	Paolo Bonzini <pbonzini@redhat.com>,
	Li-Wen Hsu <lwhsu@freebsd.org>,
	Markus Armbruster <armbru@redhat.com>
Subject: Re: [PATCH v7 03/25] block: Fixes nfs compiling error on msys2/mingw
Date: Fri, 11 Sep 2020 04:36:33 +0800	[thread overview]
Message-ID: <CAE2XoE9LHFovy+nh8z5xGrCzs+goKgJ+iTd67Zt-1k6UPx=Pxg@mail.gmail.com> (raw)
In-Reply-To: <90DDF8F4-4AC0-42E8-85DA-4CC38C066F45@kamp.de>

[-- Attachment #1: Type: text/plain, Size: 7647 bytes --]

On Fri, Sep 11, 2020 at 4:16 AM Peter Lieven <pl@kamp.de> wrote:

>
>
> Am 10.09.2020 um 12:30 schrieb Yonggang Luo <luoyonggang@gmail.com>:
>
> These compiling errors are fixed:
> ../block/nfs.c:27:10: fatal error: poll.h: No such file or directory
>   27 | #include <poll.h>
>      |          ^~~~~~~~
> compilation terminated.
>
> ../block/nfs.c:63:5: error: unknown type name 'blkcnt_t'
>   63 |     blkcnt_t st_blocks;
>      |     ^~~~~~~~
> ../block/nfs.c: In function 'nfs_client_open':
> ../block/nfs.c:550:27: error: 'struct _stat64' has no member named
> 'st_blocks'
>  550 |     client->st_blocks = st.st_blocks;
>      |                           ^
> ../block/nfs.c: In function 'nfs_get_allocated_file_size':
> ../block/nfs.c:751:41: error: 'struct _stat64' has no member named
> 'st_blocks'
>  751 |     return (task.ret < 0 ? task.ret : st.st_blocks * 512);
>      |                                         ^
> ../block/nfs.c: In function 'nfs_reopen_prepare':
> ../block/nfs.c:805:31: error: 'struct _stat64' has no member named
> 'st_blocks'
>  805 |         client->st_blocks = st.st_blocks;
>      |                               ^
> ../block/nfs.c: In function 'nfs_get_allocated_file_size':
> ../block/nfs.c:752:1: error: control reaches end of non-void function
> [-Werror=return-type]
>  752 | }
>      | ^
>
> On msys2/mingw, there is no st_blocks in struct _stat64, so we use
> consistence st_size instead.
>
> Signed-off-by: Yonggang Luo <luoyonggang@gmail.com>
> ---
> block/nfs.c | 32 +++++++++++++++++++++++++-------
> 1 file changed, 25 insertions(+), 7 deletions(-)
>
> diff --git a/block/nfs.c b/block/nfs.c
> index 61a249a9fc..db6d8c2d2b 100644
> --- a/block/nfs.c
> +++ b/block/nfs.c
> @@ -24,7 +24,9 @@
>
> #include "qemu/osdep.h"
>
> +#if !defined(_WIN32)
> #include <poll.h>
> +#endif
> #include "qemu/config-file.h"
> #include "qemu/error-report.h"
> #include "qapi/error.h"
> @@ -51,6 +53,13 @@
> #define QEMU_NFS_MAX_PAGECACHE_SIZE (8388608 / NFS_BLKSIZE)
> #define QEMU_NFS_MAX_DEBUG_LEVEL 2
>
> +#if defined (_WIN32)
> +#define nfs_stat __stat64
> +typedef long long blkcnt_t;
> +#else
> +#define nfs_stat stat
> +#endif
> +
> typedef struct NFSClient {
>     struct nfs_context *context;
>     struct nfsfh *fh;
> @@ -70,7 +79,7 @@ typedef struct NFSRPC {
>     int ret;
>     int complete;
>     QEMUIOVector *iov;
> -    struct stat *st;
> +    struct nfs_stat *st;
>     Coroutine *co;
>     NFSClient *client;
> } NFSRPC;
> @@ -415,11 +424,20 @@ static void nfs_file_close(BlockDriverState *bs)
>     nfs_client_close(client);
> }
>
> +static blkcnt_t nfs_get_st_blocks(const struct nfs_stat *st)
> +{
> +#if defined(_WIN32)
> +    return (st->st_size + 511) / 512;
> +#else
> +    return st->st_blocks;
> +#endif
> +}
> +
> static int64_t nfs_client_open(NFSClient *client, BlockdevOptionsNfs *opts,
>                                int flags, int open_flags, Error **errp)
> {
>     int64_t ret = -EINVAL;
> -    struct stat st;
> +    struct nfs_stat st;
>     char *file = NULL, *strp = NULL;
>
>     qemu_mutex_init(&client->mutex);
> @@ -545,7 +563,7 @@ static int64_t nfs_client_open(NFSClient *client,
> BlockdevOptionsNfs *opts,
>     }
>
>     ret = DIV_ROUND_UP(st.st_size, BDRV_SECTOR_SIZE);
> -    client->st_blocks = st.st_blocks;
> +    client->st_blocks = nfs_get_st_blocks(&st);
>     client->has_zero_init = S_ISREG(st.st_mode);
>     *strp = '/';
>     goto out;
> @@ -729,7 +747,7 @@ static int64_t
> nfs_get_allocated_file_size(BlockDriverState *bs)
> {
>     NFSClient *client = bs->opaque;
>     NFSRPC task = {0};
> -    struct stat st;
> +    struct nfs_stat st;
>
>     if (bdrv_is_read_only(bs) &&
>         !(bs->open_flags & BDRV_O_NOCACHE)) {
> @@ -746,7 +764,7 @@ static int64_t
> nfs_get_allocated_file_size(BlockDriverState *bs)
>     nfs_set_events(client);
>     BDRV_POLL_WHILE(bs, !task.complete);
>
> -    return (task.ret < 0 ? task.ret : st.st_blocks * 512);
> +    return (task.ret < 0 ? task.ret : nfs_get_st_blocks(&st) * 512);
> }
>
> static int coroutine_fn
> @@ -778,7 +796,7 @@ static int nfs_reopen_prepare(BDRVReopenState *state,
>                               BlockReopenQueue *queue, Error **errp)
> {
>     NFSClient *client = state->bs->opaque;
> -    struct stat st;
> +    struct nfs_stat st;
>     int ret = 0;
>
>     if (state->flags & BDRV_O_RDWR && bdrv_is_read_only(state->bs)) {
> @@ -800,7 +818,7 @@ static int nfs_reopen_prepare(BDRVReopenState *state,
>                        nfs_get_error(client->context));
>             return ret;
>         }
> -        client->st_blocks = st.st_blocks;
> +        client->st_blocks = nfs_get_st_blocks(&st);
>     }
>
>     return 0;
> --
> 2.28.0.windows.1
>
>
>
> You still implement nfs_get_allocated_file_size without actually returning
> the allocated file size on WIN32.
> I would simply do this:
>
> *diff --git a/block/nfs.c b/block/nfs.c*
> *index 61a249a..0983143 100644*
> *--- a/block/nfs.c*
> *+++ b/block/nfs.c*
> @@ -24,7 +24,9 @@
>
>
>  #include "qemu/osdep.h"
>
>
> +#if !defined(_WIN32)
>  #include <poll.h>
> +#endif
>  #include "qemu/config-file.h"
>  #include "qemu/error-report.h"
>  #include "qapi/error.h"
> @@ -58,7 +60,9 @@ typedef struct NFSClient {
>      bool has_zero_init;
>      AioContext *aio_context;
>      QemuMutex mutex;
> +#if !defined(_WIN32)
>      blkcnt_t st_blocks;
> +#endif
>      bool cache_used;
>      NFSServer *server;
>      char *path;
> @@ -545,7 +549,9 @@ static int64_t nfs_client_open(NFSClient *client,
> BlockdevOptionsNfs *opts,
>      }
>
>
>      ret = DIV_ROUND_UP(st.st_size, BDRV_SECTOR_SIZE);
> +#if !defined(_WIN32)
>      client->st_blocks = st.st_blocks;
> +#endif
>      client->has_zero_init = S_ISREG(st.st_mode);
>      *strp = '/';
>      goto out;
> @@ -706,6 +712,8 @@ static int nfs_has_zero_init(BlockDriverState *bs)
>      return client->has_zero_init;
>  }
>
>
> +
> +#if !defined(_WIN32)
>  /* Called (via nfs_service) with QemuMutex held.  */
>  static void
>  nfs_get_allocated_file_size_cb(int ret, struct nfs_context *nfs, void
> *data,
> @@ -748,6 +756,7 @@ static int64_t
> nfs_get_allocated_file_size(BlockDriverState *bs)
>
>
>      return (task.ret < 0 ? task.ret : st.st_blocks * 512);
>  }
> +#endif
>
>
>  static int coroutine_fn
>  nfs_file_co_truncate(BlockDriverState *bs, int64_t offset, bool exact,
> @@ -792,6 +801,7 @@ static int nfs_reopen_prepare(BDRVReopenState *state,
>          return -EINVAL;
>      }
>
>
> +#if !defined(_WIN32)
>      /* Update cache for read-only reopens */
>      if (!(state->flags & BDRV_O_RDWR)) {
>          ret = nfs_fstat(client->context, client->fh, &st);
> @@ -802,6 +812,7 @@ static int nfs_reopen_prepare(BDRVReopenState *state,
>          }
>          client->st_blocks = st.st_blocks;
>      }
> +#endif
>
>
>      return 0;
>  }
> @@ -869,7 +880,9 @@ static BlockDriver bdrv_nfs = {
>      .create_opts                    = &nfs_create_opts,
>
>
>      .bdrv_has_zero_init             = nfs_has_zero_init,
> +#if !defined(_WIN32)
>      .bdrv_get_allocated_file_size   = nfs_get_allocated_file_size,
> +#endif
>      .bdrv_co_truncate               = nfs_file_co_truncate,
>
>
>      .bdrv_file_open                 = nfs_file_open,
>
>
> Best,
> Peter
>
Any git repo have this patch? I can cherry-pick it directly


-- 
         此致
礼
罗勇刚
Yours
    sincerely,
Yonggang Luo

[-- Attachment #2: Type: text/html, Size: 24656 bytes --]

  reply	other threads:[~2020-09-10 20:37 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-09-10 10:30 [PATCH v7 00/25] W32, W64 msys2/mingw patches Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 01/25] file-win32: Fix "locking" option Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 02/25] rcu: Implement drain_call_rcu Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 03/25] block: Fixes nfs compiling error on msys2/mingw Yonggang Luo
2020-09-10 20:16   ` Peter Lieven
2020-09-10 20:36     ` 罗勇刚(Yonggang Luo) [this message]
2020-09-13 18:58       ` Peter Lieven
2020-09-10 10:30 ` [PATCH v7 04/25] ci: fixes msys2 build by upgrading capstone to 4.0.2 Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 05/25] configure: Fixes ncursesw detection under msys2/mingw and enable curses Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 06/25] win32: Simplify gmtime_r detection direct base on _POSIX_THREAD_SAFE_FUNCTIONS Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 07/25] curses: Fixes curses compiling errors Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 08/25] tests: disable /char/stdio/* tests in test-char.c on win32 Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 09/25] tests: Fixes test-replication.c on msys2/mingw Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 10/25] tests: test-replication disable /replication/secondary/* " Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 11/25] osdep: file locking functions are not available on Win32 Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 12/25] meson: Use -b to ignore CR vs. CR-LF issues on Windows Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 13/25] gcrypt: test_tls_psk_init should write binary file instead text file Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 14/25] tests: Enable crypto tests under msys2/mingw Yonggang Luo
2020-09-10 10:30 ` [PATCH v7 15/25] meson: remove empty else and duplicated gio deps Yonggang Luo
2020-09-10 11:20   ` Thomas Huth
2020-09-10 10:30 ` [PATCH v7 16/25] vmstate: Fixes test-vmstate.c on msys2/mingw Yonggang Luo

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAE2XoE9LHFovy+nh8z5xGrCzs+goKgJ+iTd67Zt-1k6UPx=Pxg@mail.gmail.com' \
    --to=luoyonggang@gmail.com \
    --cc=armbru@redhat.com \
    --cc=emaste@freebsd.org \
    --cc=kraxel@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=lwhsu@freebsd.org \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=mreitz@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=pl@kamp.de \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=richard.henderson@linaro.org \
    --cc=sw@weilnetz.de \
    --cc=wencongyang2@huawei.com \
    --cc=xiechanglong.d@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.