diff --git a/driver/wishbone.c b/driver/wishbone.c index 6a4ba308af1677eb77f3767e7ab292186e18dcaf..4df532e231b1b54b4b2b27d6fe8ace0312ded241 100644 --- a/driver/wishbone.c +++ b/driver/wishbone.c @@ -220,12 +220,12 @@ static ssize_t char_aio_read(struct kiocb *iocb, const struct iovec *iov, unsign } context->sent = RING_POS(context->sent + len); + mutex_unlock(&context->mutex); + /* Wake-up polling descriptors */ wake_up_interruptible(&context->waitq); kill_fasync(&context->fasync, SIGIO, POLL_OUT); - mutex_unlock(&context->mutex); - if (len == 0 && (filep->f_flags & O_NONBLOCK) != 0) return -EAGAIN; @@ -260,12 +260,12 @@ static ssize_t char_aio_write(struct kiocb *iocb, const struct iovec *iov, unsig /* Process buffers */ etherbone_process(context); + mutex_unlock(&context->mutex); + /* Wake-up polling descriptors */ wake_up_interruptible(&context->waitq); kill_fasync(&context->fasync, SIGIO, POLL_IN); - mutex_unlock(&context->mutex); - if (len == 0 && (filep->f_flags & O_NONBLOCK) != 0) return -EAGAIN;