diff options
Diffstat (limited to 'net/bluetooth/rfcomm/tty.c')
-rw-r--r-- | net/bluetooth/rfcomm/tty.c | 21 |
1 files changed, 8 insertions, 13 deletions
diff --git a/net/bluetooth/rfcomm/tty.c b/net/bluetooth/rfcomm/tty.c index bd6fd0f43d2b..b6e44ad6cca6 100644 --- a/net/bluetooth/rfcomm/tty.c +++ b/net/bluetooth/rfcomm/tty.c | |||
@@ -541,23 +541,21 @@ int rfcomm_dev_ioctl(struct sock *sk, unsigned int cmd, void __user *arg) | |||
541 | static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb) | 541 | static void rfcomm_dev_data_ready(struct rfcomm_dlc *dlc, struct sk_buff *skb) |
542 | { | 542 | { |
543 | struct rfcomm_dev *dev = dlc->owner; | 543 | struct rfcomm_dev *dev = dlc->owner; |
544 | struct tty_struct *tty; | ||
545 | 544 | ||
546 | if (!dev) { | 545 | if (!dev) { |
547 | kfree_skb(skb); | 546 | kfree_skb(skb); |
548 | return; | 547 | return; |
549 | } | 548 | } |
550 | 549 | ||
551 | tty = dev->port.tty; | 550 | if (!skb_queue_empty(&dev->pending)) { |
552 | if (!tty || !skb_queue_empty(&dev->pending)) { | ||
553 | skb_queue_tail(&dev->pending, skb); | 551 | skb_queue_tail(&dev->pending, skb); |
554 | return; | 552 | return; |
555 | } | 553 | } |
556 | 554 | ||
557 | BT_DBG("dlc %p tty %p len %d", dlc, tty, skb->len); | 555 | BT_DBG("dlc %p len %d", dlc, skb->len); |
558 | 556 | ||
559 | tty_insert_flip_string(tty, skb->data, skb->len); | 557 | tty_insert_flip_string(&dev->port, skb->data, skb->len); |
560 | tty_flip_buffer_push(tty); | 558 | tty_flip_buffer_push(&dev->port); |
561 | 559 | ||
562 | kfree_skb(skb); | 560 | kfree_skb(skb); |
563 | } | 561 | } |
@@ -621,26 +619,23 @@ static void rfcomm_dev_modem_status(struct rfcomm_dlc *dlc, u8 v24_sig) | |||
621 | /* ---- TTY functions ---- */ | 619 | /* ---- TTY functions ---- */ |
622 | static void rfcomm_tty_copy_pending(struct rfcomm_dev *dev) | 620 | static void rfcomm_tty_copy_pending(struct rfcomm_dev *dev) |
623 | { | 621 | { |
624 | struct tty_struct *tty = dev->port.tty; | ||
625 | struct sk_buff *skb; | 622 | struct sk_buff *skb; |
626 | int inserted = 0; | 623 | int inserted = 0; |
627 | 624 | ||
628 | if (!tty) | 625 | BT_DBG("dev %p", dev); |
629 | return; | ||
630 | |||
631 | BT_DBG("dev %p tty %p", dev, tty); | ||
632 | 626 | ||
633 | rfcomm_dlc_lock(dev->dlc); | 627 | rfcomm_dlc_lock(dev->dlc); |
634 | 628 | ||
635 | while ((skb = skb_dequeue(&dev->pending))) { | 629 | while ((skb = skb_dequeue(&dev->pending))) { |
636 | inserted += tty_insert_flip_string(tty, skb->data, skb->len); | 630 | inserted += tty_insert_flip_string(&dev->port, skb->data, |
631 | skb->len); | ||
637 | kfree_skb(skb); | 632 | kfree_skb(skb); |
638 | } | 633 | } |
639 | 634 | ||
640 | rfcomm_dlc_unlock(dev->dlc); | 635 | rfcomm_dlc_unlock(dev->dlc); |
641 | 636 | ||
642 | if (inserted > 0) | 637 | if (inserted > 0) |
643 | tty_flip_buffer_push(tty); | 638 | tty_flip_buffer_push(&dev->port); |
644 | } | 639 | } |
645 | 640 | ||
646 | static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp) | 641 | static int rfcomm_tty_open(struct tty_struct *tty, struct file *filp) |