This patch creates a helper function for handling zoned block device
operations.

Signed-off-by: Chaitanya Kulkarni <[email protected]>
---
 drivers/block/null_blk_main.c | 50 +++++++++++++++++++++--------------
 1 file changed, 30 insertions(+), 20 deletions(-)

diff --git a/drivers/block/null_blk_main.c b/drivers/block/null_blk_main.c
index e75d187c7393..824392681a28 100644
--- a/drivers/block/null_blk_main.c
+++ b/drivers/block/null_blk_main.c
@@ -1214,6 +1214,34 @@ static inline int nullb_handle_memory_backed(struct 
nullb_cmd *cmd)
        return null_handle_rq(cmd);
 }
 
+static inline void nullb_handle_zoned(struct nullb_cmd *cmd)
+{
+       unsigned int nr_sectors;
+       sector_t sector;
+       req_opf op;
+
+       if (cmd->nq->dev->queue_mode == NULL_Q_BIO) {
+               op = bio_op(cmd->bio);
+               sector = cmd->bio->bi_iter.bi_sector;
+               nr_sectors = cmd->bio->bi_iter.bi_size >> 9;
+       } else {
+               op = req_op(cmd->rq);
+               sector = blk_rq_pos(cmd->rq);
+               nr_sectors = blk_rq_sectors(cmd->rq);
+       }
+
+       switch ((op)) {
+       case REQ_OP_WRITE:
+               null_zone_write(cmd, sector, nr_sectors);
+               break;
+       case REQ_OP_ZONE_RESET:
+               null_zone_reset(cmd, sector);
+               break;
+       default:
+               break;
+       }
+}
+
 static blk_status_t null_handle_cmd(struct nullb_cmd *cmd)
 {
        struct nullb_device *dev = cmd->nq->dev;
@@ -1231,26 +1259,8 @@ static blk_status_t null_handle_cmd(struct nullb_cmd 
*cmd)
        err = nullb_handle_memory_backed(cmd);
        cmd->error = errno_to_blk_status(err);
 
-       if (!cmd->error && dev->zoned) {
-               sector_t sector;
-               unsigned int nr_sectors;
-               enum req_opf op;
-
-               if (dev->queue_mode == NULL_Q_BIO) {
-                       op = bio_op(cmd->bio);
-                       sector = cmd->bio->bi_iter.bi_sector;
-                       nr_sectors = cmd->bio->bi_iter.bi_size >> 9;
-               } else {
-                       op = req_op(cmd->rq);
-                       sector = blk_rq_pos(cmd->rq);
-                       nr_sectors = blk_rq_sectors(cmd->rq);
-               }
-
-               if (op == REQ_OP_WRITE)
-                       null_zone_write(cmd, sector, nr_sectors);
-               else if (op == REQ_OP_ZONE_RESET)
-                       null_zone_reset(cmd, sector);
-       }
+       if (!cmd->error && dev->zoned)
+               nullb_handle_zoned(cmd);
 out:
        /* Complete IO by inline, softirq or timer */
        switch (dev->irqmode) {
-- 
2.21.0

Reply via email to