Re: [RFC PATCH v2 1/4] block: change REQ_OP_ZONE_RESET from 6 to 13

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 2020/05/16 12:55, Coly Li wrote:
> For a zoned device, e.g. host managed SMR hard drive, REQ_OP_ZONE_RESET
> is to reset the LBA of a zone's write pointer back to the start LBA of
> this zone. After the write point is reset, all previously stored data
> in this zone is invalid and unaccessible anymore. Therefore, this op
> code changes on disk data, belongs to a WRITE request op code.
> 
> Current REQ_OP_ZONE_RESET is defined as number 6, but the convention of
> the op code is, READ requests are even numbers, and WRITE requests are
> odd numbers. See how op_is_write defined,
> 
> 397 static inline bool op_is_write(unsigned int op)
> 398 {
> 399         return (op & 1);
> 400 }
> 
> When create bcache device on top of the zoned SMR drive, bcache driver
> has to handle the REQ_OP_ZONE_RESET bio by invalidate all cached data
> belongs to the LBA range of the restting zone. A wrong op code value
> will make the this zone management bio goes into bcache' read requests
> code path and causes undefined result.
> 
> This patch changes REQ_OP_ZONE_RESET value from 6 to 13, the new odd
> number will make bcache driver handle this zone management bio properly
> in write requests code path.
> 
> Fixes: 87374179c535 ("block: add a proper block layer data direction encoding")
> Signed-off-by: Coly Li <colyli@xxxxxxx>
> Cc: Christoph Hellwig <hch@xxxxxx>
> Cc: Damien Le Moal <damien.lemoal@xxxxxxx>
> Cc: Hannes Reinecke <hare@xxxxxxx>
> Cc: Jens Axboe <axboe@xxxxxx>
> Cc: Johannes Thumshirn <johannes.thumshirn@xxxxxxx>
> Cc: Keith Busch <kbusch@xxxxxxxxxx>
> Cc: Shaun Tancheff <shaun.tancheff@xxxxxxxxxxx>
> ---
>  include/linux/blk_types.h | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h
> index 31eb92876be7..8f7bc15a6de3 100644
> --- a/include/linux/blk_types.h
> +++ b/include/linux/blk_types.h
> @@ -282,8 +282,6 @@ enum req_opf {
>  	REQ_OP_DISCARD		= 3,
>  	/* securely erase sectors */
>  	REQ_OP_SECURE_ERASE	= 5,
> -	/* reset a zone write pointer */
> -	REQ_OP_ZONE_RESET	= 6,
>  	/* write the same sector many times */
>  	REQ_OP_WRITE_SAME	= 7,
>  	/* reset all the zone present on the device */
> @@ -296,6 +294,8 @@ enum req_opf {
>  	REQ_OP_ZONE_CLOSE	= 11,
>  	/* Transition a zone to full */
>  	REQ_OP_ZONE_FINISH	= 12,
> +	/* reset a zone write pointer */
> +	REQ_OP_ZONE_RESET	= 13,

As Chaitanya pointed out, this is already used. Please rebase on Jens
block/for-5.8/block branch.

I do not see any problem with this change, but as Christoph commented, since
zone reset does not transfer any data, I do not really see the necessity for
this. Zone reset is indeed data-destructive, but it is not a "write" command.
But following DISCARD and having the op number as an odd number is OK I think.

>  
>  	/* SCSI passthrough using struct scsi_request */
>  	REQ_OP_SCSI_IN		= 32,
> 


-- 
Damien Le Moal
Western Digital Research




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux ARM Kernel]     [Linux Filesystem Development]     [Linux ARM]     [Linux Omap]     [Fedora ARM]     [IETF Annouce]     [Security]     [Bugtraq]     [Linux OMAP]     [Linux MIPS]     [ECOS]     [Asterisk Internet PBX]     [Linux API]

  Powered by Linux