return 0;
        if (skb_queue_empty(&dev->drv[di]->rpqueue[channel])) {
                if (sleep)
-                       interruptible_sleep_on(sleep);
+                       wait_event_interruptible(*sleep,
+                               !skb_queue_empty(&dev->drv[di]->rpqueue[channel]));
                else
                        return 0;
        }
                                retval = -EAGAIN;
                                goto out;
                        }
-                       interruptible_sleep_on(&(dev->info_waitq));
+                       wait_event_interruptible(dev->info_waitq,
+                                                file->private_data);
                }
                p = isdn_statstr();
                file->private_data = NULL;
                                retval = -EAGAIN;
                                goto out;
                        }
-                       interruptible_sleep_on(&(dev->drv[drvidx]->st_waitq));
+                       wait_event_interruptible(dev->drv[drvidx]->st_waitq,
+                                                dev->drv[drvidx]->stavail);
                }
                if (dev->drv[drvidx]->interface->readstat) {
                        if (count > dev->drv[drvidx]->stavail)
                        goto out;
                }
                chidx = isdn_minor2chan(minor);
-               while ((retval = isdn_writebuf_stub(drvidx, chidx, buf, count)) == 0)
-                       interruptible_sleep_on(&dev->drv[drvidx]->snd_waitq[chidx]);
+               wait_event_interruptible(dev->drv[drvidx]->snd_waitq[chidx],
+                       (retval = isdn_writebuf_stub(drvidx, chidx, buf, count)));
                goto out;
        }
        if (minor <= ISDN_MINOR_CTRLMAX) {