Commit 2fde0e48 authored by Javier Gonzalez's avatar Javier Gonzalez Committed by Jens Axboe

lightnvm: add free and bad lun info to show luns

Add free block, used block, and bad block information to the show debug
interface. This information is used to debug how targets track blocks.

Also, change debug function name to make it more generic.
Signed-off-by: default avatarJavier Gonzalez <javier@cnexlabs.com>
Signed-off-by: default avatarMatias Bjørling <m@bjorling.me>
Signed-off-by: default avatarJens Axboe <axboe@fb.com>
parent 0b59733b
...@@ -544,7 +544,7 @@ static int nvm_configure_show(const char *val) ...@@ -544,7 +544,7 @@ static int nvm_configure_show(const char *val)
if (!dev->mt) if (!dev->mt)
return 0; return 0;
dev->mt->free_blocks_print(dev); dev->mt->lun_info_print(dev);
return 0; return 0;
} }
......
...@@ -464,15 +464,24 @@ static struct nvm_lun *gennvm_get_lun(struct nvm_dev *dev, int lunid) ...@@ -464,15 +464,24 @@ static struct nvm_lun *gennvm_get_lun(struct nvm_dev *dev, int lunid)
return &gn->luns[lunid].vlun; return &gn->luns[lunid].vlun;
} }
static void gennvm_free_blocks_print(struct nvm_dev *dev) static void gennvm_lun_info_print(struct nvm_dev *dev)
{ {
struct gen_nvm *gn = dev->mp; struct gen_nvm *gn = dev->mp;
struct gen_lun *lun; struct gen_lun *lun;
unsigned int i; unsigned int i;
gennvm_for_each_lun(gn, lun, i)
pr_info("%s: lun%8u\t%u\n", gennvm_for_each_lun(gn, lun, i) {
dev->name, i, lun->vlun.nr_free_blocks); spin_lock(&lun->vlun.lock);
pr_info("%s: lun%8u\t%u\t%u\t%u\n",
dev->name, i,
lun->vlun.nr_free_blocks,
lun->vlun.nr_inuse_blocks,
lun->vlun.nr_bad_blocks);
spin_unlock(&lun->vlun.lock);
}
} }
static struct nvmm_type gennvm = { static struct nvmm_type gennvm = {
...@@ -490,7 +499,7 @@ static struct nvmm_type gennvm = { ...@@ -490,7 +499,7 @@ static struct nvmm_type gennvm = {
.erase_blk = gennvm_erase_blk, .erase_blk = gennvm_erase_blk,
.get_lun = gennvm_get_lun, .get_lun = gennvm_get_lun,
.free_blocks_print = gennvm_free_blocks_print, .lun_info_print = gennvm_lun_info_print,
}; };
static int __init gennvm_module_init(void) static int __init gennvm_module_init(void)
......
...@@ -380,7 +380,7 @@ typedef int (nvmm_end_io_fn)(struct nvm_rq *, int); ...@@ -380,7 +380,7 @@ typedef int (nvmm_end_io_fn)(struct nvm_rq *, int);
typedef int (nvmm_erase_blk_fn)(struct nvm_dev *, struct nvm_block *, typedef int (nvmm_erase_blk_fn)(struct nvm_dev *, struct nvm_block *,
unsigned long); unsigned long);
typedef struct nvm_lun *(nvmm_get_lun_fn)(struct nvm_dev *, int); typedef struct nvm_lun *(nvmm_get_lun_fn)(struct nvm_dev *, int);
typedef void (nvmm_free_blocks_print_fn)(struct nvm_dev *); typedef void (nvmm_lun_info_print_fn)(struct nvm_dev *);
struct nvmm_type { struct nvmm_type {
const char *name; const char *name;
...@@ -404,7 +404,7 @@ struct nvmm_type { ...@@ -404,7 +404,7 @@ struct nvmm_type {
nvmm_get_lun_fn *get_lun; nvmm_get_lun_fn *get_lun;
/* Statistics */ /* Statistics */
nvmm_free_blocks_print_fn *free_blocks_print; nvmm_lun_info_print_fn *lun_info_print;
struct list_head list; struct list_head list;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment