On 4/20/2024 5:48 AM, Zijun Hu wrote: > From: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> > > These commands don't require the adapter to be up and running so don't > use hci_cmd_sync_queue which would check that flag, instead use > hci_cmd_sync_submit which would ensure mgmt_class_complete is set > properly regardless if any command was actually run or not. > > Link: https://github.com/bluez/bluez/issues/809 > Fixes: d883a4669a1d ("Bluetooth: hci_sync: Only allow hci_cmd_sync_queue if running") > Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@xxxxxxxxx> > --- > net/bluetooth/mgmt.c | 20 +++++++++++++++----- > 1 file changed, 15 insertions(+), 5 deletions(-) > > diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c > index 7129e70a0253..68deec968405 100644 > --- a/net/bluetooth/mgmt.c > +++ b/net/bluetooth/mgmt.c > @@ -2623,7 +2623,11 @@ static int add_uuid(struct sock *sk, struct hci_dev *hdev, void *data, u16 len) > goto failed; > } > > - err = hci_cmd_sync_queue(hdev, add_uuid_sync, cmd, mgmt_class_complete); > + /* MGMT_OP_ADD_UUID don't require adapter the UP/Running so use > + * hci_cmd_sync_submit instead of hci_cmd_sync_queue. > + */ > + err = hci_cmd_sync_submit(hdev, add_uuid_sync, cmd, > + mgmt_class_complete); > if (err < 0) { > mgmt_pending_free(cmd); > goto failed; > @@ -2717,8 +2721,11 @@ static int remove_uuid(struct sock *sk, struct hci_dev *hdev, void *data, > goto unlock; > } > > - err = hci_cmd_sync_queue(hdev, remove_uuid_sync, cmd, > - mgmt_class_complete); > + /* MGMT_OP_REMOVE_UUID don't require adapter the UP/Running so use > + * hci_cmd_sync_submit instead of hci_cmd_sync_queue. > + */ > + err = hci_cmd_sync_submit(hdev, remove_uuid_sync, cmd, > + mgmt_class_complete); > if (err < 0) > mgmt_pending_free(cmd); > > @@ -2784,8 +2791,11 @@ static int set_dev_class(struct sock *sk, struct hci_dev *hdev, void *data, > goto unlock; > } > > - err = hci_cmd_sync_queue(hdev, set_class_sync, cmd, > - mgmt_class_complete); > + /* MGMT_OP_SET_DEV_CLASS don't require adapter the UP/Running so use > + * hci_cmd_sync_submit instead of hci_cmd_sync_queue. > + */ > + err = hci_cmd_sync_submit(hdev, set_class_sync, cmd, > + mgmt_class_complete); > if (err < 0) > mgmt_pending_free(cmd); > sorry to send wrong patch sets please ignore it.