From: Patrick Donnelly Date: Sun, 2 Jul 2023 16:05:08 +0000 (-0400) Subject: pybind/cephfs: drop gil during cephfs callouts X-Git-Tag: v19.0.0~937^2~1 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=5d249a4c978198f1e8974affac0297b71bebada5;p=ceph-ci.git 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 --- 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')))