From e061257a830466b4e47a75690cdd05109069b7bc Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Sun, 2 Jul 2023 12:05:08 -0400 Subject: [PATCH] pybind/cephfs: drop gil during cephfs callouts This has disastorous consequences including the possibility of deadlock. In the best case, you have the rmdir holding the GIL until the MDS responds! Fixes: https://tracker.ceph.com/issues/61869 Signed-off-by: Patrick Donnelly (cherry picked from commit 5d249a4c978198f1e8974affac0297b71bebada5) --- src/pybind/cephfs/cephfs.pyx | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/pybind/cephfs/cephfs.pyx b/src/pybind/cephfs/cephfs.pyx index 251302fb262..fca3846de64 100644 --- a/src/pybind/cephfs/cephfs.pyx +++ b/src/pybind/cephfs/cephfs.pyx @@ -1087,7 +1087,8 @@ cdef class LibCephFS(object): cdef: char* _path = path char* _name = name - ret = ceph_rmsnap(self.cluster, _path, _name) + with nogil: + ret = ceph_rmsnap(self.cluster, _path, _name) if ret < 0: raise make_ex(ret, "rmsnap error") return 0 @@ -1106,7 +1107,8 @@ cdef class LibCephFS(object): cdef: char* _path = path snap_info info - ret = ceph_get_snap_info(self.cluster, _path, &info) + with nogil: + ret = ceph_get_snap_info(self.cluster, _path, &info) if ret < 0: raise make_ex(ret, "snap_info error") md = {} @@ -1271,7 +1273,8 @@ cdef class LibCephFS(object): self.require_state("mounted") path = cstr(path, 'path') cdef char* _path = path - ret = ceph_rmdir(self.cluster, _path) + with nogil: + ret = ceph_rmdir(self.cluster, _path) if ret < 0: raise make_ex(ret, "error in rmdir {}".format(path.decode('utf-8'))) -- 2.39.5