In case we need to debug in memory BAT state add interface
to dump it to kernel log

https://virtuozzo.atlassian.net/browse/PSBM-156565
Signed-off-by: Alexander Atanasov <alexander.atana...@virtuozzo.com>
---
 drivers/md/dm-ploop-cmd.c | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/drivers/md/dm-ploop-cmd.c b/drivers/md/dm-ploop-cmd.c
index 71f854c509f82..2fe75198da949 100644
--- a/drivers/md/dm-ploop-cmd.c
+++ b/drivers/md/dm-ploop-cmd.c
@@ -564,6 +564,28 @@ void ploop_free_pio_with_pages(struct ploop *ploop, struct 
pio *pio)
        kfree(pio);
 }
 
+static void hexdump8(unsigned char *buf, unsigned int len)
+{
+       print_hex_dump(KERN_CONT, "", DUMP_PREFIX_OFFSET,
+                       16, 1,
+                       buf, len, false);
+}
+
+static int ploop_dump_page_nr(struct ploop *ploop, unsigned int page_nr)
+{
+       struct md_page *md;
+       unsigned char *data;
+
+       md = ploop_md_page_find(ploop, page_nr);
+       if (!md)
+               return -EIO;
+
+       data = kmap(md->page);
+       hexdump8(data, PAGE_SIZE);
+       kunmap(md->page);
+       return 0;
+}
+
 /* @new_size is in sectors */
 /* TODO: we may delegate this to userspace */
 static int ploop_resize(struct ploop *ploop, sector_t new_sectors)
@@ -1245,6 +1267,10 @@ int ploop_message(struct dm_target *ti, unsigned int 
argc, char **argv,
                if (argc != 1)
                        goto unlock;
                ret = ploop_write_bat_to_file(ploop);
+       } else if (!strcmp(argv[0], "dump_bat_page")) {
+               if (argc != 2 || kstrtou64(argv[1], 10, &val) < 0)
+                       goto unlock;
+               ret = ploop_dump_page_nr(ploop, val);
        } else {
                ret = -ENOTSUPP;
        }
-- 
2.43.0

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to