Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp4154986pxb; Mon, 27 Sep 2021 10:30:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxfgHgdJhKmiLB6iZoc75b1gk5GXMfX9onBm8KUadMwKdMQomjm1ljs54F/4uLvgTqZbyAG X-Received: by 2002:a63:f242:: with SMTP id d2mr729629pgk.384.1632763828721; Mon, 27 Sep 2021 10:30:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632763828; cv=none; d=google.com; s=arc-20160816; b=ENHgBN9uhQqJipm+ibJeRI3r+XjPl6OlEiBI23bGJV+ZkSWqOVaT8wJ/TIGM5/bNOB SF0MzHKkQbkY1TcDovvslP45UNDIKoqgjSwfkK3OkrVkH8S8HEonrTaNAWWAtKo23zT9 tJz1f2/+DtcImPuj4eq7qP7xJ/BdjYHb4BAwcbtQGLe3evrGGWPLvx7C5jAuODAFV7XF sgHTKnvh4divkgEUmj2IWeUmX3OsQvW0fBJjKIZOyDts0099ZaPz2JOIy9srX8Hdn700 YQ4DR9B5Gr74QdkGKogAuTyjSUQdLNF1tx0HvzHExZBZLEPrfITgVgMX6TZlwB9ySYao iEmA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=roJTiu/6J7sR1wdlj7kKq42gClAXrTe4+QYK4sc3XiI=; b=aSdMq466/nU00wbLSUpK9Ix1mZlGyANCqaVjGCBc1ap7Dlzx8sZoRZXI5GnyyuLReO TaYKlm0z9IucHF4RXeu+dDXB4+N6npT3SW7VSx1FfTUmYqhB17KAS4U2/GbYPFaFwi6p jlpBDPoUfI9JxgBCIPhbXq9iGmNFPkaZWQy4rS11V+YoAj+froByiIZU2fUAMEQnqFsY ztUih/bJo4mXrD5/WEqugQdbP6WwzFQuF0BI6zvYGf3epqIVuPh9azcfqI94UkjWZ2Q3 PDCtEtDuCmUZt6sNXCQ0LkXi1wTHoIQb+dMzJGmp2krsFOU19f0buOoSgfVTxv2RTX6Z VR3g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=pZspe8Yd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m6si19910769plx.221.2021.09.27.10.30.15; Mon, 27 Sep 2021 10:30:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=pZspe8Yd; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237878AbhI0Raj (ORCPT + 99 others); Mon, 27 Sep 2021 13:30:39 -0400 Received: from mail.kernel.org ([198.145.29.99]:43744 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237998AbhI0R0I (ORCPT ); Mon, 27 Sep 2021 13:26:08 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 950C761411; Mon, 27 Sep 2021 17:16:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1632762985; bh=AT2QYDX/clU5Q1ylQYfJn92IkLNMMbYm5DX5wMO0jZ0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pZspe8YdQrTD4utLuzMum6t8RDhi+Qx/u/x6vjOLhIJxgQhZH6LIJsm76K5zv27Zl +/N1EI+tkqmU1uYTPjp9627GYCpkD/pYJVkqgeRihKrjWJUYcSpSKaDPDqkBR7mvUH D76DPiB5yD/tFec6YZ46ABhz09959IPE7boaWzcc= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Bodo Stroesser , Maurizio Lombardi , "Martin K. Petersen" , Sasha Levin Subject: [PATCH 5.14 093/162] scsi: target: Fix the pgr/alua_support_store functions Date: Mon, 27 Sep 2021 19:02:19 +0200 Message-Id: <20210927170236.652852872@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210927170233.453060397@linuxfoundation.org> References: <20210927170233.453060397@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Maurizio Lombardi [ Upstream commit ef7ae7f746e95c6fa4ec2bcfacb949c36263da78 ] Commit 356ba2a8bc8d ("scsi: target: tcmu: Make pgr_support and alua_support attributes writable") introduced support for changeable alua_support and pgr_support target attributes. These can only be changed if the backstore is user-backed, otherwise the kernel returns -EINVAL. This triggers a warning in the targetcli/rtslib code when performing a target restore that includes non-userbacked backstores: # targetctl restore Storage Object block/storage1: Cannot set attribute alua_support: [Errno 22] Invalid argument, skipped Storage Object block/storage1: Cannot set attribute pgr_support: [Errno 22] Invalid argument, skipped Fix this warning by returning an error code only if we are really going to flip the PGR/ALUA bit in the transport_flags field, otherwise we will do nothing and return success. Return ENOSYS instead of EINVAL if the pgr/alua attributes can not be changed, this way it will be possible for userspace to understand if the operation failed because an invalid value has been passed to strtobool() or because the attributes are fixed. Fixes: 356ba2a8bc8d ("scsi: target: tcmu: Make pgr_support and alua_support attributes writable") Link: https://lore.kernel.org/r/20210906151809.52811-1-mlombard@redhat.com Reviewed-by: Bodo Stroesser Signed-off-by: Maurizio Lombardi Signed-off-by: Martin K. Petersen Signed-off-by: Sasha Levin --- drivers/target/target_core_configfs.c | 32 +++++++++++++++++---------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/drivers/target/target_core_configfs.c b/drivers/target/target_core_configfs.c index 102ec644bc8a..023bd4516a68 100644 --- a/drivers/target/target_core_configfs.c +++ b/drivers/target/target_core_configfs.c @@ -1110,20 +1110,24 @@ static ssize_t alua_support_store(struct config_item *item, { struct se_dev_attrib *da = to_attrib(item); struct se_device *dev = da->da_dev; - bool flag; + bool flag, oldflag; int ret; + ret = strtobool(page, &flag); + if (ret < 0) + return ret; + + oldflag = !(dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_ALUA); + if (flag == oldflag) + return count; + if (!(dev->transport->transport_flags_changeable & TRANSPORT_FLAG_PASSTHROUGH_ALUA)) { pr_err("dev[%p]: Unable to change SE Device alua_support:" " alua_support has fixed value\n", dev); - return -EINVAL; + return -ENOSYS; } - ret = strtobool(page, &flag); - if (ret < 0) - return ret; - if (flag) dev->transport_flags &= ~TRANSPORT_FLAG_PASSTHROUGH_ALUA; else @@ -1145,20 +1149,24 @@ static ssize_t pgr_support_store(struct config_item *item, { struct se_dev_attrib *da = to_attrib(item); struct se_device *dev = da->da_dev; - bool flag; + bool flag, oldflag; int ret; + ret = strtobool(page, &flag); + if (ret < 0) + return ret; + + oldflag = !(dev->transport_flags & TRANSPORT_FLAG_PASSTHROUGH_PGR); + if (flag == oldflag) + return count; + if (!(dev->transport->transport_flags_changeable & TRANSPORT_FLAG_PASSTHROUGH_PGR)) { pr_err("dev[%p]: Unable to change SE Device pgr_support:" " pgr_support has fixed value\n", dev); - return -EINVAL; + return -ENOSYS; } - ret = strtobool(page, &flag); - if (ret < 0) - return ret; - if (flag) dev->transport_flags &= ~TRANSPORT_FLAG_PASSTHROUGH_PGR; else -- 2.33.0