[Devel] [PATCH VZ9] fs/fuse/kio: accidental preempt_count disbalance

Alexey Kuznetsov kuznet at virtuozzo.com
Tue Feb 11 21:44:08 MSK 2025


One in pcs_cs_accel is proven to be fatal, another one in pcs_mr
is just a finding while searching for the first one.

Signed-off-by: Alexey Kuznetsov <kuznet at virtuozzo.com>
---
 fs/fuse/kio/pcs/pcs_cs_accel.c | 2 +-
 fs/fuse/kio/pcs/pcs_mr.c       | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/fs/fuse/kio/pcs/pcs_cs_accel.c b/fs/fuse/kio/pcs/pcs_cs_accel.c
index 66a0e0f..036ca17 100644
--- a/fs/fuse/kio/pcs/pcs_cs_accel.c
+++ b/fs/fuse/kio/pcs/pcs_cs_accel.c
@@ -1128,8 +1128,8 @@ static void __complete_acr_work(struct work_struct * w)
 				for (i = 0; i < n; i++, ch++)
 					*ch = ireq->iochunk.acr.io_times[i];
 			}
+			FUSE_TRACE_COMMIT(fc->ktrace);
 		}
-		FUSE_TRACE_COMMIT(fc->ktrace);
 	}
 
 	ireq_clear_acr(ireq);
diff --git a/fs/fuse/kio/pcs/pcs_mr.c b/fs/fuse/kio/pcs/pcs_mr.c
index c8efc13..9d83782 100644
--- a/fs/fuse/kio/pcs/pcs_mr.c
+++ b/fs/fuse/kio/pcs/pcs_mr.c
@@ -102,6 +102,7 @@ struct pcs_mr *pcs_mr_get(struct pcs_mr_set *mrs, int idx)
 		rcu_read_unlock();
 		return mr;
 	}
+	rcu_read_unlock();
 	return NULL;
 }
 
-- 
1.8.3.1



More information about the Devel mailing list