diff --git a/drivers/md/dm-default-key.c b/drivers/md/dm-default-key.c index 15c963ab907e..40aa171e6e46 100644 --- a/drivers/md/dm-default-key.c +++ b/drivers/md/dm-default-key.c @@ -217,6 +217,22 @@ static int default_key_ctr(struct dm_target *ti, unsigned int argc, char **argv) } dkc->start = tmpll; + if (bdev_is_zoned(dkc->dev->bdev)) { + /* + * All zone append writes to a zone of a zoned block device will + * have the same BIO sector, the start of the zone. When the + * cypher IV mode uses sector values, all data targeting a + * zone will be encrypted using the first sector numbers of the + * zone. This will not result in write errors but will + * cause most reads to fail as reads will use the sector values + * for the actual data locations, resulting in IV mismatch. + * To avoid this problem, ask DM core to emulate zone append + * operations with regular writes. + */ + DMDEBUG("Zone append operations will be emulated"); + ti->emulate_zone_append = true; + } + /* optional arguments */ dkc->sector_size = SECTOR_SIZE; if (argc > 5) {