diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:55:01 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-08 10:55:01 -0500 |
commit | d7fc02c7bae7b1cf69269992cf880a43a350cdaa (patch) | |
tree | a43d56fa72913a1cc98a0bbebe054d08581b3a7c /net/bluetooth/hci_sock.c | |
parent | ee1262dbc65ce0b6234a915d8432171e8d77f518 (diff) | |
parent | 28b4d5cc17c20786848cdc07b7ea237a309776bb (diff) |
Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6
* git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next-2.6: (1815 commits)
mac80211: fix reorder buffer release
iwmc3200wifi: Enable wimax core through module parameter
iwmc3200wifi: Add wifi-wimax coexistence mode as a module parameter
iwmc3200wifi: Coex table command does not expect a response
iwmc3200wifi: Update wiwi priority table
iwlwifi: driver version track kernel version
iwlwifi: indicate uCode type when fail dump error/event log
iwl3945: remove duplicated event logging code
b43: fix two warnings
ipw2100: fix rebooting hang with driver loaded
cfg80211: indent regulatory messages with spaces
iwmc3200wifi: fix NULL pointer dereference in pmkid update
mac80211: Fix TX status reporting for injected data frames
ath9k: enable 2GHz band only if the device supports it
airo: Fix integer overflow warning
rt2x00: Fix padding bug on L2PAD devices.
WE: Fix set events not propagated
b43legacy: avoid PPC fault during resume
b43: avoid PPC fault during resume
tcp: fix a timewait refcnt race
...
Fix up conflicts due to sysctl cleanups (dead sysctl_check code and
CTL_UNNUMBERED removed) in
kernel/sysctl_check.c
net/ipv4/sysctl_net_ipv4.c
net/ipv6/addrconf.c
net/sctp/sysctl.c
Diffstat (limited to 'net/bluetooth/hci_sock.c')
-rw-r--r-- | net/bluetooth/hci_sock.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/net/bluetooth/hci_sock.c b/net/bluetooth/hci_sock.c index 75302a986067..688cfebfbee0 100644 --- a/net/bluetooth/hci_sock.c +++ b/net/bluetooth/hci_sock.c | |||
@@ -414,6 +414,11 @@ static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
414 | goto done; | 414 | goto done; |
415 | } | 415 | } |
416 | 416 | ||
417 | if (!test_bit(HCI_UP, &hdev->flags)) { | ||
418 | err = -ENETDOWN; | ||
419 | goto done; | ||
420 | } | ||
421 | |||
417 | if (!(skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err))) | 422 | if (!(skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err))) |
418 | goto done; | 423 | goto done; |
419 | 424 | ||
@@ -440,10 +445,10 @@ static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
440 | 445 | ||
441 | if (test_bit(HCI_RAW, &hdev->flags) || (ogf == 0x3f)) { | 446 | if (test_bit(HCI_RAW, &hdev->flags) || (ogf == 0x3f)) { |
442 | skb_queue_tail(&hdev->raw_q, skb); | 447 | skb_queue_tail(&hdev->raw_q, skb); |
443 | hci_sched_tx(hdev); | 448 | tasklet_schedule(&hdev->tx_task); |
444 | } else { | 449 | } else { |
445 | skb_queue_tail(&hdev->cmd_q, skb); | 450 | skb_queue_tail(&hdev->cmd_q, skb); |
446 | hci_sched_cmd(hdev); | 451 | tasklet_schedule(&hdev->cmd_task); |
447 | } | 452 | } |
448 | } else { | 453 | } else { |
449 | if (!capable(CAP_NET_RAW)) { | 454 | if (!capable(CAP_NET_RAW)) { |
@@ -452,7 +457,7 @@ static int hci_sock_sendmsg(struct kiocb *iocb, struct socket *sock, | |||
452 | } | 457 | } |
453 | 458 | ||
454 | skb_queue_tail(&hdev->raw_q, skb); | 459 | skb_queue_tail(&hdev->raw_q, skb); |
455 | hci_sched_tx(hdev); | 460 | tasklet_schedule(&hdev->tx_task); |
456 | } | 461 | } |
457 | 462 | ||
458 | err = len; | 463 | err = len; |
@@ -621,7 +626,8 @@ static struct proto hci_sk_proto = { | |||
621 | .obj_size = sizeof(struct hci_pinfo) | 626 | .obj_size = sizeof(struct hci_pinfo) |
622 | }; | 627 | }; |
623 | 628 | ||
624 | static int hci_sock_create(struct net *net, struct socket *sock, int protocol) | 629 | static int hci_sock_create(struct net *net, struct socket *sock, int protocol, |
630 | int kern) | ||
625 | { | 631 | { |
626 | struct sock *sk; | 632 | struct sock *sk; |
627 | 633 | ||
@@ -687,7 +693,7 @@ static int hci_sock_dev_event(struct notifier_block *this, unsigned long event, | |||
687 | return NOTIFY_DONE; | 693 | return NOTIFY_DONE; |
688 | } | 694 | } |
689 | 695 | ||
690 | static struct net_proto_family hci_sock_family_ops = { | 696 | static const struct net_proto_family hci_sock_family_ops = { |
691 | .family = PF_BLUETOOTH, | 697 | .family = PF_BLUETOOTH, |
692 | .owner = THIS_MODULE, | 698 | .owner = THIS_MODULE, |
693 | .create = hci_sock_create, | 699 | .create = hci_sock_create, |