[Bluetooth] Fix regression from using default link policy
authorMarcel Holtmann <marcel@holtmann.org>
Fri, 12 Sep 2008 01:11:54 +0000 (03:11 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Fri, 12 Sep 2008 01:11:54 +0000 (03:11 +0200)
commit7c6a329e444725f24c02192ac493d8a7cd9fa638
tree73a48d087108537a174290f3a8a01814313fbf63
parent69da6b87fcb270f758fe75141c32e041f8db510c
[Bluetooth] Fix regression from using default link policy

To speed up the Simple Pairing connection setup, the support for the
default link policy has been enabled. This is in contrast to settings
the link policy on every connection setup. Using the default link policy
is the preferred way since there is no need to dynamically change it for
every connection.

For backward compatibility reason and to support old userspace the
HCISETLINKPOL ioctl has been switched over to using hci_request() to
issue the HCI command for setting the default link policy instead of
just storing it in the HCI device structure.

However the hci_request() can only be issued when the device is
brought up. If used on a device that is registered, but still down
it will timeout and fail. This is problematic since the command is
put on the TX queue and the Bluetooth core tries to submit it to
hardware that is not ready yet. The timeout for these requests is
10 seconds and this causes a significant regression when setting up
a new device.

The userspace can perfectly handle a failure of the HCISETLINKPOL
ioctl and will re-submit it later, but the 10 seconds delay causes
a problem. So in case hci_request() is called on a device that is
still down, just fail it with ENETDOWN to indicate what happens.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
net/bluetooth/hci_core.c