Hi Johan, > When hci_sock.c calls hci_dev_open it needs to ensure that there isn't > pending work in progress, such as that which is scheduled for the > initial setup procedure or the one for automatically powering off after > the setup procedure. This adds the necessary calls to ensure that any > previously scheduled work is completed before attempting to call > hci_dev_do_open. > > This patch fixes a race with old user space versions where we might > receive a HCIDEVUP ioctl before the setup procedure has been completed. > When that happens the setup procedures callback may fail early and leave > the device in an inconsistent state, causing e.g. the setup callback to > be (incorrectly) called more than once. > --- > net/bluetooth/hci_core.c | 5 +++++ > 1 file changed, 5 insertions(+) you might want to sign off your patch ;) > > diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c > index fc63e78..a216dcf 100644 > --- a/net/bluetooth/hci_core.c > +++ b/net/bluetooth/hci_core.c > @@ -1227,6 +1227,11 @@ int hci_dev_open(__u16 dev) > if (!hdev) > return -ENODEV; > > + if (test_and_clear_bit(HCI_AUTO_OFF, &hdev->dev_flags)) > + cancel_delayed_work(&hdev->power_off); > + > + flush_workqueue(hdev->req_workqueue); > + > err = hci_dev_do_open(hdev); And I think we should have a comment here on why we are doing this. Just to remind ourselves. Regards Marcel -- To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html