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

Configure Feed

Select the types of activity you want to include in your feed.

Merge git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending

Pull SCSI target fixes from Nicholas Bellinger:
"Mostly minor fixes this time to v3.14-rc1 related changes. Also
included is one fix for a free after use regression in persistent
reservations UNREGISTER logic that is CC'ed to >= v3.11.y stable"

* git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending:
Target/sbc: Fix protection copy routine
IB/srpt: replace strict_strtoul() with kstrtoul()
target: Simplify command completion by removing CMD_T_FAILED flag
iser-target: Fix leak on failure in isert_conn_create_fastreg_pool
iscsi-target: Fix SNACK Type 1 + BegRun=0 handling
target: Fix missing length check in spc_emulate_evpd_83()
qla2xxx: Remove last vestiges of qla_tgt_cmd.cmd_list
target: Fix 32-bit + CONFIG_LBDAF=n link error w/ sector_div
target: Fix free-after-use regression in PR unregister

+30 -23
+1
drivers/infiniband/ulp/isert/ib_isert.c
··· 453 453 if (ret) { 454 454 pr_err("Failed to create fastreg descriptor err=%d\n", 455 455 ret); 456 + kfree(fr_desc); 456 457 goto err; 457 458 } 458 459
+7 -7
drivers/infiniband/ulp/srpt/ib_srpt.c
··· 3666 3666 unsigned long val; 3667 3667 int ret; 3668 3668 3669 - ret = strict_strtoul(page, 0, &val); 3669 + ret = kstrtoul(page, 0, &val); 3670 3670 if (ret < 0) { 3671 - pr_err("strict_strtoul() failed with ret: %d\n", ret); 3671 + pr_err("kstrtoul() failed with ret: %d\n", ret); 3672 3672 return -EINVAL; 3673 3673 } 3674 3674 if (val > MAX_SRPT_RDMA_SIZE) { ··· 3706 3706 unsigned long val; 3707 3707 int ret; 3708 3708 3709 - ret = strict_strtoul(page, 0, &val); 3709 + ret = kstrtoul(page, 0, &val); 3710 3710 if (ret < 0) { 3711 - pr_err("strict_strtoul() failed with ret: %d\n", ret); 3711 + pr_err("kstrtoul() failed with ret: %d\n", ret); 3712 3712 return -EINVAL; 3713 3713 } 3714 3714 if (val > MAX_SRPT_RSP_SIZE) { ··· 3746 3746 unsigned long val; 3747 3747 int ret; 3748 3748 3749 - ret = strict_strtoul(page, 0, &val); 3749 + ret = kstrtoul(page, 0, &val); 3750 3750 if (ret < 0) { 3751 - pr_err("strict_strtoul() failed with ret: %d\n", ret); 3751 + pr_err("kstrtoul() failed with ret: %d\n", ret); 3752 3752 return -EINVAL; 3753 3753 } 3754 3754 if (val > MAX_SRPT_SRQ_SIZE) { ··· 3793 3793 unsigned long tmp; 3794 3794 int ret; 3795 3795 3796 - ret = strict_strtoul(page, 0, &tmp); 3796 + ret = kstrtoul(page, 0, &tmp); 3797 3797 if (ret < 0) { 3798 3798 printk(KERN_ERR "Unable to extract srpt_tpg_store_enable\n"); 3799 3799 return -EINVAL;
-2
drivers/scsi/qla2xxx/qla_target.c
··· 2595 2595 return -ENOMEM; 2596 2596 } 2597 2597 2598 - INIT_LIST_HEAD(&cmd->cmd_list); 2599 - 2600 2598 memcpy(&cmd->atio, atio, sizeof(*atio)); 2601 2599 cmd->state = QLA_TGT_STATE_NEW; 2602 2600 cmd->tgt = vha->vha_tgt.qla_tgt;
-1
drivers/scsi/qla2xxx/qla_target.h
··· 855 855 uint16_t loop_id; /* to save extra sess dereferences */ 856 856 struct qla_tgt *tgt; /* to save extra sess dereferences */ 857 857 struct scsi_qla_host *vha; 858 - struct list_head cmd_list; 859 858 860 859 struct atio_from_isp atio; 861 860 };
+3 -1
drivers/target/iscsi/iscsi_target_erl1.c
··· 507 507 u32 last_statsn; 508 508 int found_cmd; 509 509 510 - if (conn->exp_statsn > begrun) { 510 + if (!begrun) { 511 + begrun = conn->exp_statsn; 512 + } else if (conn->exp_statsn > begrun) { 511 513 pr_err("Got Status SNACK Begrun: 0x%08x, RunLength:" 512 514 " 0x%08x but already got ExpStatSN: 0x%08x on CID:" 513 515 " %hu.\n", begrun, runlength, conn->exp_statsn,
+1 -1
drivers/target/target_core_alua.c
··· 500 500 501 501 if (segment_mult) { 502 502 u64 tmp = lba; 503 - start_lba = sector_div(tmp, segment_size * segment_mult); 503 + start_lba = do_div(tmp, segment_size * segment_mult); 504 504 505 505 last_lba = first_lba + segment_size - 1; 506 506 if (start_lba >= first_lba &&
+7 -4
drivers/target/target_core_pr.c
··· 2009 2009 struct t10_reservation *pr_tmpl = &dev->t10_pr; 2010 2010 unsigned char isid_buf[PR_REG_ISID_LEN], *isid_ptr = NULL; 2011 2011 sense_reason_t ret = TCM_NO_SENSE; 2012 - int pr_holder = 0; 2012 + int pr_holder = 0, type; 2013 2013 2014 2014 if (!se_sess || !se_lun) { 2015 2015 pr_err("SPC-3 PR: se_sess || struct se_lun is NULL!\n"); ··· 2131 2131 ret = TCM_RESERVATION_CONFLICT; 2132 2132 goto out; 2133 2133 } 2134 + type = pr_reg->pr_res_type; 2134 2135 2135 2136 spin_lock(&pr_tmpl->registration_lock); 2136 2137 /* ··· 2162 2161 * Release the calling I_T Nexus registration now.. 2163 2162 */ 2164 2163 __core_scsi3_free_registration(cmd->se_dev, pr_reg, NULL, 1); 2164 + pr_reg = NULL; 2165 2165 2166 2166 /* 2167 2167 * From spc4r17, section 5.7.11.3 Unregistering ··· 2176 2174 * RESERVATIONS RELEASED. 2177 2175 */ 2178 2176 if (pr_holder && 2179 - (pr_reg->pr_res_type == PR_TYPE_WRITE_EXCLUSIVE_REGONLY || 2180 - pr_reg->pr_res_type == PR_TYPE_EXCLUSIVE_ACCESS_REGONLY)) { 2177 + (type == PR_TYPE_WRITE_EXCLUSIVE_REGONLY || 2178 + type == PR_TYPE_EXCLUSIVE_ACCESS_REGONLY)) { 2181 2179 list_for_each_entry(pr_reg_p, 2182 2180 &pr_tmpl->registration_list, 2183 2181 pr_reg_list) { ··· 2196 2194 ret = core_scsi3_update_and_write_aptpl(dev, aptpl); 2197 2195 2198 2196 out: 2199 - core_scsi3_put_pr_reg(pr_reg); 2197 + if (pr_reg) 2198 + core_scsi3_put_pr_reg(pr_reg); 2200 2199 return ret; 2201 2200 } 2202 2201
+8
drivers/target/target_core_sbc.c
··· 1074 1074 struct scatterlist *psg; 1075 1075 void *paddr, *addr; 1076 1076 unsigned int i, len, left; 1077 + unsigned int offset = 0; 1077 1078 1078 1079 left = sectors * dev->prot_length; 1079 1080 1080 1081 for_each_sg(cmd->t_prot_sg, psg, cmd->t_prot_nents, i) { 1081 1082 1082 1083 len = min(psg->length, left); 1084 + if (offset >= sg->length) { 1085 + sg = sg_next(sg); 1086 + offset = 0; 1087 + sg_off = sg->offset; 1088 + } 1089 + 1083 1090 paddr = kmap_atomic(sg_page(psg)) + psg->offset; 1084 1091 addr = kmap_atomic(sg_page(sg)) + sg_off; 1085 1092 ··· 1096 1089 memcpy(addr, paddr, len); 1097 1090 1098 1091 left -= len; 1092 + offset += len; 1099 1093 kunmap_atomic(paddr); 1100 1094 kunmap_atomic(addr); 1101 1095 }
+2 -2
drivers/target/target_core_spc.c
··· 440 440 padding = ((-scsi_target_len) & 3); 441 441 if (padding) 442 442 scsi_target_len += padding; 443 - if (scsi_name_len > 256) 444 - scsi_name_len = 256; 443 + if (scsi_target_len > 256) 444 + scsi_target_len = 256; 445 445 446 446 buf[off-1] = scsi_target_len; 447 447 off += scsi_target_len;
+1 -4
drivers/target/target_core_transport.c
··· 669 669 return; 670 670 } 671 671 672 - if (!success) 673 - cmd->transport_state |= CMD_T_FAILED; 674 - 675 672 /* 676 673 * Check for case where an explicit ABORT_TASK has been received 677 674 * and transport_wait_for_tasks() will be waiting for completion.. ··· 678 681 spin_unlock_irqrestore(&cmd->t_state_lock, flags); 679 682 complete(&cmd->t_transport_stop_comp); 680 683 return; 681 - } else if (cmd->transport_state & CMD_T_FAILED) { 684 + } else if (!success) { 682 685 INIT_WORK(&cmd->work, target_complete_failure_work); 683 686 } else { 684 687 INIT_WORK(&cmd->work, target_complete_ok_work);
-1
include/target/target_core_base.h
··· 525 525 #define CMD_T_COMPLETE (1 << 2) 526 526 #define CMD_T_SENT (1 << 4) 527 527 #define CMD_T_STOP (1 << 5) 528 - #define CMD_T_FAILED (1 << 6) 529 528 #define CMD_T_DEV_ACTIVE (1 << 7) 530 529 #define CMD_T_REQUEST_STOP (1 << 8) 531 530 #define CMD_T_BUSY (1 << 9)