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