[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 19/28] qom-fuse: force single-threaded mode to avoid
From: |
Michael Roth |
Subject: |
[Qemu-devel] [PATCH 19/28] qom-fuse: force single-threaded mode to avoid QMP races |
Date: |
Wed, 31 Oct 2012 17:36:03 -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.
Reviewed-by: Paolo Bonzini <address@hidden>
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 04/28] qapi: qapi_visit.py, make code useable as module, (continued)
- [Qemu-devel] [PATCH 04/28] qapi: qapi_visit.py, make code useable as module, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 05/28] qapi: qapi_visit.py, support arrays and complex qapi definitions, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 07/28] qapi: qapi_visit.py, support for visiting non-pointer/embedded structs, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 08/28] qapi: qapi_visit.py, support for q_string annotations, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 11/28] qapi: QmpInputVisitor, implement array handling, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 16/28] qapi: qapi.py, make json parser more robust, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 14/28] qapi: add visit_type_long(), Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 13/28] qapi: fix potential segfault for visit_type_size(), Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 09/28] qapi: add visitor interfaces for C arrays, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 12/28] qapi: QmpInputVisitor, don't re-allocate memory in start_struct, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 19/28] qom-fuse: force single-threaded mode to avoid QMP races,
Michael Roth <=
- [Qemu-devel] [PATCH 20/28] qom-fuse: workaround for truncated properties > 4096, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 10/28] qapi: QmpOutputVisitor, implement array handling, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 15/28] qapi: ordereddict, add to_json() method, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 22/28] qdev: move Property-related declarations to qdev-properties.h, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 21/28] module additions for schema registration, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 17/28] qapi: add open-coded visitors for struct tm/Int128 types, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 18/28] qapi: Improve existing docs and document annotated QAPI types, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 24/28] qidl: add lexer library (based on QC parser), Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 28/28] qidl: unit tests and build infrastructure, Michael Roth, 2012/10/31
- [Qemu-devel] [PATCH 23/28] qidl: add documentation, Michael Roth, 2012/10/31