Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

scsi: core: Remove the cmd field from struct scsi_request

Now that each scsi_request is backed by a scsi_cmnd, there is no need to
indirect the CDB storage. Change all submitters of SCSI passthrough
requests to store the CDB information directly in the scsi_cmnd, and while
doing so allocate the full 32 bytes that cover all Linux supported SCSI
hosts instead of requiring dynamic allocation for > 16 byte CDBs. On
64-bit systems this does not change the size of the scsi_cmnd at all, while
on 32-bit systems it slightly increases it for now, but that increase will
be made up by the removal of the remaining scsi_request fields.

Link: https://lore.kernel.org/r/20220224175552.988286-4-hch@lst.de
Reviewed-by: Bart Van Assche <bvanassche@acm.org>
Reviewed-by: John Garry <john.garry@huawei.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>

authored by

Christoph Hellwig and committed by
Martin K. Petersen
ce70fd9a 71bada34

+113 -168
+3 -1
drivers/ata/libata-scsi.c
··· 1022 1022 */ 1023 1023 bool ata_scsi_dma_need_drain(struct request *rq) 1024 1024 { 1025 - return atapi_cmd_type(scsi_req(rq)->cmd[0]) == ATAPI_MISC; 1025 + struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); 1026 + 1027 + return atapi_cmd_type(scmd->cmnd[0]) == ATAPI_MISC; 1026 1028 } 1027 1029 EXPORT_SYMBOL_GPL(ata_scsi_dma_need_drain); 1028 1030
+4 -2
drivers/block/pktcdvd.c
··· 693 693 static int pkt_generic_packet(struct pktcdvd_device *pd, struct packet_command *cgc) 694 694 { 695 695 struct request_queue *q = bdev_get_queue(pd->bdev); 696 + struct scsi_cmnd *scmd; 696 697 struct request *rq; 697 698 int ret = 0; 698 699 ··· 701 700 REQ_OP_DRV_OUT : REQ_OP_DRV_IN, 0); 702 701 if (IS_ERR(rq)) 703 702 return PTR_ERR(rq); 703 + scmd = blk_mq_rq_to_pdu(rq); 704 704 705 705 if (cgc->buflen) { 706 706 ret = blk_rq_map_kern(q, rq, cgc->buffer, cgc->buflen, ··· 710 708 goto out; 711 709 } 712 710 713 - scsi_req(rq)->cmd_len = COMMAND_SIZE(cgc->cmd[0]); 714 - memcpy(scsi_req(rq)->cmd, cgc->cmd, CDROM_PACKET_SIZE); 711 + scmd->cmd_len = COMMAND_SIZE(cgc->cmd[0]); 712 + memcpy(scmd->cmnd, cgc->cmd, CDROM_PACKET_SIZE); 715 713 716 714 rq->timeout = 60*HZ; 717 715 if (cgc->quiet)
+11 -12
drivers/scsi/scsi_bsg.c
··· 13 13 fmode_t mode, unsigned int timeout) 14 14 { 15 15 struct scsi_request *sreq; 16 + struct scsi_cmnd *scmd; 16 17 struct request *rq; 17 18 struct bio *bio; 18 19 int ret; ··· 34 33 35 34 ret = -ENOMEM; 36 35 sreq = scsi_req(rq); 37 - sreq->cmd_len = hdr->request_len; 38 - if (sreq->cmd_len > BLK_MAX_CDB) { 39 - sreq->cmd = kzalloc(sreq->cmd_len, GFP_KERNEL); 40 - if (!sreq->cmd) 41 - goto out_put_request; 36 + scmd = blk_mq_rq_to_pdu(rq); 37 + scmd->cmd_len = hdr->request_len; 38 + if (scmd->cmd_len > sizeof(scmd->cmnd)) { 39 + ret = -EINVAL; 40 + goto out_put_request; 42 41 } 43 42 44 43 ret = -EFAULT; 45 - if (copy_from_user(sreq->cmd, uptr64(hdr->request), sreq->cmd_len)) 46 - goto out_free_cmd; 44 + if (copy_from_user(scmd->cmnd, uptr64(hdr->request), scmd->cmd_len)) 45 + goto out_put_request; 47 46 ret = -EPERM; 48 - if (!scsi_cmd_allowed(sreq->cmd, mode)) 49 - goto out_free_cmd; 47 + if (!scsi_cmd_allowed(scmd->cmnd, mode)) 48 + goto out_put_request; 50 49 51 50 ret = 0; 52 51 if (hdr->dout_xfer_len) { ··· 58 57 } 59 58 60 59 if (ret) 61 - goto out_free_cmd; 60 + goto out_put_request; 62 61 63 62 bio = rq->bio; 64 63 blk_execute_rq(rq, !(hdr->flags & BSG_FLAG_Q_AT_TAIL)); ··· 93 92 94 93 blk_rq_unmap_user(bio); 95 94 96 - out_free_cmd: 97 - scsi_req_free_cmd(scsi_req(rq)); 98 95 out_put_request: 99 96 blk_mq_free_request(rq); 100 97 return ret;
+1 -3
drivers/scsi/scsi_debugfs.c
··· 36 36 struct scsi_cmnd *cmd = container_of(scsi_req(rq), typeof(*cmd), req); 37 37 int alloc_ms = jiffies_to_msecs(jiffies - cmd->jiffies_at_alloc); 38 38 int timeout_ms = jiffies_to_msecs(rq->timeout); 39 - const u8 *const cdb = READ_ONCE(cmd->cmnd); 40 39 char buf[80] = "(?)"; 41 40 42 - if (cdb) 43 - __scsi_format_command(buf, sizeof(buf), cdb, cmd->cmd_len); 41 + __scsi_format_command(buf, sizeof(buf), cmd->cmnd, cmd->cmd_len); 44 42 seq_printf(m, ", .cmd=%s, .retries=%d, .result = %#x, .flags=", buf, 45 43 cmd->retries, cmd->result); 46 44 scsi_flags_show(m, cmd->flags, scsi_cmd_flags,
+14 -14
drivers/scsi/scsi_error.c
··· 980 980 * @scmd: SCSI command structure to hijack 981 981 * @ses: structure to save restore information 982 982 * @cmnd: CDB to send. Can be NULL if no new cmnd is needed 983 - * @cmnd_size: size in bytes of @cmnd (must be <= BLK_MAX_CDB) 983 + * @cmnd_size: size in bytes of @cmnd (must be <= MAX_COMMAND_SIZE) 984 984 * @sense_bytes: size of sense data to copy. or 0 (if != 0 @cmnd is ignored) 985 985 * 986 986 * This function is used to save a scsi command information before re-execution ··· 1002 1002 * command. 1003 1003 */ 1004 1004 ses->cmd_len = scmd->cmd_len; 1005 - ses->cmnd = scmd->cmnd; 1006 1005 ses->data_direction = scmd->sc_data_direction; 1007 1006 ses->sdb = scmd->sdb; 1008 1007 ses->result = scmd->result; ··· 1012 1013 1013 1014 scmd->prot_op = SCSI_PROT_NORMAL; 1014 1015 scmd->eh_eflags = 0; 1015 - scmd->cmnd = ses->eh_cmnd; 1016 - memset(scmd->cmnd, 0, BLK_MAX_CDB); 1016 + memcpy(ses->cmnd, scmd->cmnd, sizeof(ses->cmnd)); 1017 + memset(scmd->cmnd, 0, sizeof(scmd->cmnd)); 1017 1018 memset(&scmd->sdb, 0, sizeof(scmd->sdb)); 1018 1019 scmd->result = 0; 1019 1020 scmd->req.resid_len = 0; ··· 1032 1033 } else { 1033 1034 scmd->sc_data_direction = DMA_NONE; 1034 1035 if (cmnd) { 1035 - BUG_ON(cmnd_size > BLK_MAX_CDB); 1036 + BUG_ON(cmnd_size > sizeof(scmd->cmnd)); 1036 1037 memcpy(scmd->cmnd, cmnd, cmnd_size); 1037 1038 scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]); 1038 1039 } ··· 1065 1066 * Restore original data 1066 1067 */ 1067 1068 scmd->cmd_len = ses->cmd_len; 1068 - scmd->cmnd = ses->cmnd; 1069 + memcpy(scmd->cmnd, ses->cmnd, sizeof(ses->cmnd)); 1069 1070 scmd->sc_data_direction = ses->data_direction; 1070 1071 scmd->sdb = ses->sdb; 1071 1072 scmd->result = ses->result; ··· 2021 2022 */ 2022 2023 static void scsi_eh_lock_door(struct scsi_device *sdev) 2023 2024 { 2025 + struct scsi_cmnd *scmd; 2024 2026 struct request *req; 2025 2027 struct scsi_request *rq; 2026 2028 ··· 2029 2029 if (IS_ERR(req)) 2030 2030 return; 2031 2031 rq = scsi_req(req); 2032 + scmd = blk_mq_rq_to_pdu(req); 2032 2033 2033 - rq->cmd[0] = ALLOW_MEDIUM_REMOVAL; 2034 - rq->cmd[1] = 0; 2035 - rq->cmd[2] = 0; 2036 - rq->cmd[3] = 0; 2037 - rq->cmd[4] = SCSI_REMOVAL_PREVENT; 2038 - rq->cmd[5] = 0; 2039 - rq->cmd_len = COMMAND_SIZE(rq->cmd[0]); 2034 + scmd->cmnd[0] = ALLOW_MEDIUM_REMOVAL; 2035 + scmd->cmnd[1] = 0; 2036 + scmd->cmnd[2] = 0; 2037 + scmd->cmnd[3] = 0; 2038 + scmd->cmnd[4] = SCSI_REMOVAL_PREVENT; 2039 + scmd->cmnd[5] = 0; 2040 + scmd->cmd_len = COMMAND_SIZE(scmd->cmnd[0]); 2040 2041 2041 2042 req->rq_flags |= RQF_QUIET; 2042 2043 req->timeout = 10 * HZ; ··· 2400 2399 2401 2400 scmd = (struct scsi_cmnd *)(rq + 1); 2402 2401 scsi_init_command(dev, scmd); 2403 - scmd->cmnd = scsi_req(rq)->cmd; 2404 2402 2405 2403 scmd->submitter = SUBMITTED_BY_SCSI_RESET_IOCTL; 2406 2404 memset(&scmd->sdb, 0, sizeof(scmd->sdb));
+17 -20
drivers/scsi/scsi_ioctl.c
··· 345 345 static int scsi_fill_sghdr_rq(struct scsi_device *sdev, struct request *rq, 346 346 struct sg_io_hdr *hdr, fmode_t mode) 347 347 { 348 - struct scsi_request *req = scsi_req(rq); 348 + struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(rq); 349 349 350 350 if (hdr->cmd_len < 6) 351 351 return -EMSGSIZE; 352 - if (copy_from_user(req->cmd, hdr->cmdp, hdr->cmd_len)) 352 + if (copy_from_user(scmd->cmnd, hdr->cmdp, hdr->cmd_len)) 353 353 return -EFAULT; 354 - if (!scsi_cmd_allowed(req->cmd, mode)) 354 + if (!scsi_cmd_allowed(scmd->cmnd, mode)) 355 355 return -EPERM; 356 - 357 - /* 358 - * fill in request structure 359 - */ 360 - req->cmd_len = hdr->cmd_len; 356 + scmd->cmd_len = hdr->cmd_len; 361 357 362 358 rq->timeout = msecs_to_jiffies(hdr->timeout); 363 359 if (!rq->timeout) ··· 412 416 int at_head = 0; 413 417 struct request *rq; 414 418 struct scsi_request *req; 419 + struct scsi_cmnd *scmd; 415 420 struct bio *bio; 416 421 417 422 if (hdr->interface_id != 'S') ··· 441 444 if (IS_ERR(rq)) 442 445 return PTR_ERR(rq); 443 446 req = scsi_req(rq); 447 + scmd = blk_mq_rq_to_pdu(rq); 444 448 445 - if (hdr->cmd_len > BLK_MAX_CDB) { 446 - req->cmd = kzalloc(hdr->cmd_len, GFP_KERNEL); 447 - if (!req->cmd) 448 - goto out_put_request; 449 + if (hdr->cmd_len > sizeof(scmd->cmnd)) { 450 + ret = -EINVAL; 451 + goto out_put_request; 449 452 } 450 453 451 454 ret = scsi_fill_sghdr_rq(sdev, rq, hdr, mode); 452 455 if (ret < 0) 453 - goto out_free_cdb; 456 + goto out_put_request; 454 457 455 458 ret = 0; 456 459 if (hdr->iovec_count) { ··· 460 463 ret = import_iovec(rq_data_dir(rq), hdr->dxferp, 461 464 hdr->iovec_count, 0, &iov, &i); 462 465 if (ret < 0) 463 - goto out_free_cdb; 466 + goto out_put_request; 464 467 465 468 /* SG_IO howto says that the shorter of the two wins */ 466 469 iov_iter_truncate(&i, hdr->dxfer_len); ··· 472 475 hdr->dxfer_len, GFP_KERNEL); 473 476 474 477 if (ret) 475 - goto out_free_cdb; 478 + goto out_put_request; 476 479 477 480 bio = rq->bio; 478 481 req->retries = 0; ··· 485 488 486 489 ret = scsi_complete_sghdr_rq(rq, hdr, bio); 487 490 488 - out_free_cdb: 489 - scsi_req_free_cmd(req); 490 491 out_put_request: 491 492 blk_mq_free_request(rq); 492 493 return ret; ··· 525 530 struct scsi_request *req; 526 531 int err; 527 532 unsigned int in_len, out_len, bytes, opcode, cmdlen; 533 + struct scsi_cmnd *scmd; 528 534 char *buffer = NULL; 529 535 530 536 if (!sic) ··· 557 561 goto error_free_buffer; 558 562 } 559 563 req = scsi_req(rq); 564 + scmd = blk_mq_rq_to_pdu(rq); 560 565 561 566 cmdlen = COMMAND_SIZE(opcode); 562 567 ··· 565 568 * get command and data to send to device, if any 566 569 */ 567 570 err = -EFAULT; 568 - req->cmd_len = cmdlen; 569 - if (copy_from_user(req->cmd, sic->data, cmdlen)) 571 + scmd->cmd_len = cmdlen; 572 + if (copy_from_user(scmd->cmnd, sic->data, cmdlen)) 570 573 goto error; 571 574 572 575 if (in_len && copy_from_user(buffer, sic->data + cmdlen, in_len)) 573 576 goto error; 574 577 575 578 err = -EPERM; 576 - if (!scsi_cmd_allowed(req->cmd, mode)) 579 + if (!scsi_cmd_allowed(scmd->cmnd, mode)) 577 580 goto error; 578 581 579 582 /* default. possible overridden later */
+8 -11
drivers/scsi/scsi_lib.c
··· 214 214 { 215 215 struct request *req; 216 216 struct scsi_request *rq; 217 + struct scsi_cmnd *scmd; 217 218 int ret; 218 219 219 220 req = scsi_alloc_request(sdev->request_queue, ··· 232 231 if (ret) 233 232 goto out; 234 233 } 235 - rq->cmd_len = COMMAND_SIZE(cmd[0]); 236 - memcpy(rq->cmd, cmd, rq->cmd_len); 234 + scmd = blk_mq_rq_to_pdu(req); 235 + scmd->cmd_len = COMMAND_SIZE(cmd[0]); 236 + memcpy(scmd->cmnd, cmd, scmd->cmd_len); 237 237 rq->retries = retries; 238 238 req->timeout = timeout; 239 239 req->cmd_flags |= flags; ··· 1128 1126 struct scsi_cmnd *cmd = blk_mq_rq_to_pdu(rq); 1129 1127 struct scsi_request *req = &cmd->req; 1130 1128 1131 - memset(req->__cmd, 0, sizeof(req->__cmd)); 1132 - req->cmd = req->__cmd; 1133 - req->cmd_len = BLK_MAX_CDB; 1129 + memset(cmd->cmnd, 0, sizeof(cmd->cmnd)); 1130 + cmd->cmd_len = MAX_COMMAND_SIZE; 1131 + 1134 1132 req->sense_len = 0; 1135 1133 1136 1134 init_rcu_head(&cmd->rcu); ··· 1198 1196 memset(&cmd->sdb, 0, sizeof(cmd->sdb)); 1199 1197 } 1200 1198 1201 - cmd->cmd_len = scsi_req(req)->cmd_len; 1202 - cmd->cmnd = scsi_req(req)->cmd; 1203 1199 cmd->transfersize = blk_rq_bytes(req); 1204 1200 cmd->allowed = scsi_req(req)->retries; 1205 1201 return BLK_STS_OK; ··· 1567 1567 cmd->prot_type = 0; 1568 1568 cmd->prot_flags = 0; 1569 1569 cmd->submitter = 0; 1570 - cmd->cmd_len = 0; 1571 - cmd->cmnd = NULL; 1572 1570 memset(&cmd->sdb, 0, sizeof(cmd->sdb)); 1573 1571 cmd->underflow = 0; 1574 1572 cmd->transfersize = 0; ··· 1614 1616 return ret; 1615 1617 } 1616 1618 1617 - cmd->cmnd = scsi_req(req)->cmd = scsi_req(req)->__cmd; 1618 - memset(cmd->cmnd, 0, BLK_MAX_CDB); 1619 + memset(cmd->cmnd, 0, sizeof(cmd->cmnd)); 1619 1620 return scsi_cmd_to_driver(cmd)->init_command(cmd); 1620 1621 } 1621 1622
+1 -4
drivers/scsi/scsi_logging.c
··· 87 87 char *logbuf; 88 88 size_t off = 0, logbuf_len; 89 89 90 - if (!scmd || !scmd->cmnd) 90 + if (!scmd) 91 91 return; 92 92 93 93 logbuf = scsi_log_reserve_buffer(&logbuf_len); ··· 182 182 int k; 183 183 char *logbuf; 184 184 size_t off, logbuf_len; 185 - 186 - if (!cmd->cmnd) 187 - return; 188 185 189 186 logbuf = scsi_log_reserve_buffer(&logbuf_len); 190 187 if (!logbuf)
+1 -27
drivers/scsi/sd.c
··· 128 128 static DEFINE_MUTEX(sd_ref_mutex); 129 129 130 130 static struct kmem_cache *sd_cdb_cache; 131 - static mempool_t *sd_cdb_pool; 132 131 static mempool_t *sd_page_pool; 133 132 static struct lock_class_key sd_bio_compl_lkclass; 134 133 ··· 1074 1075 sector_t lba, unsigned int nr_blocks, 1075 1076 unsigned char flags) 1076 1077 { 1077 - cmd->cmnd = mempool_alloc(sd_cdb_pool, GFP_ATOMIC); 1078 - if (unlikely(cmd->cmnd == NULL)) 1079 - return BLK_STS_RESOURCE; 1080 - 1081 1078 cmd->cmd_len = SD_EXT_CDB_SIZE; 1082 - memset(cmd->cmnd, 0, cmd->cmd_len); 1083 - 1084 1079 cmd->cmnd[0] = VARIABLE_LENGTH_CMD; 1085 1080 cmd->cmnd[7] = 0x18; /* Additional CDB len */ 1086 1081 cmd->cmnd[9] = write ? WRITE_32 : READ_32; ··· 1306 1313 static void sd_uninit_command(struct scsi_cmnd *SCpnt) 1307 1314 { 1308 1315 struct request *rq = scsi_cmd_to_rq(SCpnt); 1309 - u8 *cmnd; 1310 1316 1311 1317 if (rq->rq_flags & RQF_SPECIAL_PAYLOAD) 1312 1318 mempool_free(rq->special_vec.bv_page, sd_page_pool); 1313 - 1314 - if (SCpnt->cmnd != scsi_req(rq)->cmd) { 1315 - cmnd = SCpnt->cmnd; 1316 - SCpnt->cmnd = NULL; 1317 - SCpnt->cmd_len = 0; 1318 - mempool_free(cmnd, sd_cdb_pool); 1319 - } 1320 1319 } 1321 1320 1322 1321 static bool sd_need_revalidate(struct block_device *bdev, ··· 3804 3819 goto err_out_class; 3805 3820 } 3806 3821 3807 - sd_cdb_pool = mempool_create_slab_pool(SD_MEMPOOL_SIZE, sd_cdb_cache); 3808 - if (!sd_cdb_pool) { 3809 - printk(KERN_ERR "sd: can't init extended cdb pool\n"); 3810 - err = -ENOMEM; 3811 - goto err_out_cache; 3812 - } 3813 - 3814 3822 sd_page_pool = mempool_create_page_pool(SD_MEMPOOL_SIZE, 0); 3815 3823 if (!sd_page_pool) { 3816 3824 printk(KERN_ERR "sd: can't init discard page pool\n"); 3817 3825 err = -ENOMEM; 3818 - goto err_out_ppool; 3826 + goto err_out_cache; 3819 3827 } 3820 3828 3821 3829 err = scsi_register_driver(&sd_template.gendrv); ··· 3819 3841 3820 3842 err_out_driver: 3821 3843 mempool_destroy(sd_page_pool); 3822 - 3823 - err_out_ppool: 3824 - mempool_destroy(sd_cdb_pool); 3825 3844 3826 3845 err_out_cache: 3827 3846 kmem_cache_destroy(sd_cdb_cache); ··· 3843 3868 SCSI_LOG_HLQUEUE(3, printk("exit_sd: exiting sd driver\n")); 3844 3869 3845 3870 scsi_unregister_driver(&sd_template.gendrv); 3846 - mempool_destroy(sd_cdb_pool); 3847 3871 mempool_destroy(sd_page_pool); 3848 3872 kmem_cache_destroy(sd_cdb_cache); 3849 3873
+11 -19
drivers/scsi/sg.c
··· 818 818 } 819 819 if (atomic_read(&sdp->detaching)) { 820 820 if (srp->bio) { 821 - scsi_req_free_cmd(scsi_req(srp->rq)); 822 821 blk_mq_free_request(srp->rq); 823 822 srp->rq = NULL; 824 823 } ··· 1392 1393 * blk_rq_unmap_user() can be called from user context. 1393 1394 */ 1394 1395 srp->rq = NULL; 1395 - scsi_req_free_cmd(scsi_req(rq)); 1396 1396 blk_mq_free_request(rq); 1397 1397 1398 1398 write_lock_irqsave(&sfp->rq_list_lock, iflags); ··· 1736 1738 struct request_queue *q = sfp->parentdp->device->request_queue; 1737 1739 struct rq_map_data *md, map_data; 1738 1740 int rw = hp->dxfer_direction == SG_DXFER_TO_DEV ? WRITE : READ; 1739 - unsigned char *long_cmdp = NULL; 1741 + struct scsi_cmnd *scmd; 1740 1742 1741 1743 SCSI_LOG_TIMEOUT(4, sg_printk(KERN_INFO, sfp->parentdp, 1742 1744 "sg_start_req: dxfer_len=%d\n", 1743 1745 dxfer_len)); 1744 - 1745 - if (hp->cmd_len > BLK_MAX_CDB) { 1746 - long_cmdp = kzalloc(hp->cmd_len, GFP_KERNEL); 1747 - if (!long_cmdp) 1748 - return -ENOMEM; 1749 - } 1750 1746 1751 1747 /* 1752 1748 * NOTE ··· 1755 1763 */ 1756 1764 rq = scsi_alloc_request(q, hp->dxfer_direction == SG_DXFER_TO_DEV ? 1757 1765 REQ_OP_DRV_OUT : REQ_OP_DRV_IN, 0); 1758 - if (IS_ERR(rq)) { 1759 - kfree(long_cmdp); 1766 + if (IS_ERR(rq)) 1760 1767 return PTR_ERR(rq); 1761 - } 1768 + scmd = blk_mq_rq_to_pdu(rq); 1762 1769 req = scsi_req(rq); 1763 1770 1764 - if (hp->cmd_len > BLK_MAX_CDB) 1765 - req->cmd = long_cmdp; 1766 - memcpy(req->cmd, cmd, hp->cmd_len); 1767 - req->cmd_len = hp->cmd_len; 1771 + if (hp->cmd_len > sizeof(scmd->cmnd)) { 1772 + blk_mq_free_request(rq); 1773 + return -EINVAL; 1774 + } 1775 + 1776 + memcpy(scmd->cmnd, cmd, hp->cmd_len); 1777 + scmd->cmd_len = hp->cmd_len; 1768 1778 1769 1779 srp->rq = rq; 1770 1780 rq->end_io_data = srp; ··· 1859 1865 if (srp->bio) 1860 1866 ret = blk_rq_unmap_user(srp->bio); 1861 1867 1862 - if (srp->rq) { 1863 - scsi_req_free_cmd(scsi_req(srp->rq)); 1868 + if (srp->rq) 1864 1869 blk_mq_free_request(srp->rq); 1865 - } 1866 1870 1867 1871 if (srp->res_used) 1868 1872 sg_unlink_reserve(sfp, srp);
+13 -11
drivers/scsi/sr.c
··· 966 966 struct gendisk *disk = cdi->disk; 967 967 u32 len = nr * CD_FRAMESIZE_RAW; 968 968 struct scsi_request *req; 969 + struct scsi_cmnd *scmd; 969 970 struct request *rq; 970 971 struct bio *bio; 971 972 int ret; ··· 975 974 if (IS_ERR(rq)) 976 975 return PTR_ERR(rq); 977 976 req = scsi_req(rq); 977 + scmd = blk_mq_rq_to_pdu(rq); 978 978 979 979 ret = blk_rq_map_user(disk->queue, rq, NULL, ubuf, len, GFP_KERNEL); 980 980 if (ret) 981 981 goto out_put_request; 982 982 983 - req->cmd[0] = GPCMD_READ_CD; 984 - req->cmd[1] = 1 << 2; 985 - req->cmd[2] = (lba >> 24) & 0xff; 986 - req->cmd[3] = (lba >> 16) & 0xff; 987 - req->cmd[4] = (lba >> 8) & 0xff; 988 - req->cmd[5] = lba & 0xff; 989 - req->cmd[6] = (nr >> 16) & 0xff; 990 - req->cmd[7] = (nr >> 8) & 0xff; 991 - req->cmd[8] = nr & 0xff; 992 - req->cmd[9] = 0xf8; 993 - req->cmd_len = 12; 983 + scmd->cmnd[0] = GPCMD_READ_CD; 984 + scmd->cmnd[1] = 1 << 2; 985 + scmd->cmnd[2] = (lba >> 24) & 0xff; 986 + scmd->cmnd[3] = (lba >> 16) & 0xff; 987 + scmd->cmnd[4] = (lba >> 8) & 0xff; 988 + scmd->cmnd[5] = lba & 0xff; 989 + scmd->cmnd[6] = (nr >> 16) & 0xff; 990 + scmd->cmnd[7] = (nr >> 8) & 0xff; 991 + scmd->cmnd[8] = nr & 0xff; 992 + scmd->cmnd[9] = 0xf8; 993 + scmd->cmd_len = 12; 994 994 rq->timeout = 60 * HZ; 995 995 bio = rq->bio; 996 996
+7 -5
drivers/scsi/st.c
··· 472 472 473 473 static void st_do_stats(struct scsi_tape *STp, struct request *req) 474 474 { 475 + struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req); 475 476 ktime_t now; 476 477 477 478 now = ktime_get(); 478 - if (scsi_req(req)->cmd[0] == WRITE_6) { 479 + if (scmd->cmnd[0] == WRITE_6) { 479 480 now = ktime_sub(now, STp->stats->write_time); 480 481 atomic64_add(ktime_to_ns(now), &STp->stats->tot_write_time); 481 482 atomic64_add(ktime_to_ns(now), &STp->stats->tot_io_time); ··· 490 489 } else 491 490 atomic64_add(atomic_read(&STp->stats->last_write_size), 492 491 &STp->stats->write_byte_cnt); 493 - } else if (scsi_req(req)->cmd[0] == READ_6) { 492 + } else if (scmd->cmnd[0] == READ_6) { 494 493 now = ktime_sub(now, STp->stats->read_time); 495 494 atomic64_add(ktime_to_ns(now), &STp->stats->tot_read_time); 496 495 atomic64_add(ktime_to_ns(now), &STp->stats->tot_io_time); ··· 543 542 struct rq_map_data *mdata = &SRpnt->stp->buffer->map_data; 544 543 int err = 0; 545 544 struct scsi_tape *STp = SRpnt->stp; 545 + struct scsi_cmnd *scmd; 546 546 547 547 req = scsi_alloc_request(SRpnt->stp->device->request_queue, 548 548 data_direction == DMA_TO_DEVICE ? 549 549 REQ_OP_DRV_OUT : REQ_OP_DRV_IN, 0); 550 550 if (IS_ERR(req)) 551 551 return PTR_ERR(req); 552 + scmd = blk_mq_rq_to_pdu(req); 552 553 rq = scsi_req(req); 553 554 req->rq_flags |= RQF_QUIET; 554 555 ··· 577 574 } 578 575 579 576 SRpnt->bio = req->bio; 580 - rq->cmd_len = COMMAND_SIZE(cmd[0]); 581 - memset(rq->cmd, 0, BLK_MAX_CDB); 582 - memcpy(rq->cmd, cmd, rq->cmd_len); 577 + scmd->cmd_len = COMMAND_SIZE(cmd[0]); 578 + memcpy(scmd->cmnd, cmd, scmd->cmd_len); 583 579 req->timeout = timeout; 584 580 rq->retries = retries; 585 581 req->end_io_data = SRpnt;
+10 -12
drivers/scsi/ufs/ufshpb.c
··· 666 666 struct ufshpb_req *umap_req, 667 667 struct ufshpb_region *rgn) 668 668 { 669 - struct request *req; 670 - struct scsi_request *rq; 669 + struct request *req = umap_req->req; 670 + struct scsi_cmnd *scmd = blk_mq_rq_to_pdu(req); 671 671 672 - req = umap_req->req; 673 672 req->timeout = 0; 674 - req->end_io_data = (void *)umap_req; 675 - rq = scsi_req(req); 676 - ufshpb_set_unmap_cmd(rq->cmd, rgn); 677 - rq->cmd_len = HPB_WRITE_BUFFER_CMD_LENGTH; 673 + req->end_io_data = umap_req; 674 + 675 + ufshpb_set_unmap_cmd(scmd->cmnd, rgn); 676 + scmd->cmd_len = HPB_WRITE_BUFFER_CMD_LENGTH; 678 677 679 678 blk_execute_rq_nowait(req, true, ufshpb_umap_req_compl_fn); 680 679 ··· 685 686 { 686 687 struct request_queue *q; 687 688 struct request *req; 688 - struct scsi_request *rq; 689 + struct scsi_cmnd *scmd; 689 690 int mem_size = hpb->srgn_mem_size; 690 691 int ret = 0; 691 692 int i; ··· 708 709 709 710 req->end_io_data = map_req; 710 711 711 - rq = scsi_req(req); 712 - 713 712 if (unlikely(last)) 714 713 mem_size = hpb->last_srgn_entries * HPB_ENTRY_SIZE; 715 714 716 - ufshpb_set_read_buf_cmd(rq->cmd, map_req->rb.rgn_idx, 715 + scmd = blk_mq_rq_to_pdu(req); 716 + ufshpb_set_read_buf_cmd(scmd->cmnd, map_req->rb.rgn_idx, 717 717 map_req->rb.srgn_idx, mem_size); 718 - rq->cmd_len = HPB_READ_BUFFER_CMD_LENGTH; 718 + scmd->cmd_len = HPB_READ_BUFFER_CMD_LENGTH; 719 719 720 720 blk_execute_rq_nowait(req, true, ufshpb_map_req_compl_fn); 721 721
+8 -4
drivers/target/target_core_pscsi.c
··· 961 961 struct scatterlist *sgl = cmd->t_data_sg; 962 962 u32 sgl_nents = cmd->t_data_nents; 963 963 struct pscsi_dev_virt *pdv = PSCSI_DEV(cmd->se_dev); 964 + struct scsi_cmnd *scmd; 964 965 struct request *req; 965 966 sense_reason_t ret; 966 967 ··· 979 978 980 979 req->end_io = pscsi_req_done; 981 980 req->end_io_data = cmd; 982 - scsi_req(req)->cmd_len = scsi_command_size(cmd->t_task_cdb); 983 - if (scsi_req(req)->cmd_len > BLK_MAX_CDB) { 981 + 982 + scmd = blk_mq_rq_to_pdu(req); 983 + scmd->cmd_len = scsi_command_size(cmd->t_task_cdb); 984 + if (scmd->cmd_len > sizeof(scmd->cmnd)) { 984 985 ret = TCM_LOGICAL_UNIT_COMMUNICATION_FAILURE; 985 986 goto fail_put_request; 986 987 } 987 - memcpy(scsi_req(req)->cmd, cmd->t_task_cdb, scsi_req(req)->cmd_len); 988 + memcpy(scmd->cmnd, cmd->t_task_cdb, scmd->cmd_len); 989 + 988 990 if (pdv->pdv_sd->type == TYPE_DISK || 989 991 pdv->pdv_sd->type == TYPE_ZBC) 990 992 req->timeout = PS_TIMEOUT_DISK; ··· 995 991 req->timeout = PS_TIMEOUT_OTHER; 996 992 scsi_req(req)->retries = PS_RETRY; 997 993 998 - cmd->priv = scsi_req(req)->cmd; 994 + cmd->priv = scmd->cmnd; 999 995 1000 996 blk_execute_rq_nowait(req, cmd->sam_task_attr == TCM_HEAD_TAG, 1001 997 pscsi_req_done);
-1
drivers/usb/storage/cypress_atacb.c
··· 177 177 * but reading register selected in srb->cmnd[4] 178 178 */ 179 179 srb->cmd_len = 16; 180 - srb->cmnd = ses.cmnd; 181 180 srb->cmnd[2] = 1; 182 181 183 182 usb_stor_transparent_scsi_command(srb, us);
+2 -2
drivers/usb/storage/isd200.c
··· 326 326 327 327 /* maximum number of LUNs supported */ 328 328 unsigned char MaxLUNs; 329 - unsigned char cmnd[BLK_MAX_CDB]; 329 + unsigned char cmnd[MAX_COMMAND_SIZE]; 330 330 struct scsi_cmnd srb; 331 331 struct scatterlist sg; 332 332 }; ··· 485 485 int status; 486 486 487 487 memset(&ata, 0, sizeof(ata)); 488 - srb->cmnd = info->cmnd; 488 + memcpy(srb->cmnd, info->cmnd, MAX_COMMAND_SIZE); 489 489 srb->device = &srb_dev; 490 490 491 491 ata.generic.SignatureByte0 = info->ConfigData.ATAMajorCommand;
+1 -6
include/scsi/scsi_cmnd.h
··· 28 28 * supports without specifying a cmd_len by ULD's 29 29 */ 30 30 #define MAX_COMMAND_SIZE 16 31 - #if (MAX_COMMAND_SIZE > BLK_MAX_CDB) 32 - # error MAX_COMMAND_SIZE can not be bigger than BLK_MAX_CDB 33 - #endif 34 31 35 32 struct scsi_data_buffer { 36 33 struct sg_table table; ··· 97 100 unsigned short cmd_len; 98 101 enum dma_data_direction sc_data_direction; 99 102 100 - /* These elements define the operation we are about to perform */ 101 - unsigned char *cmnd; 102 - 103 + unsigned char cmnd[32]; /* SCSI CDB */ 103 104 104 105 /* These elements define the operation we ultimately want to perform */ 105 106 struct scsi_data_buffer sdb;
+1 -3
include/scsi/scsi_eh.h
··· 38 38 unsigned underflow; 39 39 unsigned char cmd_len; 40 40 unsigned char prot_op; 41 - unsigned char *cmnd; 41 + unsigned char cmnd[32]; 42 42 struct scsi_data_buffer sdb; 43 - /* new command support */ 44 - unsigned char eh_cmnd[BLK_MAX_CDB]; 45 43 struct scatterlist sense_sgl; 46 44 }; 47 45
-11
include/scsi/scsi_request.h
··· 4 4 5 5 #include <linux/blk-mq.h> 6 6 7 - #define BLK_MAX_CDB 16 8 - 9 7 struct scsi_request { 10 - unsigned char __cmd[BLK_MAX_CDB]; 11 - unsigned char *cmd; 12 - unsigned short cmd_len; 13 8 int result; 14 9 unsigned int sense_len; 15 10 unsigned int resid_len; /* residual count */ ··· 15 20 static inline struct scsi_request *scsi_req(struct request *rq) 16 21 { 17 22 return blk_mq_rq_to_pdu(rq); 18 - } 19 - 20 - static inline void scsi_req_free_cmd(struct scsi_request *req) 21 - { 22 - if (req->cmd != req->__cmd) 23 - kfree(req->cmd); 24 23 } 25 24 26 25 #endif /* _SCSI_SCSI_REQUEST_H */