From 5d249a4c978198f1e8974affac0297b71bebada5 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 --- 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 757f2becb65..793d88b9850 100644 --- a/src/pybind/cephfs/cephfs.pyx +++ b/src/pybind/cephfs/cephfs.pyx @@ -1169,7 +1169,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 @@ -1188,7 +1189,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 = {} @@ -1353,7 +1355,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