Received: by 2002:ac0:a581:0:0:0:0:0 with SMTP id m1-v6csp3081129imm; Sun, 1 Jul 2018 11:50:18 -0700 (PDT) X-Google-Smtp-Source: ADUXVKIktNR4Fj6vcfGm6D18zxi/KxcBCZcJn+oa5SMntw4eGSs4ubEOx6BRHZ2IPi1nEarlnBqr X-Received: by 2002:a17:902:a5cb:: with SMTP id t11-v6mr23054579plq.71.1530471017927; Sun, 01 Jul 2018 11:50:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1530471017; cv=none; d=google.com; s=arc-20160816; b=vHnkHU2+DGnpBDNOld+eXyqiC1ngyPijeovbnDVPnQ+YuWCB1FvJ0jq9ARAfSRYnlm ttsdCuzY6e7Koy/TRQRlC2WHxW6Em5RvJovvyMeVSUySDoAswBWpTuxajr0P7Aj0hlGR 735mS9meP4IwJJYNxd2OCXBtPPoC05vuK/iRJt4esHWnNzw02ie1CFGeyEYYKSSAoddi 7wqpYxAOXuJwselt03NuJ8O3cE08DtYuYXCHb1GJSJmfc5mZWQiVTNWHT7bqpbsX5x7t c59vPvrtQbBXn7vi+KCLghjXtyrl3G6kWqcwhNJ+A462XHCfhwloHB4LpbrixKncJOVu I1LA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:user-agent:references :in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=YAePOqZSXkjq/s+0D8MK+uGxmxxHqwRpvPcYVqF8tFU=; b=vhlanfJDZLIAD69CZfWt/Es8WmoK84knkRXVevTNjUkfE1E4fq0aqfOdXSO/MpPV/N mc31WJ8r+bQEGjZ9+TPx8lQYUlZRiUMUDNZA233oiLiBHhds5IpjBBurOIFlvYNpLlRj 7pr99oPFmx5NLXeIreYIRGcqMG06alpLMl4zPkhvkwOaH1KU7pPeGL7DxhiQf903PX9e Jxe5yKzEwLr9n1oLlW8Vpx+Y+Ku8MvLGMQcUNd2mUBYOp/qh5mry/FfLli/QdBuzhg8l kqgZAV3H523EpKmU6KVOZ7aX89dB63RCn/ex+Ar44ulKLRXwIfOIUkDaADlNN88dUGCb x3QA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 1-v6si14884089plu.282.2018.07.01.11.50.03; Sun, 01 Jul 2018 11:50:17 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932208AbeGASsQ (ORCPT + 99 others); Sun, 1 Jul 2018 14:48:16 -0400 Received: from mail.linuxfoundation.org ([140.211.169.12]:59742 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752677AbeGAQLf (ORCPT ); Sun, 1 Jul 2018 12:11:35 -0400 Received: from localhost (LFbn-1-12247-202.w90-92.abo.wanadoo.fr [90.92.61.202]) by mail.linuxfoundation.org (Postfix) with ESMTPSA id 756A0ACD; Sun, 1 Jul 2018 16:11:34 +0000 (UTC) From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Chris Leech , Lee Duncan , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 3.18 08/85] scsi: iscsi: respond to netlink with unicast when appropriate Date: Sun, 1 Jul 2018 18:01:26 +0200 Message-Id: <20180701153122.691303897@linuxfoundation.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180701153122.365061142@linuxfoundation.org> References: <20180701153122.365061142@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 3.18-stable review patch. If anyone has any objections, please let me know. ------------------ From: Chris Leech [ Upstream commit af17092810a887178195276255b7b31f8fbe7dbe ] Instead of always multicasting responses, send a unicast netlink message directed at the correct pid. This will be needed if we ever want to support multiple userspace processes interacting with the kernel over iSCSI netlink simultaneously. Limitations can currently be seen if you attempt to run multiple iscsistart commands in parallel. We've fixed up the userspace issues in iscsistart that prevented multiple instances from running, so now attempts to speed up booting by bringing up multiple iscsi sessions at once in the initramfs are just running into misrouted responses that this fixes. Signed-off-by: Chris Leech Reviewed-by: Lee Duncan Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/scsi/scsi_transport_iscsi.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) --- a/drivers/scsi/scsi_transport_iscsi.c +++ b/drivers/scsi/scsi_transport_iscsi.c @@ -2343,6 +2343,12 @@ iscsi_multicast_skb(struct sk_buff *skb, return nlmsg_multicast(nls, skb, 0, group, gfp); } +static int +iscsi_unicast_skb(struct sk_buff *skb, u32 portid) +{ + return nlmsg_unicast(nls, skb, portid); +} + int iscsi_recv_pdu(struct iscsi_cls_conn *conn, struct iscsi_hdr *hdr, char *data, uint32_t data_size) { @@ -2545,14 +2551,11 @@ void iscsi_ping_comp_event(uint32_t host EXPORT_SYMBOL_GPL(iscsi_ping_comp_event); static int -iscsi_if_send_reply(uint32_t group, int seq, int type, int done, int multi, - void *payload, int size) +iscsi_if_send_reply(u32 portid, int type, void *payload, int size) { struct sk_buff *skb; struct nlmsghdr *nlh; int len = nlmsg_total_size(size); - int flags = multi ? NLM_F_MULTI : 0; - int t = done ? NLMSG_DONE : type; skb = alloc_skb(len, GFP_ATOMIC); if (!skb) { @@ -2560,10 +2563,9 @@ iscsi_if_send_reply(uint32_t group, int return -ENOMEM; } - nlh = __nlmsg_put(skb, 0, 0, t, (len - sizeof(*nlh)), 0); - nlh->nlmsg_flags = flags; + nlh = __nlmsg_put(skb, 0, 0, type, (len - sizeof(*nlh)), 0); memcpy(nlmsg_data(nlh), payload, size); - return iscsi_multicast_skb(skb, group, GFP_ATOMIC); + return iscsi_unicast_skb(skb, portid); } static int @@ -3490,6 +3492,7 @@ static int iscsi_if_recv_msg(struct sk_buff *skb, struct nlmsghdr *nlh, uint32_t *group) { int err = 0; + u32 portid; struct iscsi_uevent *ev = nlmsg_data(nlh); struct iscsi_transport *transport = NULL; struct iscsi_internal *priv; @@ -3510,10 +3513,12 @@ iscsi_if_recv_msg(struct sk_buff *skb, s if (!try_module_get(transport->owner)) return -EINVAL; + portid = NETLINK_CB(skb).portid; + switch (nlh->nlmsg_type) { case ISCSI_UEVENT_CREATE_SESSION: err = iscsi_if_create_session(priv, ep, ev, - NETLINK_CB(skb).portid, + portid, ev->u.c_session.initial_cmdsn, ev->u.c_session.cmds_max, ev->u.c_session.queue_depth); @@ -3526,7 +3531,7 @@ iscsi_if_recv_msg(struct sk_buff *skb, s } err = iscsi_if_create_session(priv, ep, ev, - NETLINK_CB(skb).portid, + portid, ev->u.c_bound_session.initial_cmdsn, ev->u.c_bound_session.cmds_max, ev->u.c_bound_session.queue_depth); @@ -3684,6 +3689,8 @@ iscsi_if_recv_msg(struct sk_buff *skb, s static void iscsi_if_rx(struct sk_buff *skb) { + u32 portid = NETLINK_CB(skb).portid; + mutex_lock(&rx_queue_mutex); while (skb->len >= NLMSG_HDRLEN) { int err; @@ -3719,8 +3726,8 @@ iscsi_if_rx(struct sk_buff *skb) break; if (ev->type == ISCSI_UEVENT_GET_CHAP && !err) break; - err = iscsi_if_send_reply(group, nlh->nlmsg_seq, - nlh->nlmsg_type, 0, 0, ev, sizeof(*ev)); + err = iscsi_if_send_reply(portid, nlh->nlmsg_type, + ev, sizeof(*ev)); } while (err < 0 && err != -ECONNREFUSED && err != -ESRCH); skb_pull(skb, rlen); }