Commit 61321272 authored by Marcel Holtmann's avatar Marcel Holtmann Committed by Maksim Krasnyanskiy

[Bluetooth] Support for inquiry with unlimited responses

This patch handles the special case if the number of responses
is set to zero, which means unlimited responses.
parent cca3ec54
...@@ -394,7 +394,7 @@ int hci_inquiry(unsigned long arg) ...@@ -394,7 +394,7 @@ int hci_inquiry(unsigned long arg)
{ {
struct hci_inquiry_req ir; struct hci_inquiry_req ir;
struct hci_dev *hdev; struct hci_dev *hdev;
int err = 0, do_inquiry = 0; int err = 0, do_inquiry = 0, max_rsp;
long timeo; long timeo;
__u8 *buf, *ptr; __u8 *buf, *ptr;
...@@ -417,16 +417,19 @@ int hci_inquiry(unsigned long arg) ...@@ -417,16 +417,19 @@ int hci_inquiry(unsigned long arg)
if (do_inquiry && (err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo)) < 0) if (do_inquiry && (err = hci_request(hdev, hci_inq_req, (unsigned long)&ir, timeo)) < 0)
goto done; goto done;
/* for unlimited number of responses we will use buffer with 255 entries */
max_rsp = (ir.num_rsp == 0) ? 255 : ir.num_rsp;
/* cache_dump can't sleep. Therefore we allocate temp buffer and then /* cache_dump can't sleep. Therefore we allocate temp buffer and then
* copy it to the user space. * copy it to the user space.
*/ */
if (!(buf = kmalloc(sizeof(struct inquiry_info) * ir.num_rsp, GFP_KERNEL))) { if (!(buf = kmalloc(sizeof(struct inquiry_info) * max_rsp, GFP_KERNEL))) {
err = -ENOMEM; err = -ENOMEM;
goto done; goto done;
} }
hci_dev_lock_bh(hdev); hci_dev_lock_bh(hdev);
ir.num_rsp = inquiry_cache_dump(hdev, ir.num_rsp, buf); ir.num_rsp = inquiry_cache_dump(hdev, max_rsp, buf);
hci_dev_unlock_bh(hdev); hci_dev_unlock_bh(hdev);
BT_DBG("num_rsp %d", ir.num_rsp); BT_DBG("num_rsp %d", ir.num_rsp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment