From 5aca8823261ed7f93bc4101898da68e8e69b28d9 Mon Sep 17 00:00:00 2001 From: Damien Le Moal Date: Wed, 25 Jun 2025 18:33:23 +0900 Subject: [PATCH] BACKPORT: block: Make REQ_OP_ZONE_FINISH a write operation REQ_OP_ZONE_FINISH is defined as "12", which makes op_is_write(REQ_OP_ZONE_FINISH) return false, despite the fact that a zone finish operation is an operation that modifies a zone (transition it to full) and so should be considered as a write operation (albeit one that does not transfer any data to the device). Fix this by redefining REQ_OP_ZONE_FINISH to be an odd number (13), and redefine REQ_OP_ZONE_RESET and REQ_OP_ZONE_RESET_ALL using sequential odd numbers from that new value. Fixes: 6c1b1da58f8c ("block: add zone open, close and finish operations") Cc: stable@vger.kernel.org Signed-off-by: Damien Le Moal Reviewed-by: Bart Van Assche Reviewed-by: Johannes Thumshirn Reviewed-by: Christoph Hellwig Link: https://lore.kernel.org/r/20250625093327.548866-2-dlemoal@kernel.org Signed-off-by: Jens Axboe Bug: 417517944 Change-Id: I1080fd446b57689158e6083f9deffcf70695873e (cherry picked from commit 24cb7af081023bbb7a25ae514e6e2b398d4ab25c git://git.kernel.dk/linux-block for-next) [ bvanassche: restored REQ_OP_* numerical values and modified op_is_write() instead in order to preserve the Android kernel ABI. ] Signed-off-by: Bart Van Assche --- include/linux/blk_types.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/include/linux/blk_types.h b/include/linux/blk_types.h index 4a661e3bcb83..dff26da817cf 100644 --- a/include/linux/blk_types.h +++ b/include/linux/blk_types.h @@ -443,7 +443,7 @@ static inline enum req_op bio_op(const struct bio *bio) static inline bool op_is_write(blk_opf_t op) { - return !!(op & (__force blk_opf_t)1); + return (op & (__force blk_opf_t)1) || op == REQ_OP_ZONE_FINISH; } /*