X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Faio.h;h=461a3b0736e007303798dc891cf634369132e5fc;hb=9bf4aaab3e101692164d49b7ca357651eb691cb6;hp=b03ebead268ca5ba822331b7a2593e5920638b18;hpb=5273a3df6485dc2ad6aa7ddd441b9a21970f003b;p=linux-2.6.git diff --git a/include/linux/aio.h b/include/linux/aio.h index b03ebead2..461a3b073 100644 --- a/include/linux/aio.h +++ b/include/linux/aio.h @@ -23,8 +23,6 @@ struct kioctx; #define KIOCB_SYNC_KEY (~0U) -#define KIOCB_PRIVATE_SIZE (24 * sizeof(long)) - /* ki_flags bits */ #define KIF_LOCKED 0 #define KIF_KICKED 1 @@ -55,15 +53,18 @@ struct kiocb { struct kioctx *ki_ctx; /* may be NULL for sync ops */ int (*ki_cancel)(struct kiocb *, struct io_event *); long (*ki_retry)(struct kiocb *); + void (*ki_dtor)(struct kiocb *); struct list_head ki_list; /* the aio core uses this * for cancellation */ - void __user *ki_user_obj; /* pointer to userland's iocb */ + union { + void __user *user; + struct task_struct *tsk; + } ki_obj; __u64 ki_user_data; /* user's data for completion */ loff_t ki_pos; - - char private[KIOCB_PRIVATE_SIZE]; + void *private; }; #define is_sync_kiocb(iocb) ((iocb)->ki_key == KIOCB_SYNC_KEY) @@ -76,7 +77,8 @@ struct kiocb { (x)->ki_filp = (filp); \ (x)->ki_ctx = &tsk->active_mm->default_kioctx; \ (x)->ki_cancel = NULL; \ - (x)->ki_user_obj = tsk; \ + (x)->ki_dtor = NULL; \ + (x)->ki_obj.tsk = tsk; \ } while (0) #define AIO_RING_MAGIC 0xa10a10a1 @@ -149,11 +151,11 @@ struct mm_struct; extern void FASTCALL(exit_aio(struct mm_struct *mm)); extern struct kioctx *lookup_ioctx(unsigned long ctx_id); extern int FASTCALL(io_submit_one(struct kioctx *ctx, - struct iocb *user_iocb, struct iocb *iocb)); + struct iocb __user *user_iocb, struct iocb *iocb)); /* semi private, but used by the 32bit emulations: */ struct kioctx *lookup_ioctx(unsigned long ctx_id); -int FASTCALL(io_submit_one(struct kioctx *ctx, struct iocb *user_iocb, +int FASTCALL(io_submit_one(struct kioctx *ctx, struct iocb __user *user_iocb, struct iocb *iocb)); #define get_ioctx(kioctx) do { if (unlikely(atomic_read(&(kioctx)->users) <= 0)) BUG(); atomic_inc(&(kioctx)->users); } while (0)