From nobody Tue Sep 29 04:12:36 2026 Received: from outbound.qs.icloud.com (qs-2003c-snip4-5.eps.apple.com [57.103.86.28]) (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 7C217316199 for ; Wed, 12 Aug 2026 19:48:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.86.28 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786564111; cv=none; b=CQU2UY2zIXtSP5gtCB4DC797/R/jhg50UNghZ2KD14BVrXzayxHCit4w0hkL20IFLL/yX5CTzuoNes88qptaWbpqiVdWefTqcpoEw0Q/B3qSKyR/lz5F+nP1P/DRKuzA9COujlTf9AlbW1bTb8wRggkd/4Vwtlnyzht+unYcNq0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786564111; c=relaxed/simple; bh=0fPc6CARPcuAaajWRtt23gGGfR1jiXTnCmvuXPbfhcM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qa6FCGhdOzlvVHBJg+HYl7QJlRaDf5CFesc8ipXmubTQIcEqfRFv+dCkhoOvFPMb7yU+UlVUKzsRWVAYLnAL/bEZj8IQJpZq3pFjRZUk4m/sbOOVHHNCu+79FKRgqNydmox2fXQa1bjkMCp+UZcifdyM2inkE0ozyREwyfs8uxY= 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=IpqBEEGi; arc=none smtp.client-ip=57.103.86.28 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="IpqBEEGi" Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-5 (Postfix) with ESMTPS id B863C1800322; Wed, 12 Aug 2026 19:48:27 +0000 (UTC) X-ICL-RepId: 019ff784-dd93-7b19-866a-e06e2f141893 X-ICL-Out-Info: HUtFAUMEWwJACUgBTUQeDx5WFlZNRAJCTQ1PHVwPUxxGClYCVAFLVxQEHUAFVgpcQglLAi1eCF4fTBwdDlgGEhZdRVoOWwRHFBcbXAAXGVFNDlhbCFsEDx9MDFECQgVWXkgLHQRUB10FXVZQAlpLQgRLRWhcBVwcQBdIHV9qS1YUBBFQAVgeVl5aF15NWgJWTQVKA18BWwpBC0kKWQ9bCl4MTwVYD10fQhQdQAVWClxCCUsCLV4IXh9MHB0OWAYMUE0BQwgKAlEcVg1X Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1786564109; x=1789156109; bh=SKbj1OiC/mTsqe+ug23DPAsn1yxr1ddVH2kyAr8TTnY=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=IpqBEEGiDS/DmH6EugjuiNiRGu+dvWXMTdlSodGLCrH98j7N44PbblqWgArXVvDvszbYxubaxFAYISDMFcgrD9npYviFcfCIVlwAa+6RovYsw/nSe6o4red2tKNVMgHBf43Iz7JbGe0DYjsvwbfjgoC8HJFAz6eyQnWdfMvHVAgYHc43/iKR+lhLv6fq4RBav8SLERWYE+4DrLd1BAo2CuiM6RNFYeJ4bJUuKDTBdIeevwEcrhzmR74PeturTh+1c+uRAqYtLN0cTIhBGAOe1ZIyy/Q4VAj7526dIhWK1W/mRszItAGdgpvsADtEMrBSMC3/txYzeTIvpq15seg/JQ== Received: from machine (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-5 (Postfix) with ESMTPSA id A84F01800174; Wed, 12 Aug 2026 19:48:26 +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 v3 1/3] scsi: libsas: Handle errors in sas_ex_add_parent_port() Date: Wed, 12 Aug 2026 14:48:06 -0500 Message-ID: <20260812194808.576586-2-eshaan2031@icloud.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812194808.576586-1-eshaan2031@icloud.com> References: <20260812194808.576586-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: AoEA-HEhYXUbMdftH-8QKUBfMrv4DvWo X-Proofpoint-ORIG-GUID: AoEA-HEhYXUbMdftH-8QKUBfMrv4DvWo X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDE1OSBTYWx0ZWRfX9SwKqogHlkKy PW8BazC8DgSkOLToIoZOT15f+y1xIZL952zMRazqMvBVZIalzfilkJ2tz93AVYoRY+qzV7AM3G3 4zpM7a/BfxbejVt33jiF2PC8KtRjw856BhuEAuwlOapZWPHueEwaZCeOBZLug1p4HssEclZYkRN 6E+tAQTPfciIGlWgsIkIR/MtigcgeohWBKke3areKsCrD1rNlnvioNAOB5Imf0GD17boyhh8ihQ OysWgJHKE0wBLqZYrtJbRCYM8YLoqYPch1Wo8Qba8cPwY8DOsRkSJkFO4/K6+Mdj/4N3eFRDsSr 3zgQGwZs+Z2cjj/F6qQH9LYoJsls9veS4jegX4/b/ApyJeQ/n4BvvHjhYKmbgw= X-Authority-Info-Out: v=2.4 cv=DqBbOW/+ c=1 sm=1 tr=0 ts=6a7cce0c cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Sv0fKeRqtYgA:10 a=x7bEGLp0ZPQA:10 a=ea8ixM18I5MA:10 a=VkNPw1HP01LnGYTKEx00:22 a=v3ZZPjhaAAAA:8 a=i0Imq2-WVZI-w4_-C1cA:9 X-JNJ: AAAAAAABlDIIYURcikXnCHpb8V1hZ4Q0f3WhAnutbLi/fCp8T16cLiJ1vZlw4QHVIhH54azwSS0JHH9Y0R4PRDGDHAN0wLm5o+0t6zcKvnwiwppud42fIoK0bGZggLkjAUsJSCIEW9KaVciP3WoD3IFFtxvYIdmFIp4S3XC/RjuJXsZyxaPfgEul/Y5LgbjlquGX9sAGx7eJb9+DdzYX7JWOalV51S7Bd8YvwuoQHb3wlqyLr6DahsNuTToZATnTqPIDB4QGysz4z7svbRwWATOTpBhe4RSVJWfL35WuxfQgOL0YjcJqVdJCofCNwExoCsNmLPiIlwj39F8Ql5AyeCNNjgHOtzYnfNEHqQwsbOBudWdUM8i+JLLGBYlQRclP00UMrScEg1TmqgwdoybATgHzrdRo/vmNZ5RHcx0ed9bnSHVXG/t7Egh9iLvpftvNeG4DzZtjsUT0jkNzimNzsi+vgQ5t+86JdIzEXYf4q7DgXaTd7Q/LWdhFKfRPVvyYcwfOJs0mqghdq+Nltj5TPt0FzuEq/B7lct+u3X+YTNTGZ2Rvj6CJeA1mNqgqhbBbQ5gGiiWkRAC6Ft31xTtVJ0kDUogS53OQRzSb/OabFTH4TYae+sAjbL9CNWYmpEcgTDcrMOzsgvZ+gYJBZv2kOUyqlm2EguKitqOlyQaNkHa1ZNF/z624UPQKdZ5hMvmu+wMpFY9+yOVAMufBOenoaGLo+gkg5dAA2yf2pRM0Xq1sVFE4WdorBf9w5klYMX4X17QvD1F1u/396mVJQY3gyTnIIpp5ud9QZ/gUTPW9 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 Tue Sep 29 04:12:36 2026 Received: from outbound.qs.icloud.com (qs-2005k-snip4-4.eps.apple.com [57.103.86.235]) (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 50396386C1E for ; Wed, 12 Aug 2026 19:48:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.86.235 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786564117; cv=none; b=eO6KwNparpf4HPHGGnuMX1V+PDUAEFgR0NIbIikU22NGCslF2+0CtDSYr/JrSh0BoUEWsMurb4S42Yj2/rDcumXLEPfNJ1mg2QSkCoEZojLdUnL4JjUVO3+W8cPwkHacyClWFmRsr3fvORQ9uSkaOcEU3qQ94OgBbBt5ZamsaDQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786564117; c=relaxed/simple; bh=K6lNrpxYxUNj7xS9Sj1i3MPuM0Xjp/K+B2ztxKfSAp4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=s9jGd/czFyNk7yQXxZK2sckuzq6GwCzVHWkeaqt3X1w+bCd+WsICfzW83IxabhCmFAlc++B76o0MIj8yNg7kDQbI5B4rU+fYzrGBHDcSD/0bKJ95ST6j4bF90Qd8myy4ZtFwPGWYASUhfgEYsmNv89rewLecE50wGboW1IZXk9g= 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=LkikD7LN; arc=none smtp.client-ip=57.103.86.235 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="LkikD7LN" Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-5 (Postfix) with ESMTPS id B12851800161; Wed, 12 Aug 2026 19:48:30 +0000 (UTC) X-ICL-RepId: 019ff784-e906-724d-85f9-9cb21c620025 X-ICL-Out-Info: HUtFAUMEWwJACUgBTUQeDx5WFlZNRAJCTQ1PHVwPUxxGClYCVAFLVxQEHUAFVgpcQglLAi1eCF4fTBwdDlgGEhZdRVoOWwRHFBcbXAAXGVFNDlhbCFsEDx9MDFECQgVWXkgLHQRUB10FXVZQAlpLQgRLRWhcBVwcQBdIHV9qS1YUBBFQAVgeVl5aF15NWgJWTQVKA18BWwpBC0kKWQ9bCl4MTwVYD10fQxQdQAVWClxCCUsCLV4IXh9MHB0OWAYMUE0BQwgKAlEcVg1X Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1786564114; x=1789156114; bh=CfSIEMIU8fz5D/RW2vvdqxds2IivGvHuZLoHdlr3P20=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=LkikD7LNFbwKmX63q5B/7MxcsyZXZb01t38DDfO7hiAWaTQuMdsglY9WxSDdsZ7TXCfxHOCGLlHXomKYgmqQIRZCgW28/gEcFdvAL5JcH2Zh+0tP4IhUkp0WbfBxHqJZBPpDY/aeKKmNKjyEzjICjug8IH/8MKnVi6SIkq1KqJa5cLNX5kFbfD9l8vK7SMtsYWn9EceVDGWuIcFevhMoDHGQtt7I02gd6X0VsF53QCyKDFGExTH0lyfgLyjSV1kDBOvk4rNGWqz6q7PIpAIREyZHKWvrNUBAxfHqG1/+e5FfpjwegzJx6ZYnKcoRzNcPC5ZBvLIhnw2NccFae7wa8Q== Received: from machine (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-5 (Postfix) with ESMTPSA id 429EF180030D; Wed, 12 Aug 2026 19:48:29 +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 v3 2/3] scsi: libsas: Handle errors in sas_set_ex_phy() Date: Wed, 12 Aug 2026 14:48:07 -0500 Message-ID: <20260812194808.576586-3-eshaan2031@icloud.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812194808.576586-1-eshaan2031@icloud.com> References: <20260812194808.576586-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=UchciaSN c=1 sm=1 tr=0 ts=6a7cce10 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Sv0fKeRqtYgA:10 a=x7bEGLp0ZPQA:10 a=ea8ixM18I5MA:10 a=VkNPw1HP01LnGYTKEx00:22 a=v3ZZPjhaAAAA:8 a=PaGFxrA-4Pw6slCmviwA:9 X-Proofpoint-GUID: iv_fbHm6iEXMP9r0FPN5I__5ISfdHJkC X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDE1OSBTYWx0ZWRfX10KnWZJJK9Kt ZoOfe9sma4RHGOM2qoLMoRsDcJWUEqCWtpgoOUx2hkb3fuSl7p4jthzqaHl0jTeMdRyhooNCkc2 jUE5HI4xnr3HxqG4z/OUzHPWkVPUymEFxbAC9Qp7RWL31r0Mf3lBUnD3TH0pkNbIrgNXHaTTdyg FLuEjiy7g5lc0fwbRFRiTYk0b9c14PhdrlpgnKyahG92WuvbAvrZzmdVueh5dNLgxLoDyGbe1Jf SAmQwOhScCmlSN5ddR04Mvekzr6/SGvZkWVweWZbRUIPmtSz+CglAZYO6jKFKWEGd6Yhnhb3wgP A+ph8YjVydp4p9+i/wQ+Is4A0Zzcw1rtswxSXNO79Xj3kY6a4Z+RuMa+wFhjqk= X-Proofpoint-ORIG-GUID: iv_fbHm6iEXMP9r0FPN5I__5ISfdHJkC X-JNJ: AAAAAAAB+uhKp+6Z6LcU0ZmNdQjHFBqQ/v2fFDG4bJFdzTLso0aR4L+9em5Ou0midrn1AmqlXsZKyae72nZO2JQRVQ7W+YsUYz2a00oO1YknwUtqfuFBYYNHzx8KHac3yi41P32WnIB5ccppu/doIEY4F/gCBAalzwnMAapJORAyW69p3JW08eBnl+7wc+M4zkD+EEUj7z9kwhTwvlUMGZumFZYsadRVNebnAxO65g2QkQc6WIO81L8RUNOL9JF2HBZO4FaFpsgLHAgrakIPs6CueIZ7oAZ21JVaQhYlSxv5qlJ8O2UKC/vATpeb7Lq67dqjiRX75DFx6rvPE0BhVVp91OfCnXdCSz1dW/BgcvwDuGcLMcgp3BtZD8cgPYks2ghkm3uoYz1sGF/x3pDvlwDo8EeKMWC2JsMCUCDkfEKhoW95/h0TJ3VSMADDviTUBRzyLWxazx9Wo3mNouKwXazJZa/0b1RtE40CYX2PmgAhMoOdNB41OT+Kav7CZbjIvgf4QMsoIoR2mJdFxRWDO2O1N5zuCmEwgrJXnTl7+nrcGLQB1XpLhcJUCHP4YdJTDqsoavMTGu33r6QXMGvoQFvPDT6+75/BP9hRyA0ty3QlTaEJefhClTBe7CC+7+Nr4Thg7tfV2tXdSdzT/b3vFDmFNghQbC6fwlG/LqjT/GzYvoH7I9iVTUhHOySgcnkjQagHDEycTc3oMHPG276TgidEG2fUp3PnvJhM87YNejyDQ2oIbfKtRRAjlO2tmisTqE8QYTTfo3nGytEfSQ0E2alRCuNcYxuxvVgXtBYTwV1M5ijV+TmgPcOKrDc= 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 Tue Sep 29 04:12:36 2026 Received: from outbound.qs.icloud.com (qs-2005g-snip4-11.eps.apple.com [57.103.86.201]) (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 9F518386C3F for ; Wed, 12 Aug 2026 19:48:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=57.103.86.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786564119; cv=none; b=tVfLUc5vJU277HuRTQrT0nScVo6HjZyIDDuEthdJ0+LTLewmw5PyFVWcJ92VnFG7dhVtkbkWPclgUV4eeqhKbIKEeXp4c1OoAgpFYnJdkLzcElU4dmr/JQl0LYvoiHuT3U33uTXtEf8Jw/Jt4nzdJtawuhgftTZrMTu+4cXKmio= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786564119; c=relaxed/simple; bh=ETyFHH7OpVgW6lnVqEcsasCu57Wakr7XlduoePEHrBc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sdhFnqwXq5OmOFTbBhvzLExYAHLLULGgnDEDjT/acZ9kEBMw83Bw2yef70EvPlVVqzwv9vh7Tfh/IKICvACzfI+kFGWDXEwAc3VV4DxtZknXSgH47AH87r/BVdn/3x3zwMC34jYOxPzMo606yzHZ2F9dt7/mFrCzejW20rk+rvM= 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=CUVevMBU; arc=none smtp.client-ip=57.103.86.201 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="CUVevMBU" Received: from outbound.qs.icloud.com (unknown [127.0.0.2]) by p00-icloudmta-asmtp-us-east-2d-60-percent-5 (Postfix) with ESMTPS id B81331800353; Wed, 12 Aug 2026 19:48:32 +0000 (UTC) X-ICL-RepId: 019ff784-f0fa-7cd5-942b-6ed91b5d5b55 X-ICL-Out-Info: HUtFAUMEWwJACUgBTUQeDx5WFlZNRAJCTQ1PHVwPUxxGClYCVAFLVxQEHUAFVgpcQglLAi1eCF4fTBwdDlgGEhZdRVoOWwRHFBcbXAAXGVFNDlhbCFsEDx9MDFECQgVWXkgLHQRUB10FXVZQAlpLQgRLRWhcBVwcQBdIHV9qS1YUBBFQAVgeVl5aF15NWgJWTQVKA18BWwpBC0kKWQ9bCl4MTwVYD10fRBQdQAVWClxCCUsCLV4IXh9MHB0OWAYMUE0BQwgKAlEcVg1X Dkim-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; t=1786564116; x=1789156116; bh=IQW6+im5CnKExSoqzkvoJaJk0rPKHX1zb5TsV2IFxUk=; h=From:To:Subject:Date:Message-ID:MIME-Version:x-icloud-hme; b=CUVevMBUPUNHnhBBSN8FpyCF4AfsWcj3q+P5eTHmSjTKAfuv47IL7hwuADBFNk29ifz/fm/z1bAn85zExHkt/O+NgbRSNPWs0ACYz3cG9eKblNCxPO4JigGYWbrVyAxUBStKbc5viHNhKtcN/JSfWCWyyEHeR72DR8rkdVL/I36uWFKXnvLu+SU683mOqCWplrTuzxM82GlZnmggXGboOmWl9aHYPoQTPjmyL/qREvI7aPKh7WwpNuMROxIFCtA8w/0PRnDHu2FQzZZsGC4hbMT5VZHdmNnWAKB+EfWOHCW6B2mD07k++KqtOu1OsdiZXV3i2WBMubgWn0b0itg8ww== Received: from machine (unknown [17.57.155.37]) by p00-icloudmta-asmtp-us-east-2d-60-percent-5 (Postfix) with ESMTPSA id 5FD3818000B6; Wed, 12 Aug 2026 19:48:31 +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 v3 3/3] scsi: libsas: Handle errors in sas_ex_discover_expander() Date: Wed, 12 Aug 2026 14:48:08 -0500 Message-ID: <20260812194808.576586-4-eshaan2031@icloud.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260812194808.576586-1-eshaan2031@icloud.com> References: <20260812194808.576586-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=ebIwvrEH c=1 sm=1 tr=0 ts=6a7cce12 cx=c_apl:c_pps:t_out a=bsP7O+dXZ5uKcj+dsLqiMw==:117 a=bsP7O+dXZ5uKcj+dsLqiMw==:17 a=Sv0fKeRqtYgA:10 a=x7bEGLp0ZPQA:10 a=ea8ixM18I5MA:10 a=VkNPw1HP01LnGYTKEx00:22 a=v3ZZPjhaAAAA:8 a=mmTTPH3KzcaUb-IWQLwA:9 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwODEyMDE1OSBTYWx0ZWRfX+H8n8AnHu6Cw T/lvVty700ng1wJSEG/8Cnfa/d0aMXPyxnMZe6r7oeYJ9H+7gemqsnOnc8zW/wlDFEFQo+V13Ws t74x1mhQZgpXE4K2XHsg2sWSSPnfD+ClHmO3Ox4an1VBNECGadX/Te94RZXQcLljiyF7rukgvcG 0GGyV+nZjYvCQTciMSSWPstU3CiRvhXF0EgpWpFMjoD5XbDVamBhUy/B6A7APqV1MvUesWCy3yZ ykLOv7uKz3jfMhiiR31+CZPWSnn3UNleMKLMMS2rKaLgInCxy2vEeFuhmkm6BpXXClAU3D+NdEq LgB9mlF1swKEXP1N5FShkwueW5mJ8R3zMjfOZo+8sFufAJxodpZQZ9hJgo+4OE= X-Proofpoint-ORIG-GUID: f8rNFQb2RAzFGanhvbFzxHHC_uSG202o X-Proofpoint-GUID: f8rNFQb2RAzFGanhvbFzxHHC_uSG202o X-JNJ: AAAAAAABelLZTgkMCsXyF4xgFPlWamHdVsOKZ5uVCvwaESLyC3p+AmudQ7TPkJ/duQZUr6lOXvmWfoFQcaNLXY6JbDT//AlKWXfcxla3uUmilE9ownQctT1zN2ltNZBxk1ZVmU+yWxmy55rxypx2Nvg1+r1q4nnW64cSbOg0jPd7hGvecx2VvtWh6JES+3W0+YgldkTUTd0QChU8MYAGmenpsXUZYV9AH5tPsIA9i1xZlhwkN4Xba5Leo3LKen3StWDTKAMxp92HUAoGtMYq2DdZQmFWXwcQQEMYdxyWJcm7DF3W3ffx2uWIkyihwihPpY0EQ3taikDfvvj16bE8sFCF3r+4HProKckHCINu5h0beNVP07xJkjrnQUpEdaiqkZpLZpnUSy0KDQO0+vKn4OmfkJbCvjTEdDa6X9NEIbsDKGkJ+yvPZ4sNhdPFcYhBoZKWQF6jpVs1llbbbxmVnzLSNsY+2Ch7TIgSbI66Zx/Ygdw3NpVJQOs5qLRwlB18o6KxKqfYc9La+AF69flxgrgDhsvzLISc9ZssM6yC0q80nUMHw1MNsLujfMjtEBxOnMb2v2w9YtKdeamzDNKGWuYoB1hpWI6kQkTy9tV9gbMZLPzkO/9gC8fpVfjI/yQQEgjWSi0708UV3iHVmRLbpwv8TzdSNrd4NyfSvm0VlsPn6JJ21kL1ZY0WyVqrm8QHHqzNhtmRRVJE/GejmNsWtFrOBp1TRCn8COJduqvGmouuWNFyWYXdMn67jnYPYtxogybN+vjaK6vIcn5trzA3jeQ5rfh5nZn9R3XufZENOktCGnxUk8C3 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 --- drivers/scsi/libsas/sas_expander.c | 41 ++++++++++++++++++++---------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/drivers/scsi/libsas/sas_expander.c b/drivers/scsi/libsas/sas_e= xpander.c index ab6afbad3..a83493f57 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,13 @@ 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) { + goto out_put_device; + } =20 + if (sas_port_add(phy->port)) { + goto out_free_port; + } =20 switch (phy->attached_dev_type) { case SAS_EDGE_EXPANDER_DEVICE: @@ -966,19 +969,29 @@ 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) { - sas_rphy_delete(rphy); - spin_lock_irq(&parent->port->dev_list_lock); - list_del(&child->dev_list_node); - spin_unlock_irq(&parent->port->dev_list_lock); - sas_put_device(child); - sas_port_delete(phy->port); - phy->port =3D NULL; - return NULL; - } + if (sas_discover_expander(child)) + goto out_delete_rphy; + list_add_tail(&child->siblings, &parent->ex_dev.children); return child; + +out_free_port: + sas_port_free(phy->port); + phy->port =3D NULL; + +out_put_device: + sas_put_device(child); + return NULL; + +out_delete_rphy: + sas_rphy_delete(rphy); + spin_lock_irq(&parent->port->dev_list_lock); + list_del(&child->dev_list_node); + spin_unlock_irq(&parent->port->dev_list_lock); + sas_put_device(child); + sas_port_delete(phy->port); + phy->port =3D NULL; + return NULL; } =20 static int sas_ex_discover_dev(struct domain_device *dev, int phy_id) --=20 2.55.0