Lines Matching refs:cmd

776 static void free_cmd(struct nullb_cmd *cmd)  in free_cmd()  argument
778 put_tag(cmd->nq, cmd->tag); in free_cmd()
785 struct nullb_cmd *cmd; in __alloc_cmd() local
790 cmd = &nq->cmds[tag]; in __alloc_cmd()
791 cmd->tag = tag; in __alloc_cmd()
792 cmd->error = BLK_STS_OK; in __alloc_cmd()
793 cmd->nq = nq; in __alloc_cmd()
795 hrtimer_init(&cmd->timer, CLOCK_MONOTONIC, in __alloc_cmd()
797 cmd->timer.function = null_cmd_timer_expired; in __alloc_cmd()
799 return cmd; in __alloc_cmd()
807 struct nullb_cmd *cmd; in alloc_cmd() local
815 cmd = __alloc_cmd(nq); in alloc_cmd()
816 if (cmd) { in alloc_cmd()
817 cmd->bio = bio; in alloc_cmd()
818 return cmd; in alloc_cmd()
826 static void end_cmd(struct nullb_cmd *cmd) in end_cmd() argument
828 int queue_mode = cmd->nq->dev->queue_mode; in end_cmd()
832 blk_mq_end_request(cmd->rq, cmd->error); in end_cmd()
835 cmd->bio->bi_status = cmd->error; in end_cmd()
836 bio_endio(cmd->bio); in end_cmd()
840 free_cmd(cmd); in end_cmd()
850 static void null_cmd_end_timer(struct nullb_cmd *cmd) in null_cmd_end_timer() argument
852 ktime_t kt = cmd->nq->dev->completion_nsec; in null_cmd_end_timer()
854 hrtimer_start(&cmd->timer, kt, HRTIMER_MODE_REL); in null_cmd_end_timer()
1274 static int null_handle_rq(struct nullb_cmd *cmd) in null_handle_rq() argument
1276 struct request *rq = cmd->rq; in null_handle_rq()
1277 struct nullb *nullb = cmd->nq->dev->nullb; in null_handle_rq()
1301 static int null_handle_bio(struct nullb_cmd *cmd) in null_handle_bio() argument
1303 struct bio *bio = cmd->bio; in null_handle_bio()
1304 struct nullb *nullb = cmd->nq->dev->nullb; in null_handle_bio()
1343 static inline blk_status_t null_handle_throttled(struct nullb_cmd *cmd) in null_handle_throttled() argument
1345 struct nullb_device *dev = cmd->nq->dev; in null_handle_throttled()
1348 struct request *rq = cmd->rq; in null_handle_throttled()
1364 static inline blk_status_t null_handle_badblocks(struct nullb_cmd *cmd, in null_handle_badblocks() argument
1368 struct badblocks *bb = &cmd->nq->dev->badblocks; in null_handle_badblocks()
1378 static inline blk_status_t null_handle_memory_backed(struct nullb_cmd *cmd, in null_handle_memory_backed() argument
1383 struct nullb_device *dev = cmd->nq->dev; in null_handle_memory_backed()
1390 err = null_handle_bio(cmd); in null_handle_memory_backed()
1392 err = null_handle_rq(cmd); in null_handle_memory_backed()
1397 static void nullb_zero_read_cmd_buffer(struct nullb_cmd *cmd) in nullb_zero_read_cmd_buffer() argument
1399 struct nullb_device *dev = cmd->nq->dev; in nullb_zero_read_cmd_buffer()
1405 if (dev->queue_mode == NULL_Q_BIO && bio_op(cmd->bio) == REQ_OP_READ) { in nullb_zero_read_cmd_buffer()
1406 zero_fill_bio(cmd->bio); in nullb_zero_read_cmd_buffer()
1407 } else if (req_op(cmd->rq) == REQ_OP_READ) { in nullb_zero_read_cmd_buffer()
1408 __rq_for_each_bio(bio, cmd->rq) in nullb_zero_read_cmd_buffer()
1413 static inline void nullb_complete_cmd(struct nullb_cmd *cmd) in nullb_complete_cmd() argument
1423 nullb_zero_read_cmd_buffer(cmd); in nullb_complete_cmd()
1426 switch (cmd->nq->dev->irqmode) { in nullb_complete_cmd()
1428 switch (cmd->nq->dev->queue_mode) { in nullb_complete_cmd()
1430 blk_mq_complete_request(cmd->rq); in nullb_complete_cmd()
1436 end_cmd(cmd); in nullb_complete_cmd()
1441 end_cmd(cmd); in nullb_complete_cmd()
1444 null_cmd_end_timer(cmd); in nullb_complete_cmd()
1449 blk_status_t null_process_cmd(struct nullb_cmd *cmd, enum req_op op, in null_process_cmd() argument
1452 struct nullb_device *dev = cmd->nq->dev; in null_process_cmd()
1456 ret = null_handle_badblocks(cmd, sector, nr_sectors); in null_process_cmd()
1462 return null_handle_memory_backed(cmd, op, sector, nr_sectors); in null_process_cmd()
1467 static blk_status_t null_handle_cmd(struct nullb_cmd *cmd, sector_t sector, in null_handle_cmd() argument
1470 struct nullb_device *dev = cmd->nq->dev; in null_handle_cmd()
1475 sts = null_handle_throttled(cmd); in null_handle_cmd()
1481 cmd->error = errno_to_blk_status(null_handle_flush(nullb)); in null_handle_cmd()
1486 sts = null_process_zoned_cmd(cmd, op, sector, nr_sectors); in null_handle_cmd()
1488 sts = null_process_cmd(cmd, op, sector, nr_sectors); in null_handle_cmd()
1491 if (cmd->error == BLK_STS_OK) in null_handle_cmd()
1492 cmd->error = sts; in null_handle_cmd()
1495 nullb_complete_cmd(cmd); in null_handle_cmd()
1550 struct nullb_cmd *cmd = blk_mq_rq_to_pdu(rq); in should_timeout_request() local
1551 struct nullb_device *dev = cmd->nq->dev; in should_timeout_request()
1558 struct nullb_cmd *cmd = blk_mq_rq_to_pdu(rq); in should_requeue_request() local
1559 struct nullb_device *dev = cmd->nq->dev; in should_requeue_request()
1655 struct nullb_cmd *cmd; in null_poll() local
1660 cmd = blk_mq_rq_to_pdu(req); in null_poll()
1661 cmd->error = null_process_cmd(cmd, req_op(req), blk_rq_pos(req), in null_poll()
1663 if (!blk_mq_add_to_batch(req, iob, (__force int) cmd->error, in null_poll()
1665 end_cmd(cmd); in null_poll()
1675 struct nullb_cmd *cmd = blk_mq_rq_to_pdu(rq); in null_timeout_rq() local
1699 cmd->error = BLK_STS_TIMEOUT; in null_timeout_rq()
1700 if (cmd->fake_timeout || hctx->type == HCTX_TYPE_POLL) in null_timeout_rq()
1709 struct nullb_cmd *cmd = blk_mq_rq_to_pdu(rq); in null_queue_rq() local
1718 hrtimer_init(&cmd->timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL); in null_queue_rq()
1719 cmd->timer.function = null_cmd_timer_expired; in null_queue_rq()
1721 cmd->rq = rq; in null_queue_rq()
1722 cmd->error = BLK_STS_OK; in null_queue_rq()
1723 cmd->nq = nq; in null_queue_rq()
1724 cmd->fake_timeout = should_timeout_request(rq) || in null_queue_rq()
1747 if (cmd->fake_timeout) in null_queue_rq()
1750 return null_handle_cmd(cmd, sector, nr_sectors, req_op(rq)); in null_queue_rq()
1879 struct nullb_cmd *cmd; in setup_commands() local
1882 nq->cmds = kcalloc(nq->queue_depth, sizeof(*cmd), GFP_KERNEL); in setup_commands()
1893 cmd = &nq->cmds[i]; in setup_commands()
1894 cmd->tag = -1U; in setup_commands()