All of lore.kernel.org
 help / color / mirror / Atom feed
From: Hannes Reinecke <hare@suse.de>
To: Damien Le Moal <damien.lemoal@wdc.com>,
	dm-devel@redhat.com, Mike Snitzer <snitzer@redhat.com>,
	linux-block@vger.kernel.org, Jens Axboe <axboe@kernel.dk>
Subject: Re: [PATCH v2 11/11] dm crypt: Fix zoned block device support
Date: Thu, 20 May 2021 08:11:06 +0200	[thread overview]
Message-ID: <05855613-eb08-768e-37cb-07e19946f22f@suse.de> (raw)
In-Reply-To: <20210520042228.974083-12-damien.lemoal@wdc.com>

On 5/20/21 6:22 AM, Damien Le Moal wrote:
> Zone append BIOs (REQ_OP_ZONE_APPEND) always specify the start sector
> of the zone to be written instead of the actual sector location to
> write. The write location is determined by the device and returned to
> the host upon completion of the operation. This interface, while simple
> and efficient for writing into sequential zones of a zoned block
> device, is incompatible with the use of sector values to calculate a
> cypher block IV. All data written in a zone end up using the same IV
> values corresponding to the first sectors of the zone, but read
> operation will specify any sector within the zone resulting in an IV
> mismatch between encryption and decryption.
> 
> To solve this problem, report to DM core that zone append operations are
> not supported. This result in the zone append operations being emulated
> using regular write operations.
> 
> Reported-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
> ---
>   drivers/md/dm-crypt.c | 24 +++++++++++++++++++-----
>   1 file changed, 19 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
> index f410ceee51d7..50f4cbd600d5 100644
> --- a/drivers/md/dm-crypt.c
> +++ b/drivers/md/dm-crypt.c
> @@ -3280,14 +3280,28 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
>   	}
>   	cc->start = tmpll;
>   
> -	/*
> -	 * For zoned block devices, we need to preserve the issuer write
> -	 * ordering. To do so, disable write workqueues and force inline
> -	 * encryption completion.
> -	 */
>   	if (bdev_is_zoned(cc->dev->bdev)) {
> +		/*
> +		 * For zoned block devices, we need to preserve the issuer write
> +		 * ordering. To do so, disable write workqueues and force inline
> +		 * encryption completion.
> +		 */
>   		set_bit(DM_CRYPT_NO_WRITE_WORKQUEUE, &cc->flags);
>   		set_bit(DM_CRYPT_WRITE_INLINE, &cc->flags);
> +
> +		/*
> +		 * 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;
>   	}
>   
>   	if (crypt_integrity_aead(cc) || cc->integrity_iv_size) {
> 
Reviewed-by: Hannes Reinecke <hare@suse.de>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke                Kernel Storage Architect
hare@suse.de                              +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer

WARNING: multiple messages have this Message-ID (diff)
From: Hannes Reinecke <hare@suse.de>
To: Damien Le Moal <damien.lemoal@wdc.com>,
	dm-devel@redhat.com, Mike Snitzer <snitzer@redhat.com>,
	linux-block@vger.kernel.org, Jens Axboe <axboe@kernel.dk>
Subject: Re: [dm-devel] [PATCH v2 11/11] dm crypt: Fix zoned block device support
Date: Thu, 20 May 2021 08:11:06 +0200	[thread overview]
Message-ID: <05855613-eb08-768e-37cb-07e19946f22f@suse.de> (raw)
In-Reply-To: <20210520042228.974083-12-damien.lemoal@wdc.com>

On 5/20/21 6:22 AM, Damien Le Moal wrote:
> Zone append BIOs (REQ_OP_ZONE_APPEND) always specify the start sector
> of the zone to be written instead of the actual sector location to
> write. The write location is determined by the device and returned to
> the host upon completion of the operation. This interface, while simple
> and efficient for writing into sequential zones of a zoned block
> device, is incompatible with the use of sector values to calculate a
> cypher block IV. All data written in a zone end up using the same IV
> values corresponding to the first sectors of the zone, but read
> operation will specify any sector within the zone resulting in an IV
> mismatch between encryption and decryption.
> 
> To solve this problem, report to DM core that zone append operations are
> not supported. This result in the zone append operations being emulated
> using regular write operations.
> 
> Reported-by: Shin'ichiro Kawasaki <shinichiro.kawasaki@wdc.com>
> Signed-off-by: Damien Le Moal <damien.lemoal@wdc.com>
> ---
>   drivers/md/dm-crypt.c | 24 +++++++++++++++++++-----
>   1 file changed, 19 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/md/dm-crypt.c b/drivers/md/dm-crypt.c
> index f410ceee51d7..50f4cbd600d5 100644
> --- a/drivers/md/dm-crypt.c
> +++ b/drivers/md/dm-crypt.c
> @@ -3280,14 +3280,28 @@ static int crypt_ctr(struct dm_target *ti, unsigned int argc, char **argv)
>   	}
>   	cc->start = tmpll;
>   
> -	/*
> -	 * For zoned block devices, we need to preserve the issuer write
> -	 * ordering. To do so, disable write workqueues and force inline
> -	 * encryption completion.
> -	 */
>   	if (bdev_is_zoned(cc->dev->bdev)) {
> +		/*
> +		 * For zoned block devices, we need to preserve the issuer write
> +		 * ordering. To do so, disable write workqueues and force inline
> +		 * encryption completion.
> +		 */
>   		set_bit(DM_CRYPT_NO_WRITE_WORKQUEUE, &cc->flags);
>   		set_bit(DM_CRYPT_WRITE_INLINE, &cc->flags);
> +
> +		/*
> +		 * 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;
>   	}
>   
>   	if (crypt_integrity_aead(cc) || cc->integrity_iv_size) {
> 
Reviewed-by: Hannes Reinecke <hare@suse.de>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke                Kernel Storage Architect
hare@suse.de                              +49 911 74053 688
SUSE Software Solutions GmbH, Maxfeldstr. 5, 90409 Nürnberg
HRB 36809 (AG Nürnberg), Geschäftsführer: Felix Imendörffer


--
dm-devel mailing list
dm-devel@redhat.com
https://listman.redhat.com/mailman/listinfo/dm-devel

  reply	other threads:[~2021-05-20  6:11 UTC|newest]

Thread overview: 52+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-20  4:22 [PATCH v2 00/11] dm: Improve zoned block device support Damien Le Moal
2021-05-20  4:22 ` [dm-devel] " Damien Le Moal
2021-05-20  4:22 ` [PATCH v2 01/11] block: improve handling of all zones reset operation Damien Le Moal
2021-05-20  4:22   ` [dm-devel] " Damien Le Moal
2021-05-20  5:49   ` Hannes Reinecke
2021-05-20  5:49     ` [dm-devel] " Hannes Reinecke
2021-05-20  4:22 ` [PATCH v2 02/11] block: introduce bio zone helpers Damien Le Moal
2021-05-20  4:22   ` [dm-devel] " Damien Le Moal
2021-05-20  5:50   ` Hannes Reinecke
2021-05-20  5:50     ` [dm-devel] " Hannes Reinecke
2021-05-20  4:22 ` [PATCH v2 03/11] block: introduce BIO_ZONE_WRITE_LOCKED bio flag Damien Le Moal
2021-05-20  4:22   ` [dm-devel] " Damien Le Moal
2021-05-20  5:52   ` Hannes Reinecke
2021-05-20  5:52     ` [dm-devel] " Hannes Reinecke
2021-05-20  4:22 ` [PATCH v2 04/11] dm: Fix dm_accept_partial_bio() Damien Le Moal
2021-05-20  4:22   ` [dm-devel] " Damien Le Moal
2021-05-20  5:53   ` Hannes Reinecke
2021-05-20  5:53     ` [dm-devel] " Hannes Reinecke
2021-05-20  4:22 ` [PATCH v2 05/11] dm: cleanup device_area_is_invalid() Damien Le Moal
2021-05-20  4:22   ` [dm-devel] " Damien Le Moal
2021-05-20  5:53   ` Hannes Reinecke
2021-05-20  5:53     ` [dm-devel] " Hannes Reinecke
2021-05-20  4:22 ` [PATCH v2 06/11] dm: move zone related code to dm-zone.c Damien Le Moal
2021-05-20  4:22   ` [dm-devel] " Damien Le Moal
2021-05-20  5:54   ` Hannes Reinecke
2021-05-20  5:54     ` [dm-devel] " Hannes Reinecke
2021-05-20  4:22 ` [PATCH v2 07/11] dm: Introduce dm_report_zones() Damien Le Moal
2021-05-20  4:22   ` [dm-devel] " Damien Le Moal
2021-05-20  5:56   ` Hannes Reinecke
2021-05-20  5:56     ` [dm-devel] " Hannes Reinecke
2021-05-20  4:22 ` [PATCH v2 08/11] dm: Forbid requeue of writes to zones Damien Le Moal
2021-05-20  4:22   ` [dm-devel] " Damien Le Moal
2021-05-20  5:57   ` Hannes Reinecke
2021-05-20  5:57     ` [dm-devel] " Hannes Reinecke
2021-05-20  4:22 ` [PATCH v2 09/11] dm: rearrange core declarations Damien Le Moal
2021-05-20  4:22   ` [dm-devel] " Damien Le Moal
2021-05-20  5:59   ` Hannes Reinecke
2021-05-20  5:59     ` [dm-devel] " Hannes Reinecke
2021-05-20  4:22 ` [PATCH v2 10/11] dm: introduce zone append emulation Damien Le Moal
2021-05-20  4:22   ` [dm-devel] " Damien Le Moal
2021-05-20  6:10   ` Hannes Reinecke
2021-05-20  6:10     ` [dm-devel] " Hannes Reinecke
2021-05-20  6:25     ` Damien Le Moal
2021-05-20  6:25       ` [dm-devel] " Damien Le Moal
2021-05-20  6:47       ` Hannes Reinecke
2021-05-20  6:47         ` [dm-devel] " Hannes Reinecke
2021-05-20  6:57         ` Damien Le Moal
2021-05-20  6:57           ` [dm-devel] " Damien Le Moal
2021-05-20  4:22 ` [PATCH v2 11/11] dm crypt: Fix zoned block device support Damien Le Moal
2021-05-20  4:22   ` [dm-devel] " Damien Le Moal
2021-05-20  6:11   ` Hannes Reinecke [this message]
2021-05-20  6:11     ` Hannes Reinecke

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=05855613-eb08-768e-37cb-07e19946f22f@suse.de \
    --to=hare@suse.de \
    --cc=axboe@kernel.dk \
    --cc=damien.lemoal@wdc.com \
    --cc=dm-devel@redhat.com \
    --cc=linux-block@vger.kernel.org \
    --cc=snitzer@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.