Thread (2 messages) flat view 2 messages, 2 authors, 2021-08-19

Re: [PATCH v3] Bluetooth: Fix return value in hci_dev_do_close()

From: Marcel Holtmann <marcel@holtmann.org>
Date: 2021-08-19 15:07:41
Also in: linux-bluetooth, lkml

Hi Kangmin,
quoted hunk ↗ jump to hunk
hci_error_reset() return without calling hci_dev_do_open() when
hci_dev_do_close() return error value which is not 0.

Also, hci_dev_close() return hci_dev_do_close() function's return
value.

But, hci_dev_do_close() return always 0 even if hdev->shutdown
return error value. So, fix hci_dev_do_close() to save and return
the return value of the hdev->shutdown when it is called.

Signed-off-by: Kangmin Park <redacted>
---
net/bluetooth/hci_core.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c
index 8622da2d9395..84afc0d693a8 100644
--- a/net/bluetooth/hci_core.c
+++ b/net/bluetooth/hci_core.c
@@ -1718,6 +1718,7 @@ static void hci_pend_le_actions_clear(struct hci_dev *hdev)
int hci_dev_do_close(struct hci_dev *hdev)
{
	bool auto_off;
+	int ret = 0;

	BT_DBG("%s %p", hdev->name, hdev);
@@ -1732,13 +1733,13 @@ int hci_dev_do_close(struct hci_dev *hdev)
	    test_bit(HCI_UP, &hdev->flags)) {
		/* Execute vendor specific shutdown routine */
		if (hdev->shutdown)
-			hdev->shutdown(hdev);
+			ret = hdev->shutdown(hdev);
	}

	if (!test_and_clear_bit(HCI_UP, &hdev->flags)) {
		cancel_delayed_work_sync(&hdev->cmd_timer);
		hci_req_sync_unlock(hdev);
-		return 0;
+		return ret;
	}

	hci_leds_update_powered(hdev, false);
@@ -1845,7 +1846,7 @@ int hci_dev_do_close(struct hci_dev *hdev)
	hci_req_sync_unlock(hdev);

	hci_dev_put(hdev);
-	return 0;
+	return ret;
}
actually use variable name err instead of ret since that is more consistent in this code.

Regards

Marcel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help