aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Maydell <peter.maydell@linaro.org>2023-04-12 18:34:42 +0100
committerPeter Maydell <peter.maydell@linaro.org>2023-04-12 18:34:42 +0100
commit9d177b7f87d96d1ed8fd16e222a37bd1ac8a0cd8 (patch)
treee714512789482c2ed0d59e0122a801bcb6755741
parent77a87a07224b1e8167c99213065f5244bdbeca83 (diff)
parent3fe64abcde55cf6f4ea5883106301baad219a7cc (diff)
downloadqemu-9d177b7f87d96d1ed8fd16e222a37bd1ac8a0cd8.zip
qemu-9d177b7f87d96d1ed8fd16e222a37bd1ac8a0cd8.tar.gz
qemu-9d177b7f87d96d1ed8fd16e222a37bd1ac8a0cd8.tar.bz2
Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging
Fix NFS driver issue. # -----BEGIN PGP SIGNATURE----- # # iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmQ22+MUHHBib256aW5p # QHJlZGhhdC5jb20ACgkQv/vSX3jHroOYfwgAm3K121ALsF2kDplg+nDA/H69DbCi # HG0iozJc//MmqF+15dgmClcBn+567U7evSesATv0Bx/UBVN8XtUoS/Krf+QSHd80 # Ycxw1TBgD2Ddc1MmVuYPZetvs8j2a+cYEQIW3ZP5o7Ng88o2BEYiyU1CXA/opfXy # Lz1lQd3OHK7p00h0uHlqG41XZEuMkj5I6uorqvyDoqVkojtq2agbA7YWEsuiKyzj # owztvajmh4v0vDSMVuFGr721VIiAm2sFh7JoL69E4EOig47QD3mPPDm8wX48O0dM # ISKztYKlsSIcGFqpMPsjXioQOiMfp/StfsS1kr6X4B0q4r7UXrpQQ+TMkA== # =sStc # -----END PGP SIGNATURE----- # gpg: Signature made Wed 12 Apr 2023 17:27:15 BST # gpg: using RSA key F13338574B662389866C7682BFFBD25F78C7AE83 # gpg: issuer "pbonzini@redhat.com" # gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full] # gpg: aka "Paolo Bonzini <pbonzini@redhat.com>" [full] # Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4 E2F7 7E15 100C CD36 69B1 # Subkey fingerprint: F133 3857 4B66 2389 866C 7682 BFFB D25F 78C7 AE83 * tag 'for-upstream' of https://gitlab.com/bonzini/qemu: block/nfs: do not poll within a coroutine Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r--block/nfs.c24
1 files changed, 13 insertions, 11 deletions
diff --git a/block/nfs.c b/block/nfs.c
index 351dc6e..006045d 100644
--- a/block/nfs.c
+++ b/block/nfs.c
@@ -726,10 +726,8 @@ nfs_get_allocated_file_size_cb(int ret, struct nfs_context *nfs, void *data,
if (task->ret < 0) {
error_report("NFS Error: %s", nfs_get_error(nfs));
}
-
- /* Set task->complete before reading bs->wakeup. */
- qatomic_mb_set(&task->complete, 1);
- bdrv_wakeup(task->bs);
+ replay_bh_schedule_oneshot_event(task->client->aio_context,
+ nfs_co_generic_bh_cb, task);
}
static int64_t coroutine_fn nfs_co_get_allocated_file_size(BlockDriverState *bs)
@@ -743,15 +741,19 @@ static int64_t coroutine_fn nfs_co_get_allocated_file_size(BlockDriverState *bs)
return client->st_blocks * 512;
}
- task.bs = bs;
+ nfs_co_init_task(bs, &task);
task.st = &st;
- if (nfs_fstat_async(client->context, client->fh, nfs_get_allocated_file_size_cb,
- &task) != 0) {
- return -ENOMEM;
- }
+ WITH_QEMU_LOCK_GUARD(&client->mutex) {
+ if (nfs_fstat_async(client->context, client->fh, nfs_get_allocated_file_size_cb,
+ &task) != 0) {
+ return -ENOMEM;
+ }
- nfs_set_events(client);
- BDRV_POLL_WHILE(bs, !task.complete);
+ nfs_set_events(client);
+ }
+ while (!task.complete) {
+ qemu_coroutine_yield();
+ }
return (task.ret < 0 ? task.ret : st.st_blocks * 512);
}