libnvdimm, btt: add support for blk integrity
Support multiple block sizes (sector + metadata) using the blk integrity framework. This registers a new integrity template that defines the protection information tuple size based on the configured metadata size, and simply acts as a passthrough for protection information generated by another layer. The metadata is written to the storage as-is, and read back with each sector. Signed-off-by: Vishal Verma <vishal.l.verma@linux.intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:

committed by
Dan Williams

parent
f68eb1e71a
commit
41cd8b70c3
@@ -13,6 +13,7 @@
|
||||
#include <linux/libnvdimm.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/module.h>
|
||||
#include <linux/blkdev.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/ctype.h>
|
||||
#include <linux/ndctl.h>
|
||||
@@ -361,6 +362,42 @@ void nvdimm_bus_unregister(struct nvdimm_bus *nvdimm_bus)
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(nvdimm_bus_unregister);
|
||||
|
||||
#ifdef CONFIG_BLK_DEV_INTEGRITY
|
||||
static int nd_pi_nop_generate_verify(struct blk_integrity_iter *iter)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
int nd_integrity_init(struct gendisk *disk, unsigned long meta_size)
|
||||
{
|
||||
struct blk_integrity integrity = {
|
||||
.name = "ND-PI-NOP",
|
||||
.generate_fn = nd_pi_nop_generate_verify,
|
||||
.verify_fn = nd_pi_nop_generate_verify,
|
||||
.tuple_size = meta_size,
|
||||
.tag_size = meta_size,
|
||||
};
|
||||
int ret;
|
||||
|
||||
ret = blk_integrity_register(disk, &integrity);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
blk_queue_max_integrity_segments(disk->queue, 1);
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(nd_integrity_init);
|
||||
|
||||
#else /* CONFIG_BLK_DEV_INTEGRITY */
|
||||
int nd_integrity_init(struct gendisk *disk, unsigned long meta_size)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL(nd_integrity_init);
|
||||
|
||||
#endif
|
||||
|
||||
static __init int libnvdimm_init(void)
|
||||
{
|
||||
int rc;
|
||||
|
Reference in New Issue
Block a user