From nobody Mon Sep 28 18:35:51 2026 Received: from outbound.st.icloud.com (st-2005b-snip4-5.eps.apple.com [57.103.79.18]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9EE26391E78 for ; Wed, 19 Aug 2026 03:23:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.79.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787109836; cv=none; b=KSMMxvldtxhwQVRiS/GUagAorrGs/jllKXhFQjs5LBsfREAHQ7TBcTZp/ONGUqC1IdIGYgfCDBT6PZxvup3sK3bSN7tNAcMv0s0VzVdxlJp5Ttlevk6SKj1wdiLyIVyC9Y6kJG3O9FW5ABDICOErkVkh0En8yRKew92FCjm8yN4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787109836; c=relaxed/simple; bh=0fPc6CARPcuAaajWRtt23gGGfR1jiXTnCmvuXPbfhcM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C0b55KD29gBkk/vl8o8AHb7Ac/pPUZpNBN8VGDbYEY2lYwV+xGMswo1cXOpmvt+lSqgyGA5i5UFlWtw2tRVnxmNKCKGnxkUaM1GIIL6I7f+K+np8/pYNixleiWT0stRN7usaT3HTiJ4FqdMmHHh9fJN6EMit3MVbrAFOLX2NXXQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=icloud.com; spf=pass smtp.mailfrom=icloud.com; dkim=pass (2048-bit key) header.d=icloud.com header.i=@icloud.com header.b=R0XO/kHZ; arc=none smtp.client-ip=57.103.79.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=icloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=icloud.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=icloud.com header.i=@icloud.com header.b="R0XO/kHZ" Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-4 (Postfix) with ESMTPS id C249E1800103; Wed, 19 Aug 2026 03:23:50 +0000 (UTC) X-ICL-RepId: 01a0180b-f03b-72ab-bddc-37aac77c513c X-ICL-Out-Info: HUtFAUMEWwJACUgBTUQeDx5WFlZNRAJCTQhKC0MFWgNeC00HQwZdBlBcHA4IRANTEVdKA14GK1sTVRdGCRkIXR0ZHldQXgheH0wcHQ5YBhICWkUETV8OXh8EF0YZVQRHHl1WQBkZAlEcVg1XQ1QEX1BJDEFQbFoARxdIHV0ZWW9QXRwOBFQHXQVdVlACWktfGV1FD18HWQRAAUkKXQRZAUIIVgdUBFwGRhRKHghEA1MRV0oDXgYrWxNVF0YJGQhdHQdYRxRHDg8ZWhRcGFM= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1787109833; x=1789701833; bh=SKbj1OiC/mTsqe+ug23DPAsn1yxr1ddVH2kyAr8TTnY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=R0XO/kHZ7NKqMwSs8KzgONas5J7/jFZXuxHssFLktv4F4G0mw1eIg2EdtYKsxwenQOV1F7pyMKcxXOXmNAA3RqRu5Zwb5dKGUE45Ef4wo9OyrTWla7GQntsOfVQ1NU8QVZcxx56Ftt3DQdHJ/g1KYWWcQzEB+cmGanmIDLvszHm3iOsKr45TgAWqiFpXYPlg0ZXXYNCzzCH0027qf7RHzAozlLCpmKDcOW7jnhiHndHQzDUwOBpMJPC/Hqi2AP2SRqyT0BHcFGAQU4z3x1VbvIMtOq92QQMij+KJJ8lVMHn8K2Hkyr6rmJGVjFKi6FJjJ5mGuQjWzm8OhvkXxI4Gvg== Received: from machine.resnet.purdue.edu (unknown [17.156.216.30]) by p00-icloudmta-asmtp-us-east-1a-100-percent-4 (Postfix) with ESMTPSA id DC4E318000B7; Wed, 19 Aug 2026 03:23:49 +0000 (UTC) From: Eshaan Deshmukh To: "Martin K . Petersen" , "James E . J . Bottomley" Cc: John Garry , Jason Yan , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, Eshaan Deshmukh Subject: [PATCH v4 1/3] scsi: libsas: Handle errors in sas_ex_add_parent_port() Date: Tue, 18 Aug 2026 23:23:19 -0400 Message-ID: <20260819032321.493746-2-eshaan2031@icloud.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260819032321.493746-1-eshaan2031@icloud.com> References: <20260819032321.493746-1-eshaan2031@icloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: LUoCaC8RCF02c614aNZjpjfVsB2Vn3_n X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDAyMiBTYWx0ZWRfXyBsyL0j60zcN ZCe0ZH4OGJjiNoNkfE6GH6k+fpB6vOmGVB16AmjZze1mhUvR/ChapVvKz1kBd6K7KTbHvmv/dul JRJPP72vDQqzqdaGGW7Ft/LQ9QOMIstv+iT6TwT2o+LcbiirpV/TM7QkgKcP+Z1Zb6agbckUFWj As3CUm8BNvL1NJLKhnJgtzsdWjg+cmrO7YO877JI7Zwln7U2QLM5uFZhq7byaYKB6DmyDN+INmw jc7AwTppXpBCF/0F2KaYNFGD8mq8fwdcJzCOhHZhwHkNi4eNsrCF1jo0EQA08LEvNsJHutj5U2O qlJgFVWPgoSOlXfS6J7b/ZFfxY7DUC0GEptPhrRt9ty6JJYO4grJhqPCeXjmVU= X-Proofpoint-ORIG-GUID: LUoCaC8RCF02c614aNZjpjfVsB2Vn3_n X-Authority-Info-Out: v=2.4 cv=UJDQ3Sfy c=1 sm=1 tr=0 ts=6a8521c7 cx=c_apl:c_pps:t_out a=oyWFxbOnq+dmhQrAPgaJYA==:117 a=oyWFxbOnq+dmhQrAPgaJYA==:17 a=Sv0fKeRqtYgA:10 a=x7bEGLp0ZPQA:10 a=ea8ixM18I5MA:10 a=VkNPw1HP01LnGYTKEx00:22 a=v3ZZPjhaAAAA:8 a=i0Imq2-WVZI-w4_-C1cA:9 X-JNJ: AAAAAAABgH9eI67iUak/uIFN9mN6GFv8uzlJ7GKcRG1g0bUYKsTjFJXxOiZuCch+ZzutzRx3opcJRaw7nEIeLxs2sGIbnjVw1Z2a6Az7mfKCzgnETpYKB349fAQUufAknKDksF0aZMuIJj7fhIxsYJYLZ8s3A9WagO3QEss60mbpJBVhMxOmBTP67uV8wuJlz3uZ5DJjjU+0oO6CPWxLLdvlViNwssUIdbxpKwO8aiNjzxxifs3ZovnPcWhn5UYfjMHQRyGgBi6ZWKZnzAE9K92aToUPZn1w3Cp6pliB0fLiDfBeJxA64OFAqr31+2HkWF0cB8ZU1WmSgENmWfdc5spnWP9cpFT0QorgPjk9xCUiWpidkJnq+AotBzP9wCqF8DUQBpEfzlYkWXEZgPeGR/KUueZnWePD9B/c7rKxL6h+BSgnPcWQpITJDY3PSj/ZIqz7QRKQ5mOYm1BDonWTAkiDHyFf2g9I5jMlXu7D3F/++ZwdM/dx/boM2aFBbGYmOCxBpm+lUWwEqK1hWdxllueHHgSp2y8SHzEIWjQ4pMqRdk79/pvkm3Qpxsaw9bbQr6Uyfb4A/G0eoSROfWXsCRvVbX+CmUPKjRYAvVQyhZ1FZFdj0aEALaGEGHR3W5FBRpTmlGvE7ExQ0GpyhQb91bJnNmDVUNDwgdblvsm+/qD7sP27Jb+4nGDKEZOSPw5S99pHN5TnPTxGKfga9eIwZvSIgM0WUdyKWD+SgzyGRondJrimBGmoIbZ2kiEDPSRqB/Q99SwqRpvop6eH5DUjPX1K6KId5ffBZIHBpsENQJa1 Content-Type: text/plain; charset="utf-8" The function sas_ex_add_parent_port() uses BUG_ON() if sas_port_alloc() or sas_port_add() fails. Change sas_ex_add_parent_port() to return error codes to the caller and free the sas_port_alloc() allocation. Also change sas_ex_discover_dev() to handle errors returned by sas_ex_add_parent_port(). Signed-off-by: Eshaan Deshmukh --- drivers/scsi/libsas/sas_expander.c | 30 +++++++++++++++++++++--------- 1 file changed, 21 insertions(+), 9 deletions(-) diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_e= xpander.c index f471ab464..f1a1417b0 100644 --- a/drivers/scsi/libsas/sas_expander.c +++ b/drivers/scsi/libsas/sas_expander.c @@ -33,19 +33,29 @@ static void sas_port_add_ex_phy(struct sas_port *port, = struct ex_phy *ex_phy) ex_phy->phy_state =3D PHY_DEVICE_DISCOVERED; } =20 -static void sas_ex_add_parent_port(struct domain_device *dev, int phy_id) +static int sas_ex_add_parent_port(struct domain_device *dev, int phy_id) { struct expander_device *ex =3D &dev->ex_dev; struct ex_phy *ex_phy =3D &ex->ex_phy[phy_id]; + int error; =20 if (!ex->parent_port) { ex->parent_port =3D sas_port_alloc(&dev->rphy->dev, phy_id); - /* FIXME: error handling */ - BUG_ON(!ex->parent_port); - BUG_ON(sas_port_add(ex->parent_port)); + if (!ex->parent_port) + return -ENOMEM; + + error =3D sas_port_add(ex->parent_port); + if (error) { + sas_port_free(ex->parent_port); + ex->parent_port =3D NULL; + return error; + } + sas_port_mark_backlink(ex->parent_port); } sas_port_add_ex_phy(ex->parent_port, ex_phy); + + return 0; } =20 /* ---------- SMP task management ---------- */ @@ -981,12 +991,14 @@ static int sas_ex_discover_dev(struct domain_device *= dev, int phy_id) } =20 /* Parent and domain coherency */ - if (!dev->parent && sas_phy_match_port_addr(dev->port, ex_phy)) { - sas_ex_add_parent_port(dev, phy_id); - return 0; - } + if (!dev->parent && sas_phy_match_port_addr(dev->port, ex_phy)) + return sas_ex_add_parent_port(dev, phy_id); + if (dev->parent && sas_phy_match_dev_addr(dev->parent, ex_phy)) { - sas_ex_add_parent_port(dev, phy_id); + res =3D sas_ex_add_parent_port(dev, phy_id); + if (res) + return res; + if (ex_phy->routing_attr =3D=3D TABLE_ROUTING) sas_configure_phy(dev, phy_id, dev->port->sas_addr, 1); return 0; --=20 2.55.0 From nobody Mon Sep 28 18:35:51 2026 Received: from outbound.st.icloud.com (st-2005i-snip4-11.eps.apple.com [57.103.79.113]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F10653BE652 for ; Wed, 19 Aug 2026 03:23:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.79.113 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787109837; cv=none; b=NjsPHtHAtCoQlbYWurWTK0hc5UPdSQlgfnArRLBZBVLrRFy8P10tTSsGkWOq2JJHrd7hquDvLthxUPXDGXqYRwpBz/S94n2+ulUm+ZMQ1LtM61uz4WGtr/N3EU0tztFJKMbzE6milhMh1ITR+0TQUrI7pa3lwZf5bv8MRum7m/Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787109837; c=relaxed/simple; bh=K6lNrpxYxUNj7xS9Sj1i3MPuM0Xjp/K+B2ztxKfSAp4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L0WVN9FR8WTzuGqijfR1MzFirWpKqjV1ZccQYxxwP2l59POMpvkVT9aGdohtLbj8Ak7jKtdruOgvBEmausR61X2+qeqLkJZgBczmISKaLUJd3xhD7tFvodnnX9dwaFaWLnY9ny7Rhzh2+8QyZFtV7cZC2cpWmf8IMhPDigiljNc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=icloud.com; spf=pass smtp.mailfrom=icloud.com; dkim=pass (2048-bit key) header.d=icloud.com header.i=@icloud.com header.b=DyVgUVqm; arc=none smtp.client-ip=57.103.79.113 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=icloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=icloud.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=icloud.com header.i=@icloud.com header.b="DyVgUVqm" Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-4 (Postfix) with ESMTPS id 51E231800113; Wed, 19 Aug 2026 03:23:52 +0000 (UTC) X-ICL-RepId: 01a0180b-f648-7428-a77b-43e6f963a562 X-ICL-Out-Info: HUtFAUMEWwJACUgBTUQeDx5WFlZNRAJCTQhKC0MFWgNeC00HQwZdBlBcHA4IRANTEVdKA14GK1sTVRdGCRkIXR0ZHldQXgheH0wcHQ5YBhICWkUETV8OXh8EF0YZVQRHHl1WQBkZAlEcVg1XQ1QEX1BJDEFQbFoARxdIHV0ZWW9QXRwOBFQHXQVdVlACWktfGV1FD18HWQRAAUkKXQRZAUIIVgdUBFwGRhRLHghEA1MRV0oDXgYrWxNVF0YJGQhdHQdYRxRHDg8ZWhRcGFM= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1787109834; x=1789701834; bh=CfSIEMIU8fz5D/RW2vvdqxds2IivGvHuZLoHdlr3P20=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=DyVgUVqmztDBYsQHgnGejNDZhHON5zKw2N2IBDA7H+gd4wpfMfUKVdzTu5jLafoCHYSQ2rylagrhjM9+t6DyuYMETpycyG3TisqB/FM5sEvPSKKZHNmhnKHR89pXUVhlahS35ovmfzILcNjs6t11bBb+0o8CUoPaAa1QCpnJ2JfgY4fePLVjpO3YFO+jsyG/gMktNdAG5eL53atQtlnGzHmIsUTTGHEwp17hmtyGz4KJN0vVcADDMCbAwlcBCHICx8pWk6NVLyAMeJafmQH+93HOQt4nfKek0c1CaOsEy9Kbbdhd7h2vqR5pJHV34DOeyf4uL3qHWjMzIYaTQAXnnA== Received: from machine.resnet.purdue.edu (unknown [17.156.216.30]) by p00-icloudmta-asmtp-us-east-1a-100-percent-4 (Postfix) with ESMTPSA id 76680180012E; Wed, 19 Aug 2026 03:23:51 +0000 (UTC) From: Eshaan Deshmukh To: "Martin K . Petersen" , "James E . J . Bottomley" Cc: John Garry , Jason Yan , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, Eshaan Deshmukh Subject: [PATCH v4 2/3] scsi: libsas: Handle errors in sas_set_ex_phy() Date: Tue, 18 Aug 2026 23:23:20 -0400 Message-ID: <20260819032321.493746-3-eshaan2031@icloud.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260819032321.493746-1-eshaan2031@icloud.com> References: <20260819032321.493746-1-eshaan2031@icloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=O9g0fR9W c=1 sm=1 tr=0 ts=6a8521c8 cx=c_apl:c_pps:t_out a=oyWFxbOnq+dmhQrAPgaJYA==:117 a=oyWFxbOnq+dmhQrAPgaJYA==:17 a=Sv0fKeRqtYgA:10 a=x7bEGLp0ZPQA:10 a=ea8ixM18I5MA:10 a=VkNPw1HP01LnGYTKEx00:22 a=v3ZZPjhaAAAA:8 a=PaGFxrA-4Pw6slCmviwA:9 X-Proofpoint-GUID: a2GDwC70-261bgYEUws4W1iv2uJaPQuC X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDAyMiBTYWx0ZWRfX2cPBB8u8GuRg VExuCyUP/maDFd/Aao4iYG6jzCTH/Wuw+e6DCi/5/0NVcTdztQ9BT22/krzNS66l05T8Yb00Rta G0a/ClfZtFz7fpLLw1d6ZTo67ZUAT5nM0PedG64spY8xf1RBTJ5LECgIMAv2SSI1Bqbrcd+k4Fu Dg6CKZ6MQ46rTHtP4wGQRCEdUAMS7AQzi00U/dKI23t7GFbgF5TjXQ4CbxGOCgRkDUS1c6TnZhM Kv61cYwxO8IQP4fbqOAmAYHNHpSWxa6XU14TKlCglPtn9OYXZacBl3p3vUyTRMTiDYJIalIl/fk qBlA1YoyKCfjgPsGBVWAiqsue07Wtq8V9j/82d0cNGtBVHzWPa5kzRLwfRcY78= X-Proofpoint-ORIG-GUID: a2GDwC70-261bgYEUws4W1iv2uJaPQuC X-JNJ: AAAAAAABElQRruP6sSBOe6BRCwrC8KAlsG4E1qbaXUGtB8AkFdydtMoMQ7LZmS7fUru2eVkoi3h0aWoSDzaTYC7vqsb8ZnJQqb+jGGPc5qfK4638MKMtSS0aDqNCsx15MbscabYvvbS0soXrspAaHjsUInK5hTnlvJEBABuPiAquRbnVNh4Xd4K26qmrqUUsuKYo5kS5r+nmf9OqMHmhWp4LaWmPuND9+PzsTwOfL/2iPjzDx8wQO0ED/5kmy8OFc6MqwtZhjDRziv7qqPhurXi1sESAAWqNoH3JMDeJJwYXjn0rW0tBTCFfpyqyTFoMoF2Ma2XBYFxm5GvYjEb2aHNdpBI/UoAerO+yhBZrLeLtN4dQuDe95mgYsfsPRSMBsz7JwE9BBKbyTj5f+8//riR2LxWF8O1d1Ry8x8k1JYMDDVJhi8Imu9fsDpvn325ptZDF7AGc7/06b4sBx3RsRDYa+J35SkFipywTLj3za/oCW8pf0UXCzmmbfR6AJaD6Wa4nW5Ugao4WYgMlYaR7vKT1i5V3AkJFnsfMRcr5CURVCMUnhAniuN/RNPQh+ZdoMNIa+b7c/SLjk1FgD9rfRReRdoy6K7z8IpHsc2HZckXpggPoFadiuKOOQ5jIVs8jeyao0wcQk5GC4YPBD/8HTrnoDn3A4exSiQZp7ULnjopVIVan7M11mmGC11Qwka6UNacSl5/+70sZfZM4nZTpcLspgeb4lazWRg8Fhw0eAqhJvx+s5WFj4fQ2pvEPJ9J1gGZyqjrnidZViXrlTsRjpg3ZUc8tlRJ7dz5e3dUFRmc+Bg== Content-Type: text/plain; charset="utf-8" The function sas_set_ex_phy() uses BUG_ON() if sas_phy_alloc() fails. Change it to return -ENOMEM error code if that happens. Change all the other returns in sas_set_ex_phy() to return 0 to preserve current functionality, or to return an error. Change all uses of sas_set_ex_phy to handle the returned error codes. Signed-off-by: Eshaan Deshmukh --- drivers/scsi/libsas/sas_expander.c | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_e= xpander.c index f1a1417b0..ab6afbad3 100644 --- a/drivers/scsi/libsas/sas_expander.c +++ b/drivers/scsi/libsas/sas_expander.c @@ -207,7 +207,7 @@ static enum sas_device_type to_dev_type(struct discover= _resp *dr) return dr->attached_dev_type; } =20 -static void sas_set_ex_phy(struct domain_device *dev, int phy_id, +static int sas_set_ex_phy(struct domain_device *dev, int phy_id, struct smp_disc_resp *disc_resp) { enum sas_device_type dev_type; @@ -220,14 +220,15 @@ static void sas_set_ex_phy(struct domain_device *dev,= int phy_id, struct sas_rphy *rphy =3D dev->rphy; bool new_phy =3D !phy->phy; char *type; + int error; =20 if (new_phy) { if (WARN_ON_ONCE(test_bit(SAS_HA_ATA_EH_ACTIVE, &ha->state))) - return; + return -EBUSY; phy->phy =3D sas_phy_alloc(&rphy->dev, phy_id); =20 - /* FIXME: error_handling */ - BUG_ON(!phy->phy); + if (!phy->phy) + return -ENOMEM; } =20 switch (disc_resp->result) { @@ -296,11 +297,14 @@ static void sas_set_ex_phy(struct domain_device *dev,= int phy_id, phy->phy->enabled =3D (phy->linkrate !=3D SAS_PHY_DISABLED); =20 skip: - if (new_phy) - if (sas_phy_add(phy->phy)) { + if (new_phy) { + error =3D sas_phy_add(phy->phy); + if (error) { sas_phy_free(phy->phy); - return; + phy->phy =3D NULL; + return error; } + } =20 out: switch (phy->attached_dev_type) { @@ -339,7 +343,7 @@ static void sas_set_ex_phy(struct domain_device *dev, i= nt phy_id, SAS_ADDR(phy->attached_sas_addr) !=3D SAS_ADDR(sas_addr)) /* pass */; else - return; + return 0; =20 /* if the attached device type changed and ata_eh is active, * make sure we run revalidation when eh completes (see: @@ -353,6 +357,8 @@ static void sas_set_ex_phy(struct domain_device *dev, i= nt phy_id, SAS_ADDR(dev->sas_addr), phy->phy_id, sas_route_char(dev, phy), phy->linkrate, SAS_ADDR(phy->attached_sas_addr), type); + + return 0; } =20 /* check if we have an existing attached ata device on this expander phy */ @@ -397,8 +403,8 @@ static int sas_ex_phy_discover_helper(struct domain_dev= ice *dev, u8 *disc_req, pr_notice("Found loopback topology, just ignore it!\n"); return 0; } - sas_set_ex_phy(dev, single, disc_resp); - return 0; + + return sas_set_ex_phy(dev, single, disc_resp); } =20 int sas_ex_phy_discover(struct domain_device *dev, int single) @@ -2021,7 +2027,7 @@ static int sas_rediscover_dev(struct domain_device *d= ev, int phy_id, * the PHY info, like negotiated linkrate. */ if (res =3D=3D 0) - sas_set_ex_phy(dev, phy_id, disc_resp); + res =3D sas_set_ex_phy(dev, phy_id, disc_resp); goto out_free_resp; } else if (SAS_ADDR(sas_addr) =3D=3D SAS_ADDR(phy->attached_sas_addr) && dev_type_flutter(type, phy->attached_dev_type)) { --=20 2.55.0 From nobody Mon Sep 28 18:35:51 2026 Received: from outbound.st.icloud.com (st-2005k-snip4-11.eps.apple.com [57.103.79.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 587AA3C13EF for ; Wed, 19 Aug 2026 03:23:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.79.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787109838; cv=none; b=Rxlgp8kLTDkwtwLYROYOD3skseBtRXu/sC/GFCgyictJdRlDWJVtXej39APgNcF1CMd4omthS0HCFyQqH4sEkYsqt905U/WJU2XU9juK/QrrC2WA5fKfX5YmoFindYowUXW7ilNZ12P7EHgxYvgUGnpCW9iqrkpwPrHA9P+IoO0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787109838; c=relaxed/simple; bh=BHNyEvWPJ0Ey7j5CpoNSJamzGBuA10cplBY2o6z+Njo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JqZFMrcMZ7S8Ij7Z29x1OvNr7Oxzjrw5pifC72TWDoECaE0uMvAo1GZVjncA3R6dGytiWMZskSbdszxup/0E+zezkMSUKG7h3Wh7LOhkl+txxICK4GEnaQxIjCdpcAgNEqN8gsA6IGkbkrDBnpViE0QVXntGsWGmFJwjSvdS7mk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=icloud.com; spf=pass smtp.mailfrom=icloud.com; dkim=pass (2048-bit key) header.d=icloud.com header.i=@icloud.com header.b=fXv1nIxH; arc=none smtp.client-ip=57.103.79.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=icloud.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=icloud.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=icloud.com header.i=@icloud.com header.b="fXv1nIxH" Received: from outbound.st.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-1a-100-percent-4 (Postfix) with ESMTPS id 899B7180013F; Wed, 19 Aug 2026 03:23:53 +0000 (UTC) X-ICL-RepId: 01a0180b-fb10-788f-a299-be360f6a6a03 X-ICL-Out-Info: HUtFAUMEWwJACUgBTUQeDx5WFlZNRAJCTQhKC0MFWgNeC00HQwZdBlBcHA4IRANTEVdKA14GK1sTVRdGCRkIXR0ZHldQXgheH0wcHQ5YBhICWkUETV8OXh8EF0YZVQRHHl1WQBkZAlEcVg1XQ1QEX1BJDEFQbFoARxdIHV0ZWW9QXRwOBFQHXQVdVlACWktfGV1FD18HWQRAAUkKXQRZAUIIVgdUBFwGRhRMHghEA1MRV0oDXgYrWxNVF0YJGQhdHQdYRxRHDg8ZWhRcGFM= Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1787109836; x=1789701836; bh=0csZxPtpdL06F6YoeqB2WGBY3JiZ/fSYugpxG0y+uQI=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=fXv1nIxHw5ij2TzTgqEd8qMs9x2wszCI1nJhiJxM5f8O25SGWKjUtK3nh94r0Tl9WZh58dx/WdT9u+Bs9gRVjqptL31aznHL9LgMFgQtW5xIHp/DbmzxWJSePnuY593QgBzxKqM9a44UpDeWwDVR4pIDab9hl1AHUrWLVh5tQQuptASS4cuTBPtHZGyz2FKvoj5PSSKXnSmva7ntb77kqDEcM9DV0TSSQ4yo0jLPweXeBWbr7x/27BcaEAb/R4dOakbxJqvlAW65kCKSu0C0aukBqy0LUQCtZYvJda8ZUzeAWhpE8iCT8FoIfgshmxS6mm2GW9TWDORTnNAkafuwTQ== Received: from machine.resnet.purdue.edu (unknown [17.156.216.30]) by p00-icloudmta-asmtp-us-east-1a-100-percent-4 (Postfix) with ESMTPSA id AC9D7180013D; Wed, 19 Aug 2026 03:23:52 +0000 (UTC) From: Eshaan Deshmukh To: "Martin K . Petersen" , "James E . J . Bottomley" Cc: John Garry , Jason Yan , linux-scsi@vger.kernel.org, linux-kernel@vger.kernel.org, Eshaan Deshmukh Subject: [PATCH v4 3/3] scsi: libsas: Handle errors in sas_ex_discover_expander() Date: Tue, 18 Aug 2026 23:23:21 -0400 Message-ID: <20260819032321.493746-4-eshaan2031@icloud.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260819032321.493746-1-eshaan2031@icloud.com> References: <20260819032321.493746-1-eshaan2031@icloud.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Info-Out: v=2.4 cv=a/Y9NESF c=1 sm=1 tr=0 ts=6a8521ca cx=c_apl:c_pps:t_out a=oyWFxbOnq+dmhQrAPgaJYA==:117 a=oyWFxbOnq+dmhQrAPgaJYA==:17 a=Sv0fKeRqtYgA:10 a=x7bEGLp0ZPQA:10 a=ea8ixM18I5MA:10 a=VkNPw1HP01LnGYTKEx00:22 a=v3ZZPjhaAAAA:8 a=mmTTPH3KzcaUb-IWQLwA:9 X-Proofpoint-GUID: iUwd_iPlbRRR_0N9coyoRd6y5vln6nQq X-Proofpoint-ORIG-GUID: iUwd_iPlbRRR_0N9coyoRd6y5vln6nQq X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODE5MDAyMiBTYWx0ZWRfX5E6M14pgcQC6 fUUY3UqorPyc/XaOSyPrKoA5Ud6lVN8qJ0hSHGOK/ZaxQngnY2DUbkuyWsEr16rwWHwuI4xFYHW oOgptpbMAFyDipo4uWiEiC+4Lls5nA0HMFi3hFYwxfFNpZVx5EasIgKD+pQp31PSqKSRWmCArpg eSYKVyYbFsfAYfI59uBMZolJo1jb7Bdzg0rnIMWGoi/Xk/PI24DaBshuuXJAcJ5tTNIZQihb3ko MPIfdTgxIciAdanAC8PBaelbEwKq3XBOEgUo03MxCJp71ZCMXu1YXcPmAHtpIzF31e9bPu8MAiN 0k980z6/wljA4qKNMQDE8xT+HczlkafJWZZz+fZIe+5Gx3bY7NrED2gavouypE= X-JNJ: AAAAAAABRpP5xoWQzfLR+nGojbpFGytqCqPXpWE6UPyNV5YffQpFNZLjsl1Osvg9edSDRFekWYZ0tj3umh6LocdxQK60gj27iM2q2xylvuZPm8benJI7updPbSFLgITCV3jqjs+amON4bSLjrpR7m6yVnT6QNq2w6Zvm54a9Xw9NNyc4EcT3fikxSWWto7h8Zmen1ZAXe6dZOCGS4RcpTocIbKtoa8Vlx/yGfya3U8k3VQ/U2XHV3kK2CLXgMXiV1h3xOe9rH7J4kicYKuyvnY9TKoqEpgzR5vYprhEms806gdsMrXr+jU0vohQXnuCsDO+9Hf/2VRy/VpqNQnYxhTNR6/WXi4sQYAR2dn+zV5kq5NuKGDiGjByRt2FkBdys8PfFZTHAqWJfcm3uK3qbtygvDUzMuKQRCtz12LkfqSXQrQYtdy9FIsN0mj2ekW5GP/X9KcyMs0v/gElHeLX5DSXanDZTAzk3Z2EwyHi9SMCTa7IaYASAfbOUlEFQgmr8PPLY2fYf8Oci2lfyD2GLPtl0JGIw9tCOhrVREYZKFtTqmRfOo50yZC4MIe/crW8sXYJtiX0878ZdOxe2bV2p6c7DSnd7BQVHqaC9DFC23MkLLZ1ROiRWAb+6NbVD1X6hxhbXkjMLikNIbYFGSY8ggWH/gy5GRo3qXRNie+6LL0cnt0OzL0pltwj5qtOySbBonp/UO7qvl4/n+hjS08QhVkZfodEGHV9/e1rHDtlQX1XFvmE7NhFOaKEMBRJIf0WQ+0irDwcsLXTS9fofO38uN+ufMvad1bG4Pjs0D83djpUflvhUGA== Content-Type: text/plain; charset="utf-8" The function sas_ex_discover_expander() does not account for the potential failure of sas_port_alloc() for phy->port. It also calls BUG_ON in case sas_port_add fails for phy->port. Add a check for phy->port after sas_port_alloc() where if it is NULL, it cleans up the child allocated device and returns NULL. Add another check for sas_port_add() where if it returns an error code it frees phy->port, sets it to NULL, cleans up the child allocated device, and returns NULL. Signed-off-by: Eshaan Deshmukh --- Changes in v4: - Removed goto labels from v3 and moved the code back to their original spots drivers/scsi/libsas/sas_expander.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_e= xpander.c index ab6afbad3..429ea2bdc 100644 --- a/drivers/scsi/libsas/sas_expander.c +++ b/drivers/scsi/libsas/sas_expander.c @@ -911,7 +911,6 @@ static struct domain_device *sas_ex_discover_expander( struct sas_rphy *rphy; struct sas_expander_device *edev; struct asd_sas_port *port; - int res; =20 if (phy->routing_attr =3D=3D DIRECT_ROUTING) { pr_warn("ex %016llx:%02d:D <--> ex %016llx:0x%x is not allowed\n", @@ -925,9 +924,17 @@ static struct domain_device *sas_ex_discover_expander( return NULL; =20 phy->port =3D sas_port_alloc(&parent->rphy->dev, phy_id); - /* FIXME: better error handling */ - BUG_ON(sas_port_add(phy->port) !=3D 0); + if (!phy->port) { + sas_put_device(child); + return NULL; + } =20 + if (sas_port_add(phy->port)) { + sas_port_free(phy->port); + phy->port =3D NULL; + sas_put_device(child); + return NULL; + } =20 switch (phy->attached_dev_type) { case SAS_EDGE_EXPANDER_DEVICE: @@ -966,8 +973,7 @@ static struct domain_device *sas_ex_discover_expander( list_add_tail(&child->dev_list_node, &parent->port->dev_list); spin_unlock_irq(&parent->port->dev_list_lock); =20 - res =3D sas_discover_expander(child); - if (res) { + if (sas_discover_expander(child)) { sas_rphy_delete(rphy); spin_lock_irq(&parent->port->dev_list_lock); list_del(&child->dev_list_node); @@ -977,6 +983,7 @@ static struct domain_device *sas_ex_discover_expander( phy->port =3D NULL; return NULL; } + list_add_tail(&child->siblings, &parent->ex_dev.children); return child; } --=20 2.55.0