LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: "Sébastien Dugué" <sebastien.dugue@bull.net>
To: linux-kernel <linux-kernel@vger.kernel.org>
Cc: linux-aio <linux-aio@kvack.org>, Andrew Morton <akpm@osdl.org>,
Suparna Bhattacharya <suparna@in.ibm.com>,
Christoph Hellwig <hch@infradead.org>,
Zach Brown <zach.brown@oracle.com>,
Badari Pulavarty <pbadari@us.ibm.com>,
Ulrich Drepper <drepper@redhat.com>,
Jean Pierre Dion <jean-pierre.dion@bull.net>
Subject: [PATCH -mm 1/5][AIO] - Rework compat_sys_io_submit
Date: Wed, 29 Nov 2006 11:32:12 +0100 [thread overview]
Message-ID: <20061129113212.1e614a61@frecb000686> (raw)
In-Reply-To: <20061129112441.745351c9@frecb000686>
compat_sys_io_submit() cleanup
Cleanup compat_sys_io_submit by duplicating some of the native syscall
logic in the compat layer and directly calling io_submit_one() instead
of fooling the syscall into thinking it is called from a native 64-bit
caller.
This is needed for the completion notification patch to avoid having
to rewrite each iocb on the caller stack for sys_io_submit() to find the
sigevents.
compat.c | 61 +++++++++++++++++++++++++++++++++++--------------------------
1 file changed, 35 insertions(+), 26 deletions(-)
Signed-off-by: Sébastien Dugué <sebastien.dugue@bull.net>
Index: linux-2.6.19-rc6-mm2/fs/compat.c
===================================================================
--- linux-2.6.19-rc6-mm2.orig/fs/compat.c 2006-11-28 12:49:40.000000000
+0100 +++ linux-2.6.19-rc6-mm2/fs/compat.c 2006-11-28 12:51:35.000000000
+0100 @@ -642,40 +642,49 @@ out:
return ret;
}
-static inline long
-copy_iocb(long nr, u32 __user *ptr32, struct iocb __user * __user *ptr64)
+asmlinkage long
+compat_sys_io_submit(aio_context_t ctx_id, int nr, u32 __user *iocb)
{
- compat_uptr_t uptr;
+ struct kioctx *ctx;
+ long ret = 0;
int i;
- for (i = 0; i < nr; ++i) {
- if (get_user(uptr, ptr32 + i))
- return -EFAULT;
- if (put_user(compat_ptr(uptr), ptr64 + i))
- return -EFAULT;
- }
- return 0;
-}
+ if (unlikely(nr < 0))
+ return -EINVAL;
-#define MAX_AIO_SUBMITS (PAGE_SIZE/sizeof(struct iocb *))
+ if (unlikely(!access_ok(VERIFY_READ, iocb, (nr * sizeof(u32)))))
+ return -EFAULT;
-asmlinkage long
-compat_sys_io_submit(aio_context_t ctx_id, int nr, u32 __user *iocb)
-{
- struct iocb __user * __user *iocb64;
- long ret;
+ ctx = lookup_ioctx(ctx_id);
- if (unlikely(nr < 0))
+ if (unlikely(!ctx))
return -EINVAL;
+ for (i=0; i<nr; i++) {
+ compat_uptr_t uptr;
+ struct iocb __user *user_iocb;
+ struct iocb tmp;
- if (nr > MAX_AIO_SUBMITS)
- nr = MAX_AIO_SUBMITS;
-
- iocb64 = compat_alloc_user_space(nr * sizeof(*iocb64));
- ret = copy_iocb(nr, iocb, iocb64);
- if (!ret)
- ret = sys_io_submit(ctx_id, nr, iocb64);
- return ret;
+ if (get_user(uptr, iocb + i)) {
+ ret = -EFAULT;
+ break;
+ }
+
+ user_iocb = compat_ptr(uptr);
+
+ if (unlikely(copy_from_user(&tmp, user_iocb, sizeof(tmp)))) {
+ ret = -EFAULT;
+ break;
+ }
+
+ ret = io_submit_one(ctx, user_iocb, &tmp);
+
+ if (ret)
+ break;
+ }
+
+ put_ioctx(ctx);
+
+ return i? i: ret;
}
struct compat_ncp_mount_data {
next prev parent reply other threads:[~2006-11-29 10:34 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-11-29 10:24 [PATCH -mm 0/5][AIO] - AIO completion signal notification v3 Sébastien Dugué
2006-11-29 10:32 ` Sébastien Dugué [this message]
2006-11-30 0:47 ` [PATCH -mm 1/5][AIO] - Rework compat_sys_io_submit Zach Brown
2006-11-30 9:57 ` Sébastien Dugué
2006-11-30 17:27 ` Zach Brown
2006-11-29 10:32 ` [PATCH -mm 2/5][AIO] - fix aio.h includes Sébastien Dugué
2006-11-29 10:32 ` [PATCH -mm 3/5][AIO] - export good_sigevent() Sébastien Dugué
2006-11-29 10:38 ` Christoph Hellwig
2006-11-29 10:46 ` Sébastien Dugué
2006-11-29 14:54 ` Christoph Hellwig
2006-11-29 16:10 ` Sébastien Dugué
2006-12-04 17:13 ` Bharata B Rao
2006-12-05 8:30 ` Sébastien Dugué
2006-11-29 10:33 ` [PATCH -mm 4/5][AIO] - AIO completion signal notification Sébastien Dugué
2006-11-29 10:51 ` Christoph Hellwig
2006-11-29 13:08 ` Sébastien Dugué
2006-11-29 13:50 ` Christoph Hellwig
2006-11-29 14:18 ` Sébastien Dugué
2006-11-29 11:33 ` Jakub Jelinek
2006-11-29 13:25 ` Sébastien Dugué
2006-11-29 10:33 ` [PATCH -mm 5/5][AIO] - Listio support Sébastien Dugué
2006-11-30 8:25 ` Suparna Bhattacharya
2006-11-30 10:04 ` Sébastien Dugué
2006-11-30 15:38 [PATCH -mm 0/5][AIO] - AIO completion signal notification v4 Sébastien Dugué
2006-11-30 15:49 ` [PATCH -mm 1/5][AIO] - Rework compat_sys_io_submit Sébastien Dugué
[not found] <20070117104601.36b2ab18@frecb000686>
2007-01-17 9:48 ` Sébastien Dugué
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20061129113212.1e614a61@frecb000686 \
--to=sebastien.dugue@bull.net \
--cc=akpm@osdl.org \
--cc=drepper@redhat.com \
--cc=hch@infradead.org \
--cc=jean-pierre.dion@bull.net \
--cc=linux-aio@kvack.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pbadari@us.ibm.com \
--cc=suparna@in.ibm.com \
--cc=zach.brown@oracle.com \
--subject='Re: [PATCH -mm 1/5][AIO] - Rework compat_sys_io_submit' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).