--- linux-2.6.12/fs/aio.c 2005-06-17 15:48:29.000000000 -0400 +++ linux/fs/aio.c 2005-07-10 12:48:14.000000000 -0400 @@ -1641,8 +1641,9 @@ asmlinkage long sys_io_cancel(aio_contex cancel = kiocb->ki_cancel; kiocb->ki_users ++; kiocbSetCancelled(kiocb); - } else + } else cancel = NULL; + spin_unlock_irq(&ctx->ctx_lock); if (NULL != cancel) { @@ -1659,8 +1660,10 @@ asmlinkage long sys_io_cancel(aio_contex if (copy_to_user(result, &tmp, sizeof(tmp))) ret = -EFAULT; } - } else + } else { + ret = -ENOSYS; printk(KERN_DEBUG "iocb has no cancel operation\n"); + } put_ioctx(ctx);