Loading net/bluetooth/hci_core.c +25 −13 Original line number Diff line number Diff line Loading @@ -1241,47 +1241,59 @@ int hci_blacklist_clear(struct hci_dev *hdev) int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr) { struct bdaddr_list *entry; hci_dev_lock(hdev); int err; if (bacmp(bdaddr, BDADDR_ANY) == 0) return -EBADF; if (hci_blacklist_lookup(hdev, bdaddr)) return -EEXIST; hci_dev_lock(hdev); if (hci_blacklist_lookup(hdev, bdaddr)) { err = -EEXIST; goto err; } entry = kzalloc(sizeof(struct bdaddr_list), GFP_KERNEL); if (!entry) if (!entry) { return -ENOMEM; goto err; } bacpy(&entry->bdaddr, bdaddr); list_add(&entry->list, &hdev->blacklist); hci_dev_unlock(hdev); err = 0; return 0; err: hci_dev_unlock(hdev); return err; } int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr) { struct bdaddr_list *entry; int err = 0; hci_dev_lock(hdev); if (bacmp(bdaddr, BDADDR_ANY) == 0) return hci_blacklist_clear(hdev); if (bacmp(bdaddr, BDADDR_ANY) == 0) { hci_blacklist_clear(hdev); goto done; } entry = hci_blacklist_lookup(hdev, bdaddr); if (!entry) return -ENOENT; if (!entry) { err = -ENOENT; goto done; } list_del(&entry->list); kfree(entry); done: hci_dev_unlock(hdev); return 0; return err; } static void hci_clear_adv_cache(unsigned long arg) Loading Loading
net/bluetooth/hci_core.c +25 −13 Original line number Diff line number Diff line Loading @@ -1241,47 +1241,59 @@ int hci_blacklist_clear(struct hci_dev *hdev) int hci_blacklist_add(struct hci_dev *hdev, bdaddr_t *bdaddr) { struct bdaddr_list *entry; hci_dev_lock(hdev); int err; if (bacmp(bdaddr, BDADDR_ANY) == 0) return -EBADF; if (hci_blacklist_lookup(hdev, bdaddr)) return -EEXIST; hci_dev_lock(hdev); if (hci_blacklist_lookup(hdev, bdaddr)) { err = -EEXIST; goto err; } entry = kzalloc(sizeof(struct bdaddr_list), GFP_KERNEL); if (!entry) if (!entry) { return -ENOMEM; goto err; } bacpy(&entry->bdaddr, bdaddr); list_add(&entry->list, &hdev->blacklist); hci_dev_unlock(hdev); err = 0; return 0; err: hci_dev_unlock(hdev); return err; } int hci_blacklist_del(struct hci_dev *hdev, bdaddr_t *bdaddr) { struct bdaddr_list *entry; int err = 0; hci_dev_lock(hdev); if (bacmp(bdaddr, BDADDR_ANY) == 0) return hci_blacklist_clear(hdev); if (bacmp(bdaddr, BDADDR_ANY) == 0) { hci_blacklist_clear(hdev); goto done; } entry = hci_blacklist_lookup(hdev, bdaddr); if (!entry) return -ENOENT; if (!entry) { err = -ENOENT; goto done; } list_del(&entry->list); kfree(entry); done: hci_dev_unlock(hdev); return 0; return err; } static void hci_clear_adv_cache(unsigned long arg) Loading