mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-23 15:11:16 +00:00
dm table: add flag to allow target to handle its own integrity metadata
Add DM_TARGET_INTEGRITY flag that specifies bio integrity metadata is not inherited but implemented in the target itself. Signed-off-by: Milan Broz <gmazyland@gmail.com> Signed-off-by: Mike Snitzer <snitzer@redhat.com>
This commit is contained in:
parent
b29d4986d0
commit
9b4b5a797c
2 changed files with 17 additions and 0 deletions
|
@ -47,6 +47,7 @@ struct dm_table {
|
||||||
bool integrity_supported:1;
|
bool integrity_supported:1;
|
||||||
bool singleton:1;
|
bool singleton:1;
|
||||||
bool all_blk_mq:1;
|
bool all_blk_mq:1;
|
||||||
|
unsigned integrity_added:1;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Indicates the rw permissions for the new logical
|
* Indicates the rw permissions for the new logical
|
||||||
|
@ -725,6 +726,9 @@ int dm_table_add_target(struct dm_table *t, const char *type,
|
||||||
t->immutable_target_type = tgt->type;
|
t->immutable_target_type = tgt->type;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (dm_target_has_integrity(tgt->type))
|
||||||
|
t->integrity_added = 1;
|
||||||
|
|
||||||
tgt->table = t;
|
tgt->table = t;
|
||||||
tgt->begin = start;
|
tgt->begin = start;
|
||||||
tgt->len = len;
|
tgt->len = len;
|
||||||
|
@ -1168,6 +1172,10 @@ static int dm_table_register_integrity(struct dm_table *t)
|
||||||
struct mapped_device *md = t->md;
|
struct mapped_device *md = t->md;
|
||||||
struct gendisk *template_disk = NULL;
|
struct gendisk *template_disk = NULL;
|
||||||
|
|
||||||
|
/* If target handles integrity itself do not register it here. */
|
||||||
|
if (t->integrity_added)
|
||||||
|
return 0;
|
||||||
|
|
||||||
template_disk = dm_table_get_integrity_disk(t);
|
template_disk = dm_table_get_integrity_disk(t);
|
||||||
if (!template_disk)
|
if (!template_disk)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1394,6 +1402,9 @@ static void dm_table_verify_integrity(struct dm_table *t)
|
||||||
{
|
{
|
||||||
struct gendisk *template_disk = NULL;
|
struct gendisk *template_disk = NULL;
|
||||||
|
|
||||||
|
if (t->integrity_added)
|
||||||
|
return;
|
||||||
|
|
||||||
if (t->integrity_supported) {
|
if (t->integrity_supported) {
|
||||||
/*
|
/*
|
||||||
* Verify that the original integrity profile
|
* Verify that the original integrity profile
|
||||||
|
|
|
@ -221,6 +221,12 @@ struct target_type {
|
||||||
*/
|
*/
|
||||||
typedef unsigned (*dm_num_write_bios_fn) (struct dm_target *ti, struct bio *bio);
|
typedef unsigned (*dm_num_write_bios_fn) (struct dm_target *ti, struct bio *bio);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A target implements own bio data integrity.
|
||||||
|
*/
|
||||||
|
#define DM_TARGET_INTEGRITY 0x00000010
|
||||||
|
#define dm_target_has_integrity(type) ((type)->features & DM_TARGET_INTEGRITY)
|
||||||
|
|
||||||
struct dm_target {
|
struct dm_target {
|
||||||
struct dm_table *table;
|
struct dm_table *table;
|
||||||
struct target_type *type;
|
struct target_type *type;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue