[dm-devel] [PATCH 1/2] dm dust: add interface to list all badblocks
yangerkun
yangerkun at huawei.com
Mon Jun 8 08:45:12 UTC 2020
This interface may help anyone want to know all badblocks without query
block one by one.
Signed-off-by: yangerkun <yangerkun at huawei.com>
Reviewed-by: Bryan Gurney <bgurney at redhat.com>
---
drivers/md/dm-dust.c | 21 +++++++++++++++++++++
1 file changed, 21 insertions(+)
diff --git a/drivers/md/dm-dust.c b/drivers/md/dm-dust.c
index ff03b90072c5..da5c10605c59 100644
--- a/drivers/md/dm-dust.c
+++ b/drivers/md/dm-dust.c
@@ -280,6 +280,24 @@ static int dust_clear_badblocks(struct dust_device *dd)
return 0;
}
+static void dust_list_badblocks(struct dust_device *dd)
+{
+ unsigned long flags;
+ struct rb_root badblocklist;
+ struct rb_node *node;
+ struct badblock *bblk;
+
+ DMINFO("%s: badblocks list below:", __func__);
+ spin_lock_irqsave(&dd->dust_lock, flags);
+ badblocklist = dd->badblocklist;
+ for (node = rb_first(&badblocklist); node; node = rb_next(node)) {
+ bblk = rb_entry(node, struct badblock, node);
+ DMINFO("bad block: %llu", bblk->bb);
+ }
+ spin_unlock_irqrestore(&dd->dust_lock, flags);
+ DMINFO("%s: badblocks list end.", __func__);
+}
+
/*
* Target parameters:
*
@@ -422,6 +440,9 @@ static int dust_message(struct dm_target *ti, unsigned int argc, char **argv,
else
dd->quiet_mode = false;
r = 0;
+ } else if (!strcasecmp(argv[0], "listbadblocks")) {
+ dust_list_badblocks(dd);
+ r = 0;
} else {
invalid_msg = true;
}
--
2.23.0.rc2.8.gff66981f45
More information about the dm-devel
mailing list