[Devel] [PATCH vz10 10/24] dm-ploop: annotate nested md_lock in ploop_check_delta_before_flip()

Konstantin Khorenko khorenko at virtuozzo.com
Mon Jul 6 13:59:48 MSK 2026


ploop_check_delta_before_flip() locks the live device's md->md_lock and
then a second md_lock from the delta being read into a separate md_root
tree (d_md). They are distinct objects of the same lock class, so lockdep
reports a false "possible recursive locking" deadlock. The two are only
ever taken here and always in this (md, then d_md) order, so annotate the
inner acquire with SINGLE_DEPTH_NESTING.

Fixes: a9cd5e6dc646 ("dm-ploop: Add ploop target driver")
Feature: dm-ploop: ploop target driver
https://virtuozzo.atlassian.net/browse/VSTOR-137234
Signed-off-by: Konstantin Khorenko <khorenko at virtuozzo.com>
---
 drivers/md/dm-ploop-cmd.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/md/dm-ploop-cmd.c b/drivers/md/dm-ploop-cmd.c
index 5fa78e6cff9a..73c5613c82f5 100644
--- a/drivers/md/dm-ploop-cmd.c
+++ b/drivers/md/dm-ploop-cmd.c
@@ -1101,7 +1101,13 @@ static int ploop_check_delta_before_flip(struct ploop *ploop, struct file *file)
 		d_bat_entries = d_md->kmpage;
 
 		spin_lock_irq(&md->md_lock); /* read */
-		spin_lock(&d_md->md_lock);
+		/*
+		 * md (live device tree) and d_md (delta being read into a
+		 * separate md_root tree) are distinct md_page objects of the
+		 * same lock class; they are only ever locked here in this
+		 * order, so annotate the nesting for lockdep.
+		 */
+		spin_lock_nested(&d_md->md_lock, SINGLE_DEPTH_NESTING);
 		for (; i <= end; i++) {
 			if (ploop_md_page_cluster_is_in_top_delta(ploop, md, i) &&
 			    d_bat_entries[i] != BAT_ENTRY_NONE) {
-- 
2.47.1



More information about the Devel mailing list