Merge tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi

Pull SCSI fixes from James Bottomley:
"Four fixes, all in drivers, all of which can lead to user visible
problems in certain situations"

* tag 'scsi-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/jejb/scsi:
scsi: target: Fix NULL dereference on XCOPY completion
scsi: mpt3sas: Transition IOC to Ready state during shutdown
scsi: target: Fix protect handling in WRITE SAME(32)
scsi: iscsi: Fix iface sysfs attr detection

+78 -92
+16 -16
drivers/scsi/mpt3sas/mpt3sas_base.c
··· 2983 } 2984 2985 /** 2986 - * _base_free_irq - free irq 2987 * @ioc: per adapter object 2988 * 2989 * Freeing respective reply_queue from the list. 2990 */ 2991 - static void 2992 - _base_free_irq(struct MPT3SAS_ADAPTER *ioc) 2993 { 2994 struct adapter_reply_queue *reply_q, *next; 2995 ··· 3191 } 3192 3193 /** 3194 - * _base_disable_msix - disables msix 3195 * @ioc: per adapter object 3196 * 3197 */ 3198 - static void 3199 - _base_disable_msix(struct MPT3SAS_ADAPTER *ioc) 3200 { 3201 if (!ioc->msix_enable) 3202 return; ··· 3304 for (i = 0; i < ioc->reply_queue_count; i++) { 3305 r = _base_request_irq(ioc, i); 3306 if (r) { 3307 - _base_free_irq(ioc); 3308 - _base_disable_msix(ioc); 3309 goto try_ioapic; 3310 } 3311 } ··· 3342 3343 dexitprintk(ioc, ioc_info(ioc, "%s\n", __func__)); 3344 3345 - _base_free_irq(ioc); 3346 - _base_disable_msix(ioc); 3347 3348 kfree(ioc->replyPostRegisterIndex); 3349 ioc->replyPostRegisterIndex = NULL; ··· 7613 } 7614 7615 /** 7616 - * _base_make_ioc_ready - put controller in READY state 7617 * @ioc: per adapter object 7618 * @type: FORCE_BIG_HAMMER or SOFT_RESET 7619 * 7620 * Return: 0 for success, non-zero for failure. 7621 */ 7622 - static int 7623 - _base_make_ioc_ready(struct MPT3SAS_ADAPTER *ioc, enum reset_type type) 7624 { 7625 u32 ioc_state; 7626 int rc; ··· 7897 if (ioc->chip_phys && ioc->chip) { 7898 mpt3sas_base_mask_interrupts(ioc); 7899 ioc->shost_recovery = 1; 7900 - _base_make_ioc_ready(ioc, SOFT_RESET); 7901 ioc->shost_recovery = 0; 7902 } 7903 ··· 8017 ioc->build_sg_mpi = &_base_build_sg; 8018 ioc->build_zero_len_sge_mpi = &_base_build_zero_len_sge; 8019 8020 - r = _base_make_ioc_ready(ioc, SOFT_RESET); 8021 if (r) 8022 goto out_free_resources; 8023 ··· 8471 _base_pre_reset_handler(ioc); 8472 mpt3sas_wait_for_commands_to_complete(ioc); 8473 mpt3sas_base_mask_interrupts(ioc); 8474 - r = _base_make_ioc_ready(ioc, type); 8475 if (r) 8476 goto out; 8477 _base_clear_outstanding_commands(ioc);
··· 2983 } 2984 2985 /** 2986 + * mpt3sas_base_free_irq - free irq 2987 * @ioc: per adapter object 2988 * 2989 * Freeing respective reply_queue from the list. 2990 */ 2991 + void 2992 + mpt3sas_base_free_irq(struct MPT3SAS_ADAPTER *ioc) 2993 { 2994 struct adapter_reply_queue *reply_q, *next; 2995 ··· 3191 } 3192 3193 /** 3194 + * mpt3sas_base_disable_msix - disables msix 3195 * @ioc: per adapter object 3196 * 3197 */ 3198 + void 3199 + mpt3sas_base_disable_msix(struct MPT3SAS_ADAPTER *ioc) 3200 { 3201 if (!ioc->msix_enable) 3202 return; ··· 3304 for (i = 0; i < ioc->reply_queue_count; i++) { 3305 r = _base_request_irq(ioc, i); 3306 if (r) { 3307 + mpt3sas_base_free_irq(ioc); 3308 + mpt3sas_base_disable_msix(ioc); 3309 goto try_ioapic; 3310 } 3311 } ··· 3342 3343 dexitprintk(ioc, ioc_info(ioc, "%s\n", __func__)); 3344 3345 + mpt3sas_base_free_irq(ioc); 3346 + mpt3sas_base_disable_msix(ioc); 3347 3348 kfree(ioc->replyPostRegisterIndex); 3349 ioc->replyPostRegisterIndex = NULL; ··· 7613 } 7614 7615 /** 7616 + * mpt3sas_base_make_ioc_ready - put controller in READY state 7617 * @ioc: per adapter object 7618 * @type: FORCE_BIG_HAMMER or SOFT_RESET 7619 * 7620 * Return: 0 for success, non-zero for failure. 7621 */ 7622 + int 7623 + mpt3sas_base_make_ioc_ready(struct MPT3SAS_ADAPTER *ioc, enum reset_type type) 7624 { 7625 u32 ioc_state; 7626 int rc; ··· 7897 if (ioc->chip_phys && ioc->chip) { 7898 mpt3sas_base_mask_interrupts(ioc); 7899 ioc->shost_recovery = 1; 7900 + mpt3sas_base_make_ioc_ready(ioc, SOFT_RESET); 7901 ioc->shost_recovery = 0; 7902 } 7903 ··· 8017 ioc->build_sg_mpi = &_base_build_sg; 8018 ioc->build_zero_len_sge_mpi = &_base_build_zero_len_sge; 8019 8020 + r = mpt3sas_base_make_ioc_ready(ioc, SOFT_RESET); 8021 if (r) 8022 goto out_free_resources; 8023 ··· 8471 _base_pre_reset_handler(ioc); 8472 mpt3sas_wait_for_commands_to_complete(ioc); 8473 mpt3sas_base_mask_interrupts(ioc); 8474 + r = mpt3sas_base_make_ioc_ready(ioc, type); 8475 if (r) 8476 goto out; 8477 _base_clear_outstanding_commands(ioc);
+4
drivers/scsi/mpt3sas/mpt3sas_base.h
··· 1730 status, mpi_request, sz); } while (0) 1731 1732 int mpt3sas_wait_for_ioc(struct MPT3SAS_ADAPTER *ioc, int wait_count); 1733 1734 /* scsih shared API */ 1735 struct scsi_cmnd *mpt3sas_scsih_scsi_lookup_get(struct MPT3SAS_ADAPTER *ioc,
··· 1730 status, mpi_request, sz); } while (0) 1731 1732 int mpt3sas_wait_for_ioc(struct MPT3SAS_ADAPTER *ioc, int wait_count); 1733 + int 1734 + mpt3sas_base_make_ioc_ready(struct MPT3SAS_ADAPTER *ioc, enum reset_type type); 1735 + void mpt3sas_base_free_irq(struct MPT3SAS_ADAPTER *ioc); 1736 + void mpt3sas_base_disable_msix(struct MPT3SAS_ADAPTER *ioc); 1737 1738 /* scsih shared API */ 1739 struct scsi_cmnd *mpt3sas_scsih_scsi_lookup_get(struct MPT3SAS_ADAPTER *ioc,
+6 -1
drivers/scsi/mpt3sas/mpt3sas_scsih.c
··· 11295 11296 _scsih_ir_shutdown(ioc); 11297 _scsih_nvme_shutdown(ioc); 11298 - mpt3sas_base_detach(ioc); 11299 } 11300 11301
··· 11295 11296 _scsih_ir_shutdown(ioc); 11297 _scsih_nvme_shutdown(ioc); 11298 + mpt3sas_base_mask_interrupts(ioc); 11299 + ioc->shost_recovery = 1; 11300 + mpt3sas_base_make_ioc_ready(ioc, SOFT_RESET); 11301 + ioc->shost_recovery = 0; 11302 + mpt3sas_base_free_irq(ioc); 11303 + mpt3sas_base_disable_msix(ioc); 11304 } 11305 11306
+34 -56
drivers/scsi/scsi_transport_iscsi.c
··· 439 struct device *dev = container_of(kobj, struct device, kobj); 440 struct iscsi_iface *iface = iscsi_dev_to_iface(dev); 441 struct iscsi_transport *t = iface->transport; 442 - int param; 443 - int param_type; 444 445 if (attr == &dev_attr_iface_enabled.attr) 446 param = ISCSI_NET_PARAM_IFACE_ENABLE; 447 - else if (attr == &dev_attr_iface_vlan_id.attr) 448 - param = ISCSI_NET_PARAM_VLAN_ID; 449 - else if (attr == &dev_attr_iface_vlan_priority.attr) 450 - param = ISCSI_NET_PARAM_VLAN_PRIORITY; 451 - else if (attr == &dev_attr_iface_vlan_enabled.attr) 452 - param = ISCSI_NET_PARAM_VLAN_ENABLED; 453 - else if (attr == &dev_attr_iface_mtu.attr) 454 - param = ISCSI_NET_PARAM_MTU; 455 - else if (attr == &dev_attr_iface_port.attr) 456 - param = ISCSI_NET_PARAM_PORT; 457 - else if (attr == &dev_attr_iface_ipaddress_state.attr) 458 - param = ISCSI_NET_PARAM_IPADDR_STATE; 459 - else if (attr == &dev_attr_iface_delayed_ack_en.attr) 460 - param = ISCSI_NET_PARAM_DELAYED_ACK_EN; 461 - else if (attr == &dev_attr_iface_tcp_nagle_disable.attr) 462 - param = ISCSI_NET_PARAM_TCP_NAGLE_DISABLE; 463 - else if (attr == &dev_attr_iface_tcp_wsf_disable.attr) 464 - param = ISCSI_NET_PARAM_TCP_WSF_DISABLE; 465 - else if (attr == &dev_attr_iface_tcp_wsf.attr) 466 - param = ISCSI_NET_PARAM_TCP_WSF; 467 - else if (attr == &dev_attr_iface_tcp_timer_scale.attr) 468 - param = ISCSI_NET_PARAM_TCP_TIMER_SCALE; 469 - else if (attr == &dev_attr_iface_tcp_timestamp_en.attr) 470 - param = ISCSI_NET_PARAM_TCP_TIMESTAMP_EN; 471 - else if (attr == &dev_attr_iface_cache_id.attr) 472 - param = ISCSI_NET_PARAM_CACHE_ID; 473 - else if (attr == &dev_attr_iface_redirect_en.attr) 474 - param = ISCSI_NET_PARAM_REDIRECT_EN; 475 else if (attr == &dev_attr_iface_def_taskmgmt_tmo.attr) 476 param = ISCSI_IFACE_PARAM_DEF_TASKMGMT_TMO; 477 else if (attr == &dev_attr_iface_header_digest.attr) ··· 479 param = ISCSI_IFACE_PARAM_STRICT_LOGIN_COMP_EN; 480 else if (attr == &dev_attr_iface_initiator_name.attr) 481 param = ISCSI_IFACE_PARAM_INITIATOR_NAME; 482 else if (iface->iface_type == ISCSI_IFACE_TYPE_IPV4) { 483 if (attr == &dev_attr_ipv4_iface_ipaddress.attr) 484 param = ISCSI_NET_PARAM_IPV4_ADDR; ··· 601 return 0; 602 } 603 604 - switch (param) { 605 - case ISCSI_IFACE_PARAM_DEF_TASKMGMT_TMO: 606 - case ISCSI_IFACE_PARAM_HDRDGST_EN: 607 - case ISCSI_IFACE_PARAM_DATADGST_EN: 608 - case ISCSI_IFACE_PARAM_IMM_DATA_EN: 609 - case ISCSI_IFACE_PARAM_INITIAL_R2T_EN: 610 - case ISCSI_IFACE_PARAM_DATASEQ_INORDER_EN: 611 - case ISCSI_IFACE_PARAM_PDU_INORDER_EN: 612 - case ISCSI_IFACE_PARAM_ERL: 613 - case ISCSI_IFACE_PARAM_MAX_RECV_DLENGTH: 614 - case ISCSI_IFACE_PARAM_FIRST_BURST: 615 - case ISCSI_IFACE_PARAM_MAX_R2T: 616 - case ISCSI_IFACE_PARAM_MAX_BURST: 617 - case ISCSI_IFACE_PARAM_CHAP_AUTH_EN: 618 - case ISCSI_IFACE_PARAM_BIDI_CHAP_EN: 619 - case ISCSI_IFACE_PARAM_DISCOVERY_AUTH_OPTIONAL: 620 - case ISCSI_IFACE_PARAM_DISCOVERY_LOGOUT_EN: 621 - case ISCSI_IFACE_PARAM_STRICT_LOGIN_COMP_EN: 622 - case ISCSI_IFACE_PARAM_INITIATOR_NAME: 623 - param_type = ISCSI_IFACE_PARAM; 624 - break; 625 - default: 626 - param_type = ISCSI_NET_PARAM; 627 - } 628 - 629 - return t->attr_is_visible(param_type, param); 630 } 631 632 static struct attribute *iscsi_iface_attrs[] = {
··· 439 struct device *dev = container_of(kobj, struct device, kobj); 440 struct iscsi_iface *iface = iscsi_dev_to_iface(dev); 441 struct iscsi_transport *t = iface->transport; 442 + int param = -1; 443 444 if (attr == &dev_attr_iface_enabled.attr) 445 param = ISCSI_NET_PARAM_IFACE_ENABLE; 446 else if (attr == &dev_attr_iface_def_taskmgmt_tmo.attr) 447 param = ISCSI_IFACE_PARAM_DEF_TASKMGMT_TMO; 448 else if (attr == &dev_attr_iface_header_digest.attr) ··· 508 param = ISCSI_IFACE_PARAM_STRICT_LOGIN_COMP_EN; 509 else if (attr == &dev_attr_iface_initiator_name.attr) 510 param = ISCSI_IFACE_PARAM_INITIATOR_NAME; 511 + 512 + if (param != -1) 513 + return t->attr_is_visible(ISCSI_IFACE_PARAM, param); 514 + 515 + if (attr == &dev_attr_iface_vlan_id.attr) 516 + param = ISCSI_NET_PARAM_VLAN_ID; 517 + else if (attr == &dev_attr_iface_vlan_priority.attr) 518 + param = ISCSI_NET_PARAM_VLAN_PRIORITY; 519 + else if (attr == &dev_attr_iface_vlan_enabled.attr) 520 + param = ISCSI_NET_PARAM_VLAN_ENABLED; 521 + else if (attr == &dev_attr_iface_mtu.attr) 522 + param = ISCSI_NET_PARAM_MTU; 523 + else if (attr == &dev_attr_iface_port.attr) 524 + param = ISCSI_NET_PARAM_PORT; 525 + else if (attr == &dev_attr_iface_ipaddress_state.attr) 526 + param = ISCSI_NET_PARAM_IPADDR_STATE; 527 + else if (attr == &dev_attr_iface_delayed_ack_en.attr) 528 + param = ISCSI_NET_PARAM_DELAYED_ACK_EN; 529 + else if (attr == &dev_attr_iface_tcp_nagle_disable.attr) 530 + param = ISCSI_NET_PARAM_TCP_NAGLE_DISABLE; 531 + else if (attr == &dev_attr_iface_tcp_wsf_disable.attr) 532 + param = ISCSI_NET_PARAM_TCP_WSF_DISABLE; 533 + else if (attr == &dev_attr_iface_tcp_wsf.attr) 534 + param = ISCSI_NET_PARAM_TCP_WSF; 535 + else if (attr == &dev_attr_iface_tcp_timer_scale.attr) 536 + param = ISCSI_NET_PARAM_TCP_TIMER_SCALE; 537 + else if (attr == &dev_attr_iface_tcp_timestamp_en.attr) 538 + param = ISCSI_NET_PARAM_TCP_TIMESTAMP_EN; 539 + else if (attr == &dev_attr_iface_cache_id.attr) 540 + param = ISCSI_NET_PARAM_CACHE_ID; 541 + else if (attr == &dev_attr_iface_redirect_en.attr) 542 + param = ISCSI_NET_PARAM_REDIRECT_EN; 543 else if (iface->iface_type == ISCSI_IFACE_TYPE_IPV4) { 544 if (attr == &dev_attr_ipv4_iface_ipaddress.attr) 545 param = ISCSI_NET_PARAM_IPV4_ADDR; ··· 598 return 0; 599 } 600 601 + return t->attr_is_visible(ISCSI_NET_PARAM, param); 602 } 603 604 static struct attribute *iscsi_iface_attrs[] = {
+17 -18
drivers/target/target_core_sbc.c
··· 25 #include "target_core_alua.h" 26 27 static sense_reason_t 28 - sbc_check_prot(struct se_device *, struct se_cmd *, unsigned char *, u32, bool); 29 static sense_reason_t sbc_execute_unmap(struct se_cmd *cmd); 30 31 static sense_reason_t ··· 279 } 280 281 static sense_reason_t 282 - sbc_setup_write_same(struct se_cmd *cmd, unsigned char *flags, struct sbc_ops *ops) 283 { 284 struct se_device *dev = cmd->se_dev; 285 sector_t end_lba = dev->transport->get_blocks(dev) + 1; 286 unsigned int sectors = sbc_get_write_same_sectors(cmd); 287 sense_reason_t ret; 288 289 - if ((flags[0] & 0x04) || (flags[0] & 0x02)) { 290 pr_err("WRITE_SAME PBDATA and LBDATA" 291 " bits not supported for Block Discard" 292 " Emulation\n"); ··· 308 } 309 310 /* We always have ANC_SUP == 0 so setting ANCHOR is always an error */ 311 - if (flags[0] & 0x10) { 312 pr_warn("WRITE SAME with ANCHOR not supported\n"); 313 return TCM_INVALID_CDB_FIELD; 314 } ··· 316 * Special case for WRITE_SAME w/ UNMAP=1 that ends up getting 317 * translated into block discard requests within backend code. 318 */ 319 - if (flags[0] & 0x08) { 320 if (!ops->execute_unmap) 321 return TCM_UNSUPPORTED_SCSI_OPCODE; 322 ··· 331 if (!ops->execute_write_same) 332 return TCM_UNSUPPORTED_SCSI_OPCODE; 333 334 - ret = sbc_check_prot(dev, cmd, &cmd->t_task_cdb[0], sectors, true); 335 if (ret) 336 return ret; 337 ··· 717 } 718 719 static sense_reason_t 720 - sbc_check_prot(struct se_device *dev, struct se_cmd *cmd, unsigned char *cdb, 721 u32 sectors, bool is_write) 722 { 723 - u8 protect = cdb[1] >> 5; 724 int sp_ops = cmd->se_sess->sup_prot_ops; 725 int pi_prot_type = dev->dev_attrib.pi_prot_type; 726 bool fabric_prot = false; ··· 767 fallthrough; 768 default: 769 pr_err("Unable to determine pi_prot_type for CDB: 0x%02x " 770 - "PROTECT: 0x%02x\n", cdb[0], protect); 771 return TCM_INVALID_CDB_FIELD; 772 } 773 ··· 842 if (sbc_check_dpofua(dev, cmd, cdb)) 843 return TCM_INVALID_CDB_FIELD; 844 845 - ret = sbc_check_prot(dev, cmd, cdb, sectors, false); 846 if (ret) 847 return ret; 848 ··· 856 if (sbc_check_dpofua(dev, cmd, cdb)) 857 return TCM_INVALID_CDB_FIELD; 858 859 - ret = sbc_check_prot(dev, cmd, cdb, sectors, false); 860 if (ret) 861 return ret; 862 ··· 870 if (sbc_check_dpofua(dev, cmd, cdb)) 871 return TCM_INVALID_CDB_FIELD; 872 873 - ret = sbc_check_prot(dev, cmd, cdb, sectors, false); 874 if (ret) 875 return ret; 876 ··· 891 if (sbc_check_dpofua(dev, cmd, cdb)) 892 return TCM_INVALID_CDB_FIELD; 893 894 - ret = sbc_check_prot(dev, cmd, cdb, sectors, true); 895 if (ret) 896 return ret; 897 ··· 905 if (sbc_check_dpofua(dev, cmd, cdb)) 906 return TCM_INVALID_CDB_FIELD; 907 908 - ret = sbc_check_prot(dev, cmd, cdb, sectors, true); 909 if (ret) 910 return ret; 911 ··· 920 if (sbc_check_dpofua(dev, cmd, cdb)) 921 return TCM_INVALID_CDB_FIELD; 922 923 - ret = sbc_check_prot(dev, cmd, cdb, sectors, true); 924 if (ret) 925 return ret; 926 ··· 979 size = sbc_get_size(cmd, 1); 980 cmd->t_task_lba = get_unaligned_be64(&cdb[12]); 981 982 - ret = sbc_setup_write_same(cmd, &cdb[10], ops); 983 if (ret) 984 return ret; 985 break; ··· 1078 size = sbc_get_size(cmd, 1); 1079 cmd->t_task_lba = get_unaligned_be64(&cdb[2]); 1080 1081 - ret = sbc_setup_write_same(cmd, &cdb[1], ops); 1082 if (ret) 1083 return ret; 1084 break; ··· 1096 * Follow sbcr26 with WRITE_SAME (10) and check for the existence 1097 * of byte 1 bit 3 UNMAP instead of original reserved field 1098 */ 1099 - ret = sbc_setup_write_same(cmd, &cdb[1], ops); 1100 if (ret) 1101 return ret; 1102 break;
··· 25 #include "target_core_alua.h" 26 27 static sense_reason_t 28 + sbc_check_prot(struct se_device *, struct se_cmd *, unsigned char, u32, bool); 29 static sense_reason_t sbc_execute_unmap(struct se_cmd *cmd); 30 31 static sense_reason_t ··· 279 } 280 281 static sense_reason_t 282 + sbc_setup_write_same(struct se_cmd *cmd, unsigned char flags, struct sbc_ops *ops) 283 { 284 struct se_device *dev = cmd->se_dev; 285 sector_t end_lba = dev->transport->get_blocks(dev) + 1; 286 unsigned int sectors = sbc_get_write_same_sectors(cmd); 287 sense_reason_t ret; 288 289 + if ((flags & 0x04) || (flags & 0x02)) { 290 pr_err("WRITE_SAME PBDATA and LBDATA" 291 " bits not supported for Block Discard" 292 " Emulation\n"); ··· 308 } 309 310 /* We always have ANC_SUP == 0 so setting ANCHOR is always an error */ 311 + if (flags & 0x10) { 312 pr_warn("WRITE SAME with ANCHOR not supported\n"); 313 return TCM_INVALID_CDB_FIELD; 314 } ··· 316 * Special case for WRITE_SAME w/ UNMAP=1 that ends up getting 317 * translated into block discard requests within backend code. 318 */ 319 + if (flags & 0x08) { 320 if (!ops->execute_unmap) 321 return TCM_UNSUPPORTED_SCSI_OPCODE; 322 ··· 331 if (!ops->execute_write_same) 332 return TCM_UNSUPPORTED_SCSI_OPCODE; 333 334 + ret = sbc_check_prot(dev, cmd, flags >> 5, sectors, true); 335 if (ret) 336 return ret; 337 ··· 717 } 718 719 static sense_reason_t 720 + sbc_check_prot(struct se_device *dev, struct se_cmd *cmd, unsigned char protect, 721 u32 sectors, bool is_write) 722 { 723 int sp_ops = cmd->se_sess->sup_prot_ops; 724 int pi_prot_type = dev->dev_attrib.pi_prot_type; 725 bool fabric_prot = false; ··· 768 fallthrough; 769 default: 770 pr_err("Unable to determine pi_prot_type for CDB: 0x%02x " 771 + "PROTECT: 0x%02x\n", cmd->t_task_cdb[0], protect); 772 return TCM_INVALID_CDB_FIELD; 773 } 774 ··· 843 if (sbc_check_dpofua(dev, cmd, cdb)) 844 return TCM_INVALID_CDB_FIELD; 845 846 + ret = sbc_check_prot(dev, cmd, cdb[1] >> 5, sectors, false); 847 if (ret) 848 return ret; 849 ··· 857 if (sbc_check_dpofua(dev, cmd, cdb)) 858 return TCM_INVALID_CDB_FIELD; 859 860 + ret = sbc_check_prot(dev, cmd, cdb[1] >> 5, sectors, false); 861 if (ret) 862 return ret; 863 ··· 871 if (sbc_check_dpofua(dev, cmd, cdb)) 872 return TCM_INVALID_CDB_FIELD; 873 874 + ret = sbc_check_prot(dev, cmd, cdb[1] >> 5, sectors, false); 875 if (ret) 876 return ret; 877 ··· 892 if (sbc_check_dpofua(dev, cmd, cdb)) 893 return TCM_INVALID_CDB_FIELD; 894 895 + ret = sbc_check_prot(dev, cmd, cdb[1] >> 5, sectors, true); 896 if (ret) 897 return ret; 898 ··· 906 if (sbc_check_dpofua(dev, cmd, cdb)) 907 return TCM_INVALID_CDB_FIELD; 908 909 + ret = sbc_check_prot(dev, cmd, cdb[1] >> 5, sectors, true); 910 if (ret) 911 return ret; 912 ··· 921 if (sbc_check_dpofua(dev, cmd, cdb)) 922 return TCM_INVALID_CDB_FIELD; 923 924 + ret = sbc_check_prot(dev, cmd, cdb[1] >> 5, sectors, true); 925 if (ret) 926 return ret; 927 ··· 980 size = sbc_get_size(cmd, 1); 981 cmd->t_task_lba = get_unaligned_be64(&cdb[12]); 982 983 + ret = sbc_setup_write_same(cmd, cdb[10], ops); 984 if (ret) 985 return ret; 986 break; ··· 1079 size = sbc_get_size(cmd, 1); 1080 cmd->t_task_lba = get_unaligned_be64(&cdb[2]); 1081 1082 + ret = sbc_setup_write_same(cmd, cdb[1], ops); 1083 if (ret) 1084 return ret; 1085 break; ··· 1097 * Follow sbcr26 with WRITE_SAME (10) and check for the existence 1098 * of byte 1 bit 3 UNMAP instead of original reserved field 1099 */ 1100 + ret = sbc_setup_write_same(cmd, cdb[1], ops); 1101 if (ret) 1102 return ret; 1103 break;
+1 -1
drivers/target/target_core_transport.c
··· 886 INIT_WORK(&cmd->work, success ? target_complete_ok_work : 887 target_complete_failure_work); 888 889 - if (wwn->cmd_compl_affinity == SE_COMPL_AFFINITY_CPUID) 890 cpu = cmd->cpuid; 891 else 892 cpu = wwn->cmd_compl_affinity;
··· 886 INIT_WORK(&cmd->work, success ? target_complete_ok_work : 887 target_complete_failure_work); 888 889 + if (!wwn || wwn->cmd_compl_affinity == SE_COMPL_AFFINITY_CPUID) 890 cpu = cmd->cpuid; 891 else 892 cpu = wwn->cmd_compl_affinity;