The commit is pushed to "branch-rh10-6.12.0-55.13.1.2.x.vz10-ovz" and will
appear at [email protected]:openvz/vzkernel.git
after rh10-6.12.0-55.13.1.2.24.vz10
------>
commit 27f940e029c22a28b51600f20d3cefe2b2fc04e6
Author: Liu Kui <[email protected]>
Date: Mon Dec 8 17:17:36 2025 +0800
fs/fuse kio: fix lock leak in pcs_cs_find_create()
In pcs_cs_find_create(), when __lookup_cs() finds an existing cs
during the creation path, cs->lock is acquired but not released
before calling pcs_cs_destroy(cs) and jumping to 'again'.
This lock leak can trigger "BUG: workqueue leaked lock or atomic"
errors when called from the workqueue function fuse_complete_map_work().
Holding a spin_lock makes the kworker unschedulable, which violates
workqueue execution requirements.
Fixes: 8ff5cf135a0f0 ("fs: fuse: pcs: implement dislog")
https://virtuozzo.atlassian.net/browse/VSTOR-120551
Signed-off-by: Liu Kui <[email protected]>
Feature: vStorage
(cherry picked from commit 85c78c6cdfdbb907f425a1174c2fbb0eca07f5e2)
---
fs/fuse/kio/pcs/pcs_cs.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/fs/fuse/kio/pcs/pcs_cs.c b/fs/fuse/kio/pcs/pcs_cs.c
index fdada31199a41..f6f2d16b0e486 100644
--- a/fs/fuse/kio/pcs/pcs_cs.c
+++ b/fs/fuse/kio/pcs/pcs_cs.c
@@ -253,6 +253,7 @@ struct pcs_cs *pcs_cs_find_create(struct pcs_cs_set *csset,
PCS_NODE_ID_T *id, P
if (__lookup_cs(csset, id->val)) {
spin_unlock(&csset->lock);
cs->is_dead = 1;
+ spin_unlock(&cs->lock);
pcs_cs_destroy(cs);
goto again;
}
_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel