Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=da3e30e78ed9652322dccb49fa149e7b4e985f74
Commit:     da3e30e78ed9652322dccb49fa149e7b4e985f74
Parent:     1a65f493c335abc3822291b52f3565776ce39a1b
Author:     Jeff Dike <[EMAIL PROTECTED]>
AuthorDate: Mon Jul 23 18:43:47 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Jul 24 12:24:58 2007 -0700

    uml: fix aio compilation bug
    
    Restructure do_aio thanks to commments from Ulrich and Al.
    
    Uli started this by seeing that UML's initialization of a struct iocb
    initialized fields that it shouldn't.
    
    Al followed up by adding the following cleanups:
        eliminating a variable by just using an anonymous structure in
    its place.
        hoisting a duplicated line out of the switch.
        simplifying the error checking at the end.
    
    I added a severity to the printk.
    
    Signed-off-by: Jeff Dike <[EMAIL PROTECTED]>
    Cc: Al Viro <[EMAIL PROTECTED]>
    Cc: Ulrich Drepper <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 arch/um/os-Linux/aio.c |   47 +++++++++++++++++------------------------------
 1 files changed, 17 insertions(+), 30 deletions(-)

diff --git a/arch/um/os-Linux/aio.c b/arch/um/os-Linux/aio.c
index b126df4..5934835 100644
--- a/arch/um/os-Linux/aio.c
+++ b/arch/um/os-Linux/aio.c
@@ -14,6 +14,7 @@
 #include "init.h"
 #include "user.h"
 #include "mode.h"
+#include "kern_constants.h"
 
 struct aio_thread_req {
        enum aio_type type;
@@ -65,47 +66,33 @@ static long io_getevents(aio_context_t ctx_id, long min_nr, 
long nr,
 static int do_aio(aio_context_t ctx, enum aio_type type, int fd, char *buf,
                  int len, unsigned long long offset, struct aio_context *aio)
 {
-       struct iocb iocb, *iocbp = &iocb;
+       struct iocb *iocbp = & ((struct iocb) {
+                                   .aio_data       = (unsigned long) aio,
+                                   .aio_fildes     = fd,
+                                   .aio_buf        = (unsigned long) buf,
+                                   .aio_nbytes     = len,
+                                   .aio_offset     = offset
+                            });
        char c;
-       int err;
 
-       iocb = ((struct iocb) { .aio_data       = (unsigned long) aio,
-                               .aio_reqprio    = 0,
-                               .aio_fildes     = fd,
-                               .aio_buf        = (unsigned long) buf,
-                               .aio_nbytes     = len,
-                               .aio_offset     = offset,
-                               .aio_reserved1  = 0,
-                               .aio_reserved2  = 0,
-                               .aio_reserved3  = 0 });
-
-       switch(type){
+       switch (type) {
        case AIO_READ:
-               iocb.aio_lio_opcode = IOCB_CMD_PREAD;
-               err = io_submit(ctx, 1, &iocbp);
+               iocbp->aio_lio_opcode = IOCB_CMD_PREAD;
                break;
        case AIO_WRITE:
-               iocb.aio_lio_opcode = IOCB_CMD_PWRITE;
-               err = io_submit(ctx, 1, &iocbp);
+               iocbp->aio_lio_opcode = IOCB_CMD_PWRITE;
                break;
        case AIO_MMAP:
-               iocb.aio_lio_opcode = IOCB_CMD_PREAD;
-               iocb.aio_buf = (unsigned long) &c;
-               iocb.aio_nbytes = sizeof(c);
-               err = io_submit(ctx, 1, &iocbp);
+               iocbp->aio_lio_opcode = IOCB_CMD_PREAD;
+               iocbp->aio_buf = (unsigned long) &c;
+               iocbp->aio_nbytes = sizeof(c);
                break;
        default:
-               printk("Bogus op in do_aio - %d\n", type);
-               err = -EINVAL;
-               break;
+               printk(UM_KERN_ERR "Bogus op in do_aio - %d\n", type);
+               return -EINVAL;
        }
 
-       if(err > 0)
-               err = 0;
-       else
-               err = -errno;
-
-       return err;
+       return (io_submit(ctx, 1, &iocbp) > 0) ? 0 : -errno;
 }
 
 /* Initialized in an initcall and unchanged thereafter */
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to