UML - Fix aio compilation bug
PATCH 2/3 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.
--
arch/um/os-Linux/aio.c | 47 +++++++++++++++++------------------------------ 1 file changed, 17 insertions(+), 30 deletions(-)
arch/um/os-Linux/aio.c +17 -30
@@ -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 cstatic 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 */
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop. Now Search log events and configuration files using AJAX and a browser. Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
User-mode-linux-devel mailing list [email protected]
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel