linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Johan Hedberg <johan.hedberg@gmail.com>
To: linux-bluetooth@vger.kernel.org
Subject: [PATCH 5/8] Bluetooth: Fix returning proper command status for start_discovery
Date: Wed,  9 Jan 2013 15:29:37 +0200	[thread overview]
Message-ID: <1357738180-4128-6-git-send-email-johan.hedberg@gmail.com> (raw)
In-Reply-To: <1357738180-4128-1-git-send-email-johan.hedberg@gmail.com>

From: Johan Hedberg <johan.hedberg@intel.com>

Management commands should whenever possible fail with proper command
status or command complete events. This patch fixes the
mgmt_start_discovery command to do this for the failure cases where an
incorrect parameter value was passed to it ("not supported" if the
parameter value was valid but the controller doesn't support it and
"invalid params" if it isn't valid at all).

Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
---
 net/bluetooth/mgmt.c |   35 +++++++++++++++++++++++++----------
 1 file changed, 25 insertions(+), 10 deletions(-)

diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
index 6e6de9e..4f60540 100644
--- a/net/bluetooth/mgmt.c
+++ b/net/bluetooth/mgmt.c
@@ -2377,31 +2377,46 @@ static int start_discovery(struct sock *sk, struct hci_dev *hdev,
 
 	switch (hdev->discovery.type) {
 	case DISCOV_TYPE_BREDR:
-		if (lmp_bredr_capable(hdev))
+		if (lmp_bredr_capable(hdev)) {
 			err = hci_do_inquiry(hdev, INQUIRY_LEN_BREDR);
-		else
-			err = -ENOTSUPP;
+		} else {
+			err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
+					 MGMT_STATUS_NOT_SUPPORTED);
+			mgmt_pending_remove(cmd);
+			goto failed;
+		}
 		break;
 
 	case DISCOV_TYPE_LE:
-		if (lmp_host_le_capable(hdev))
+		if (lmp_host_le_capable(hdev)) {
 			err = hci_le_scan(hdev, LE_SCAN_TYPE, LE_SCAN_INT,
 					  LE_SCAN_WIN, LE_SCAN_TIMEOUT_LE_ONLY);
-		else
-			err = -ENOTSUPP;
+		} else {
+			err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
+					 MGMT_STATUS_NOT_SUPPORTED);
+			mgmt_pending_remove(cmd);
+			goto failed;
+		}
 		break;
 
 	case DISCOV_TYPE_INTERLEAVED:
-		if (lmp_host_le_capable(hdev) && lmp_bredr_capable(hdev))
+		if (lmp_host_le_capable(hdev) && lmp_bredr_capable(hdev)) {
 			err = hci_le_scan(hdev, LE_SCAN_TYPE, LE_SCAN_INT,
 					  LE_SCAN_WIN,
 					  LE_SCAN_TIMEOUT_BREDR_LE);
-		else
-			err = -ENOTSUPP;
+		} else {
+			err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
+					 MGMT_STATUS_NOT_SUPPORTED);
+			mgmt_pending_remove(cmd);
+			goto failed;
+		}
 		break;
 
 	default:
-		err = -EINVAL;
+		err = cmd_status(sk, hdev->id, MGMT_OP_START_DISCOVERY,
+				 MGMT_STATUS_INVALID_PARAMS);
+		mgmt_pending_remove(cmd);
+		goto failed;
 	}
 
 	if (err < 0)
-- 
1.7.10.4


  parent reply	other threads:[~2013-01-09 13:29 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-01-09 13:29 [PATCH 0/8] Bluetooth: Various mgmt fixes Johan Hedberg
2013-01-09 13:29 ` [PATCH 1/8] Bluetooth: Fix missing command complete event for mgmt_confirm_name Johan Hedberg
2013-01-09 20:02   ` Marcel Holtmann
2013-01-09 13:29 ` [PATCH 2/8] Bluetooth: Fix missing command complete for mgmt_load_long_term_keys Johan Hedberg
2013-01-09 20:04   ` Marcel Holtmann
2013-01-09 13:29 ` [PATCH 3/8] Bluetooth: Fix checking for valid device class values Johan Hedberg
2013-01-09 20:07   ` Marcel Holtmann
2013-01-09 13:29 ` [PATCH 4/8] Bluetooth: Fix accepting set_dev_class for non-BR/EDR controllers Johan Hedberg
2013-01-09 20:08   ` Marcel Holtmann
2013-01-09 13:29 ` Johan Hedberg [this message]
2013-01-09 20:10   ` [PATCH 5/8] Bluetooth: Fix returning proper command status for start_discovery Marcel Holtmann
2013-01-10 12:54   ` [PATCH 5/8 v2] " Johan Hedberg
2013-01-10 16:24     ` Marcel Holtmann
2013-01-10 18:30     ` Gustavo Padovan
2013-01-09 13:29 ` [PATCH 6/8] Bluetooth: Move non-critical sections outside of the dev lock Johan Hedberg
2013-01-09 20:12   ` Marcel Holtmann
2013-01-09 13:29 ` [PATCH 7/8] Bluetooth: Fix checking for exact values of boolean mgmt parameters Johan Hedberg
2013-01-09 13:45   ` Anderson Lizardo
2013-01-09 13:48     ` Johan Hedberg
2013-01-09 13:53       ` Anderson Lizardo
2013-01-09 14:05   ` [PATCH 7/8 v2] " Johan Hedberg
2013-01-09 20:13     ` Marcel Holtmann
2013-01-10  8:24     ` Gustavo Padovan
2013-01-09 13:29 ` [PATCH 8/8] Bluetooth: Fix sending incorrect new_settings for mgmt_set_powered Johan Hedberg
2013-01-10  8:41   ` Marcel Holtmann
2013-01-10 18:31   ` Gustavo Padovan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1357738180-4128-6-git-send-email-johan.hedberg@gmail.com \
    --to=johan.hedberg@gmail.com \
    --cc=linux-bluetooth@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).