Merge branch 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending
Pull SCSI target updates from Nicholas Bellinger: "Here are the outstanding target-pending updates for v4.3-rc1. Mostly bug-fixes and minor changes this round. The fallout from the big v4.2-rc1 RCU conversion have (thus far) been minimal. The highlights this round include: - Move sense handling routines into scsi_common code (Sagi) - Return ABORTED_COMMAND sense key for PI errors (Sagi) - Add tpg_enabled_sendtargets attribute for disabled iscsi-target discovery (David) - Shrink target struct se_cmd by rearranging fields (Roland) - Drop iSCSI use of mutex around max_cmd_sn increment (Roland) - Replace iSCSI __kernel_sockaddr_storage with sockaddr_storage (Andy + Chris) - Honor fabric max_data_sg_nents I/O transfer limit (Arun + Himanshu + nab) - Fix EXTENDED_COPY >= v4.1 regression OOPsen (Alex + nab)" * 'for-next' of git://git.kernel.org/pub/scm/linux/kernel/git/nab/target-pending: (37 commits) target: use stringify.h instead of own definition target/user: Fix UFLAG_UNKNOWN_OP handling target: Remove no-op conditional target/user: Remove unused variable target: Fix max_cmd_sn increment w/o cmdsn mutex regressions target: Attach EXTENDED_COPY local I/O descriptors to xcopy_pt_sess target/qla2xxx: Honor max_data_sg_nents I/O transfer limit target/iscsi: Replace __kernel_sockaddr_storage with sockaddr_storage target/iscsi: Replace conn->login_ip with login_sockaddr target/iscsi: Keep local_ip as the actual sockaddr target/iscsi: Fix np_ip bracket issue by removing np_ip target: Drop iSCSI use of mutex around max_cmd_sn increment qla2xxx: Update tcm_qla2xxx module description to 24xx+ iscsi-target: Add tpg_enabled_sendtargets for disabled discovery drivers: target: Drop unlikely before IS_ERR(_OR_NULL) target: check DPO/FUA usage for COMPARE AND WRITE target: Shrink struct se_cmd by rearranging fields target: Remove cmd->se_ordered_id (unused except debug log lines) target: add support for START_STOP_UNIT SCSI opcode target: improve unsupported opcode message ...
This commit is contained in:
@@ -269,14 +269,14 @@ int iscsit_deaccess_np(struct iscsi_np *np, struct iscsi_portal_group *tpg,
|
||||
}
|
||||
|
||||
bool iscsit_check_np_match(
|
||||
struct __kernel_sockaddr_storage *sockaddr,
|
||||
struct sockaddr_storage *sockaddr,
|
||||
struct iscsi_np *np,
|
||||
int network_transport)
|
||||
{
|
||||
struct sockaddr_in *sock_in, *sock_in_e;
|
||||
struct sockaddr_in6 *sock_in6, *sock_in6_e;
|
||||
bool ip_match = false;
|
||||
u16 port;
|
||||
u16 port, port_e;
|
||||
|
||||
if (sockaddr->ss_family == AF_INET6) {
|
||||
sock_in6 = (struct sockaddr_in6 *)sockaddr;
|
||||
@@ -288,6 +288,7 @@ bool iscsit_check_np_match(
|
||||
ip_match = true;
|
||||
|
||||
port = ntohs(sock_in6->sin6_port);
|
||||
port_e = ntohs(sock_in6_e->sin6_port);
|
||||
} else {
|
||||
sock_in = (struct sockaddr_in *)sockaddr;
|
||||
sock_in_e = (struct sockaddr_in *)&np->np_sockaddr;
|
||||
@@ -296,9 +297,10 @@ bool iscsit_check_np_match(
|
||||
ip_match = true;
|
||||
|
||||
port = ntohs(sock_in->sin_port);
|
||||
port_e = ntohs(sock_in_e->sin_port);
|
||||
}
|
||||
|
||||
if (ip_match && (np->np_port == port) &&
|
||||
if (ip_match && (port_e == port) &&
|
||||
(np->np_network_transport == network_transport))
|
||||
return true;
|
||||
|
||||
@@ -309,7 +311,7 @@ bool iscsit_check_np_match(
|
||||
* Called with mutex np_lock held
|
||||
*/
|
||||
static struct iscsi_np *iscsit_get_np(
|
||||
struct __kernel_sockaddr_storage *sockaddr,
|
||||
struct sockaddr_storage *sockaddr,
|
||||
int network_transport)
|
||||
{
|
||||
struct iscsi_np *np;
|
||||
@@ -340,12 +342,9 @@ static struct iscsi_np *iscsit_get_np(
|
||||
}
|
||||
|
||||
struct iscsi_np *iscsit_add_np(
|
||||
struct __kernel_sockaddr_storage *sockaddr,
|
||||
char *ip_str,
|
||||
struct sockaddr_storage *sockaddr,
|
||||
int network_transport)
|
||||
{
|
||||
struct sockaddr_in *sock_in;
|
||||
struct sockaddr_in6 *sock_in6;
|
||||
struct iscsi_np *np;
|
||||
int ret;
|
||||
|
||||
@@ -368,16 +367,6 @@ struct iscsi_np *iscsit_add_np(
|
||||
}
|
||||
|
||||
np->np_flags |= NPF_IP_NETWORK;
|
||||
if (sockaddr->ss_family == AF_INET6) {
|
||||
sock_in6 = (struct sockaddr_in6 *)sockaddr;
|
||||
snprintf(np->np_ip, IPV6_ADDRESS_SPACE, "%s", ip_str);
|
||||
np->np_port = ntohs(sock_in6->sin6_port);
|
||||
} else {
|
||||
sock_in = (struct sockaddr_in *)sockaddr;
|
||||
sprintf(np->np_ip, "%s", ip_str);
|
||||
np->np_port = ntohs(sock_in->sin_port);
|
||||
}
|
||||
|
||||
np->np_network_transport = network_transport;
|
||||
spin_lock_init(&np->np_thread_lock);
|
||||
init_completion(&np->np_restart_comp);
|
||||
@@ -411,8 +400,8 @@ struct iscsi_np *iscsit_add_np(
|
||||
list_add_tail(&np->np_list, &g_np_list);
|
||||
mutex_unlock(&np_lock);
|
||||
|
||||
pr_debug("CORE[0] - Added Network Portal: %s:%hu on %s\n",
|
||||
np->np_ip, np->np_port, np->np_transport->name);
|
||||
pr_debug("CORE[0] - Added Network Portal: %pISpc on %s\n",
|
||||
&np->np_sockaddr, np->np_transport->name);
|
||||
|
||||
return np;
|
||||
}
|
||||
@@ -481,8 +470,8 @@ int iscsit_del_np(struct iscsi_np *np)
|
||||
list_del(&np->np_list);
|
||||
mutex_unlock(&np_lock);
|
||||
|
||||
pr_debug("CORE[0] - Removed Network Portal: %s:%hu on %s\n",
|
||||
np->np_ip, np->np_port, np->np_transport->name);
|
||||
pr_debug("CORE[0] - Removed Network Portal: %pISpc on %s\n",
|
||||
&np->np_sockaddr, np->np_transport->name);
|
||||
|
||||
iscsit_put_transport(np->np_transport);
|
||||
kfree(np);
|
||||
@@ -1209,7 +1198,6 @@ static u32 iscsit_do_crypto_hash_sg(
|
||||
u8 *pad_bytes)
|
||||
{
|
||||
u32 data_crc;
|
||||
u32 i;
|
||||
struct scatterlist *sg;
|
||||
unsigned int page_off;
|
||||
|
||||
@@ -1218,15 +1206,15 @@ static u32 iscsit_do_crypto_hash_sg(
|
||||
sg = cmd->first_data_sg;
|
||||
page_off = cmd->first_data_sg_off;
|
||||
|
||||
i = 0;
|
||||
while (data_length) {
|
||||
u32 cur_len = min_t(u32, data_length, (sg[i].length - page_off));
|
||||
u32 cur_len = min_t(u32, data_length, (sg->length - page_off));
|
||||
|
||||
crypto_hash_update(hash, &sg[i], cur_len);
|
||||
crypto_hash_update(hash, sg, cur_len);
|
||||
|
||||
data_length -= cur_len;
|
||||
page_off = 0;
|
||||
i++;
|
||||
/* iscsit_map_iovec has already checked for invalid sg pointers */
|
||||
sg = sg_next(sg);
|
||||
}
|
||||
|
||||
if (padding) {
|
||||
@@ -2556,7 +2544,7 @@ static int iscsit_send_conn_drop_async_message(
|
||||
cmd->stat_sn = conn->stat_sn++;
|
||||
hdr->statsn = cpu_to_be32(cmd->stat_sn);
|
||||
hdr->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32(conn->sess->max_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32((u32) atomic_read(&conn->sess->max_cmd_sn));
|
||||
hdr->async_event = ISCSI_ASYNC_MSG_DROPPING_CONNECTION;
|
||||
hdr->param1 = cpu_to_be16(cmd->logout_cid);
|
||||
hdr->param2 = cpu_to_be16(conn->sess->sess_ops->DefaultTime2Wait);
|
||||
@@ -2628,7 +2616,7 @@ iscsit_build_datain_pdu(struct iscsi_cmd *cmd, struct iscsi_conn *conn,
|
||||
hdr->statsn = cpu_to_be32(0xFFFFFFFF);
|
||||
|
||||
hdr->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32(conn->sess->max_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32((u32) atomic_read(&conn->sess->max_cmd_sn));
|
||||
hdr->datasn = cpu_to_be32(datain->data_sn);
|
||||
hdr->offset = cpu_to_be32(datain->offset);
|
||||
|
||||
@@ -2839,7 +2827,7 @@ iscsit_build_logout_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn,
|
||||
|
||||
iscsit_increment_maxcmdsn(cmd, conn->sess);
|
||||
hdr->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32(conn->sess->max_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32((u32) atomic_read(&conn->sess->max_cmd_sn));
|
||||
|
||||
pr_debug("Built Logout Response ITT: 0x%08x StatSN:"
|
||||
" 0x%08x Response: 0x%02x CID: %hu on CID: %hu\n",
|
||||
@@ -2902,7 +2890,7 @@ iscsit_build_nopin_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn,
|
||||
iscsit_increment_maxcmdsn(cmd, conn->sess);
|
||||
|
||||
hdr->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32(conn->sess->max_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32((u32) atomic_read(&conn->sess->max_cmd_sn));
|
||||
|
||||
pr_debug("Built NOPIN %s Response ITT: 0x%08x, TTT: 0x%08x,"
|
||||
" StatSN: 0x%08x, Length %u\n", (nopout_response) ?
|
||||
@@ -3049,7 +3037,7 @@ static int iscsit_send_r2t(
|
||||
hdr->ttt = cpu_to_be32(r2t->targ_xfer_tag);
|
||||
hdr->statsn = cpu_to_be32(conn->stat_sn);
|
||||
hdr->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32(conn->sess->max_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32((u32) atomic_read(&conn->sess->max_cmd_sn));
|
||||
hdr->r2tsn = cpu_to_be32(r2t->r2t_sn);
|
||||
hdr->data_offset = cpu_to_be32(r2t->offset);
|
||||
hdr->data_length = cpu_to_be32(r2t->xfer_len);
|
||||
@@ -3202,7 +3190,7 @@ void iscsit_build_rsp_pdu(struct iscsi_cmd *cmd, struct iscsi_conn *conn,
|
||||
|
||||
iscsit_increment_maxcmdsn(cmd, conn->sess);
|
||||
hdr->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32(conn->sess->max_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32((u32) atomic_read(&conn->sess->max_cmd_sn));
|
||||
|
||||
pr_debug("Built SCSI Response, ITT: 0x%08x, StatSN: 0x%08x,"
|
||||
" Response: 0x%02x, SAM Status: 0x%02x, CID: %hu\n",
|
||||
@@ -3321,7 +3309,7 @@ iscsit_build_task_mgt_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn,
|
||||
|
||||
iscsit_increment_maxcmdsn(cmd, conn->sess);
|
||||
hdr->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32(conn->sess->max_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32((u32) atomic_read(&conn->sess->max_cmd_sn));
|
||||
|
||||
pr_debug("Built Task Management Response ITT: 0x%08x,"
|
||||
" StatSN: 0x%08x, Response: 0x%02x, CID: %hu\n",
|
||||
@@ -3399,6 +3387,7 @@ iscsit_build_sendtargets_response(struct iscsi_cmd *cmd,
|
||||
int target_name_printed;
|
||||
unsigned char buf[ISCSI_IQN_LEN+12]; /* iqn + "TargetName=" + \0 */
|
||||
unsigned char *text_in = cmd->text_in_ptr, *text_ptr = NULL;
|
||||
bool active;
|
||||
|
||||
buffer_len = min(conn->conn_ops->MaxRecvDataSegmentLength,
|
||||
SENDTARGETS_BUF_LIMIT);
|
||||
@@ -3452,19 +3441,18 @@ iscsit_build_sendtargets_response(struct iscsi_cmd *cmd,
|
||||
}
|
||||
|
||||
spin_lock(&tpg->tpg_state_lock);
|
||||
if ((tpg->tpg_state == TPG_STATE_FREE) ||
|
||||
(tpg->tpg_state == TPG_STATE_INACTIVE)) {
|
||||
spin_unlock(&tpg->tpg_state_lock);
|
||||
continue;
|
||||
}
|
||||
active = (tpg->tpg_state == TPG_STATE_ACTIVE);
|
||||
spin_unlock(&tpg->tpg_state_lock);
|
||||
|
||||
if (!active && tpg->tpg_attrib.tpg_enabled_sendtargets)
|
||||
continue;
|
||||
|
||||
spin_lock(&tpg->tpg_np_lock);
|
||||
list_for_each_entry(tpg_np, &tpg->tpg_gnp_list,
|
||||
tpg_np_list) {
|
||||
struct iscsi_np *np = tpg_np->tpg_np;
|
||||
bool inaddr_any = iscsit_check_inaddr_any(np);
|
||||
char *fmt_str;
|
||||
struct sockaddr_storage *sockaddr;
|
||||
|
||||
if (np->np_network_transport != network_transport)
|
||||
continue;
|
||||
@@ -3492,15 +3480,15 @@ iscsit_build_sendtargets_response(struct iscsi_cmd *cmd,
|
||||
}
|
||||
}
|
||||
|
||||
if (np->np_sockaddr.ss_family == AF_INET6)
|
||||
fmt_str = "TargetAddress=[%s]:%hu,%hu";
|
||||
if (inaddr_any)
|
||||
sockaddr = &conn->local_sockaddr;
|
||||
else
|
||||
fmt_str = "TargetAddress=%s:%hu,%hu";
|
||||
sockaddr = &np->np_sockaddr;
|
||||
|
||||
len = sprintf(buf, fmt_str,
|
||||
inaddr_any ? conn->local_ip : np->np_ip,
|
||||
np->np_port,
|
||||
tpg->tpgt);
|
||||
len = sprintf(buf, "TargetAddress="
|
||||
"%pISpc,%hu",
|
||||
sockaddr,
|
||||
tpg->tpgt);
|
||||
len += 1;
|
||||
|
||||
if ((len + payload_len) > buffer_len) {
|
||||
@@ -3576,7 +3564,7 @@ iscsit_build_text_rsp(struct iscsi_cmd *cmd, struct iscsi_conn *conn,
|
||||
*/
|
||||
cmd->maxcmdsn_inc = 0;
|
||||
hdr->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32(conn->sess->max_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32((u32) atomic_read(&conn->sess->max_cmd_sn));
|
||||
|
||||
pr_debug("Built Text Response: ITT: 0x%08x, TTT: 0x%08x, StatSN: 0x%08x,"
|
||||
" Length: %u, CID: %hu F: %d C: %d\n", cmd->init_task_tag,
|
||||
@@ -3654,7 +3642,7 @@ iscsit_build_reject(struct iscsi_cmd *cmd, struct iscsi_conn *conn,
|
||||
cmd->stat_sn = conn->stat_sn++;
|
||||
hdr->statsn = cpu_to_be32(cmd->stat_sn);
|
||||
hdr->exp_cmdsn = cpu_to_be32(conn->sess->exp_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32(conn->sess->max_cmd_sn);
|
||||
hdr->max_cmdsn = cpu_to_be32((u32) atomic_read(&conn->sess->max_cmd_sn));
|
||||
|
||||
}
|
||||
EXPORT_SYMBOL(iscsit_build_reject);
|
||||
|
Reference in New Issue
Block a user