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;