On Fri, Jan 05, 2018 at 11:25:17AM -0500, Jeff Moyer wrote: > Christoph Hellwig <hch@xxxxxx> writes: > > > This way it can be used for the fallback 6-argument version on > > all architectures. > > > > Signed-off-by: Christoph Hellwig <hch@xxxxxx> > > This is a strange way to do things. However, I was never really sold on > libaio having to implement its own system call wrappers. That decision > definitely resulted in some maintenance overhead. > > Ben, what was your reasoning for not just using syscall? The main issue was that glibc's pthreads implementation really sucked back during initial development and there was a use-case for having the io_XXX functions usable directly from clone()ed threads that didn't have all the glibc pthread state setup for per-cpu areas to handle per-thread errno. That made sense back then, but is rather silly today. Technically, I'm not sure the generic syscall wrapper is safe to use. The io_XXX arch wrappers don't modify errno, while it appears the generic one does. That said, nobody has ever noticed... -ben > -Jeff > > > --- > > src/syscall-generic.h | 6 ------ > > src/syscall.h | 7 +++++++ > > 2 files changed, 7 insertions(+), 6 deletions(-) > > > > diff --git a/src/syscall-generic.h b/src/syscall-generic.h > > index 24d7c7c..35b8580 100644 > > --- a/src/syscall-generic.h > > +++ b/src/syscall-generic.h > > @@ -2,12 +2,6 @@ > > #include <unistd.h> > > #include <sys/syscall.h> > > > > -#define _body_io_syscall(sname, args...) \ > > -{ \ > > - int ret = syscall(__NR_##sname, ## args); \ > > - return ret < 0 ? -errno : ret; \ > > -} > > - > > #define io_syscall1(type,fname,sname,type1,arg1) \ > > type fname(type1 arg1) \ > > _body_io_syscall(sname, (long)arg1) > > diff --git a/src/syscall.h b/src/syscall.h > > index a2da030..3819519 100644 > > --- a/src/syscall.h > > +++ b/src/syscall.h > > @@ -10,6 +10,13 @@ > > #define DEFSYMVER(compat_sym, orig_sym, ver_sym) \ > > __asm__(".symver " SYMSTR(compat_sym) "," SYMSTR(orig_sym) "@@LIBAIO_" SYMSTR(ver_sym)); > > > > +/* generic fallback */ > > +#define _body_io_syscall(sname, args...) \ > > +{ \ > > + int ret = syscall(__NR_##sname, ## args); \ > > + return ret < 0 ? -errno : ret; \ > > +} > > + > > #if defined(__i386__) > > #include "syscall-i386.h" > > #elif defined(__x86_64__) > -- "Thought is the essence of where you are now."