tty: Ldisc revamp
[deliverable/linux.git] / net / irda / ircomm / ircomm_tty.c
index d2620410cb0aa1215c2e60682f215618466e069f..e4e2caeb9d82d9d1061e27b64c10476125806846 100644 (file)
@@ -555,10 +555,8 @@ static void ircomm_tty_close(struct tty_struct *tty, struct file *filp)
 
        ircomm_tty_shutdown(self);
 
-       if (tty->driver->flush_buffer)
-               tty->driver->flush_buffer(tty);
-       if (tty->ldisc.flush_buffer)
-               tty->ldisc.flush_buffer(tty);
+       tty_driver_flush_buffer(tty);
+       tty_ldisc_flush(tty);
 
        tty->closing = 0;
        self->tty = NULL;
@@ -652,12 +650,7 @@ static void ircomm_tty_do_softint(struct work_struct *work)
        }
 
        /* Check if user (still) wants to be waken up */
-       if ((tty->flags & (1 << TTY_DO_WRITE_WAKEUP)) &&
-           tty->ldisc.write_wakeup)
-       {
-               (tty->ldisc.write_wakeup)(tty);
-       }
-       wake_up_interruptible(&tty->write_wait);
+       tty_wakeup(tty);
 }
 
 /*
@@ -1143,6 +1136,7 @@ static int ircomm_tty_data_indication(void *instance, void *sap,
                                      struct sk_buff *skb)
 {
        struct ircomm_tty_cb *self = (struct ircomm_tty_cb *) instance;
+       struct tty_ldisc *ld;
 
        IRDA_DEBUG(2, "%s()\n", __func__ );
 
@@ -1175,7 +1169,11 @@ static int ircomm_tty_data_indication(void *instance, void *sap,
         * involve the flip buffers, since we are not running in an interrupt
         * handler
         */
-       self->tty->ldisc.receive_buf(self->tty, skb->data, NULL, skb->len);
+
+       ld = tty_ldisc_ref(self->tty);
+       if (ld)
+               ld->ops->receive_buf(self->tty, skb->data, NULL, skb->len);
+       tty_ldisc_deref(ld);
 
        /* No need to kfree_skb - see ircomm_ttp_data_indication() */
 
This page took 0.043039 seconds and 5 git commands to generate.