[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 13/22] qom-fuse: force single-threaded mode to av
From: |
Michael Roth |
Subject: |
[Qemu-devel] [PATCH v3 13/22] qom-fuse: force single-threaded mode to avoid QMP races |
Date: |
Thu, 4 Oct 2012 12:33:32 -0500 |
python-fuse defaults to multi-threaded handling of filesystem calls.
In the case of QOM this can lead to threads reading QMP responses to
requests executed by other threads, causing all sorts of strangeness
when interacting with QOM mounts. For instance:
address@hidden:~/w/qom$ ls -l machine | grep type
ls: error while loading shared libraries: tls/libacl.so.1: \
cannot read file data: Error 21
We fix this by unconditionally passing in the -s option, which forces
single-threaded/serialized execution of filesystem calls. This flag is
only honored if we pass dash_s_do='setsingle' to the Fuse class
constructor and use the parse() method of that class to pass in
arguments, so we do that here as well.
Signed-off-by: Michael Roth <address@hidden>
---
QMP/qom-fuse | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/QMP/qom-fuse b/QMP/qom-fuse
index 5c6754a..b4a4eb3 100755
--- a/QMP/qom-fuse
+++ b/QMP/qom-fuse
@@ -134,5 +134,16 @@ class QOMFS(Fuse):
if __name__ == '__main__':
import sys, os
- fs = QOMFS(QEMUMonitorProtocol(os.environ['QMP_SOCKET']))
- fs.main(sys.argv)
+ fuse_flags = list(sys.argv)
+ mount_point = None
+
+ if not fuse_flags[-1].startswith('-'):
+ mount_point = fuse_flags.pop()
+
+ # force single-threaded behavior to avoid races for QMP responses
+ if not '-s' in fuse_flags:
+ fuse_flags.append('-s')
+
+ fs = QOMFS(QEMUMonitorProtocol(os.environ['QMP_SOCKET']),
dash_s_do='setsingle')
+ fs.parse(fuse_flags + (mount_point and [mount_point] or []))
+ fs.main()
--
1.7.9.5
- [Qemu-devel] [PATCH v3 22/22] qidl: unit tests and build infrastructure, (continued)
[Qemu-devel] [PATCH v3 16/22] qdev: move Property-related declarations to qdev-properties.h, Michael Roth, 2012/10/04
[Qemu-devel] [PATCH v3 19/22] qidl: add C parser (based on QC parser), Michael Roth, 2012/10/04
[Qemu-devel] [PATCH v3 14/22] qom-fuse: workaround for truncated properties > 4096, Michael Roth, 2012/10/04
[Qemu-devel] [PATCH v3 20/22] qidl: add QAPI-based code generator, Michael Roth, 2012/10/04
[Qemu-devel] [PATCH v3 13/22] qom-fuse: force single-threaded mode to avoid QMP races,
Michael Roth <=
Re: [Qemu-devel] [PATCH v3] Add infrastructure for QIDL-based device serialization, Paolo Bonzini, 2012/10/05