|
From: | Emanuele Giuseppe Esposito |
Subject: | Re: [PATCH v5 05/31] block-backend: special comments for blk_set/get_perm due to fuse |
Date: | Wed, 15 Dec 2021 11:13:04 +0100 |
User-agent: | Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 |
On 15/12/2021 09:57, Emanuele Giuseppe Esposito wrote:
On 10/12/2021 15:38, Hanna Reitz wrote:On 24.11.21 07:43, Emanuele Giuseppe Esposito wrote:Fuse logic can be classified as I/O, so there is no BQL held during its execution. And yet, it uses blk_{get/set}_perm functions, that are classified as BQL and clearly require the BQL lock. Since there is no easy solution for this, add a couple of TODOs and FIXME in the relevant sections of the code.Well, the problem goes deeper, because we still consider them GS functions. So it’s fine for the permission function raw_handle_perm_lock() to call bdrv_get_flags(), which is a GS function, and then you still get:qemu-storage-daemon: ../block.c:6195: bdrv_get_flags: Assertion `qemu_in_main_thread()' failed.
Wait... Now that I read it more carefully I am confused about this. I don't think the above has to do with fuse, right?
Can you share the command that makes qemu-storage-daemon fail? raw_handle_perm_lock() is currently called by these three callbacks: .bdrv_check_perm = raw_check_perm, .bdrv_set_perm = raw_set_perm, .bdrv_abort_perm_update = raw_abort_perm_update,all three function pointers are defined as GS functions. So I don't understand why is this failing.
It looks like in this case making bdrv_get_flags() not a GS function would be feasible and might solve the problem, but I guess we should instead think about adding something likeif (!exp->growable && !qemu_in_main_thread()) { /* Changing permissions like below only works in the main thread */ return -EPERM; } to fuse_do_truncate().Ideally, to make up for this, we should probably take the RESIZE permission in fuse_export_create() for writable exports in iothreads.I think I got it. I will send the RESIZE permission fix in a separate patch.Thank you, Emanuele
[Prev in Thread] | Current Thread | [Next in Thread] |