Ack! On Mon, Dec 8, 2025 at 5:26 PM Liu Kui <[email protected]> wrote: > > 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: commit "fs: fuse: pcs: implement dislog" > https://virtuozzo.atlassian.net/browse/VSTOR-120551 > > Signed-off-by: Liu Kui <[email protected]> > --- > 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 275fc8bd218d..8f4011f2afd3 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; > } > -- > 2.39.5 (Apple Git-154)
_______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
