Author: jhb
Date: Wed Mar  9 19:05:11 2016
New Revision: 296572
URL: https://svnweb.freebsd.org/changeset/base/296572

Log:
  Simplify AIO initialization now that it is standard.
  
  - Mark AIO system calls as STD and remove the helpers to dynamically
    register them.
  - Use COMPAT6 for the old system calls with the older sigevent instead of
    an 'o' prefix.
  - Simplify the POSIX configuration to note that AIO is always available.
  - Handle AIO in the default VOP_PATHCONF instead of special casing it in
    the pathconf() system call.  fpathconf() is still hackish.
  - Remove freebsd32_aio_cancel() as it just called the native one directly.
  
  Reviewed by:  kib
  Sponsored by: Chelsio Communications
  Differential Revision:        https://reviews.freebsd.org/D5589

Modified:
  head/sys/compat/freebsd32/syscalls.master
  head/sys/kern/kern_descrip.c
  head/sys/kern/posix4_mib.c
  head/sys/kern/syscalls.master
  head/sys/kern/vfs_aio.c
  head/sys/kern/vfs_default.c
  head/sys/kern/vfs_syscalls.c
  head/sys/sys/signalvar.h
  head/sys/sys/unistd.h
  head/sys/sys/vnode.h

Modified: head/sys/compat/freebsd32/syscalls.master
==============================================================================
--- head/sys/compat/freebsd32/syscalls.master   Wed Mar  9 18:45:41 2016        
(r296571)
+++ head/sys/compat/freebsd32/syscalls.master   Wed Mar  9 19:05:11 2016        
(r296572)
@@ -477,11 +477,11 @@
                                    u_int nfds, int timeout); }
 253    AUE_ISSETUGID   NOPROTO { int issetugid(void); }
 254    AUE_LCHOWN      NOPROTO { int lchown(char *path, int uid, int gid); }
-255    AUE_NULL        NOSTD   { int freebsd32_aio_read( \
+255    AUE_NULL        STD     { int freebsd32_aio_read( \
                                    struct aiocb32 *aiocbp); }
-256    AUE_NULL        NOSTD   { int freebsd32_aio_write( \
+256    AUE_NULL        STD     { int freebsd32_aio_write( \
                                    struct aiocb32 *aiocbp); }
-257    AUE_NULL        NOSTD   { int freebsd32_lio_listio(int mode, \
+257    AUE_NULL        STD     { int freebsd32_lio_listio(int mode, \
                                    struct aiocb32 * const *acb_list, \
                                    int nent, struct sigevent32 *sig); }
 258    AUE_NULL        UNIMPL  nosys
@@ -562,20 +562,20 @@
 312    AUE_SETRESGID   NOPROTO { int setresgid(gid_t rgid, gid_t egid, \
                                    gid_t sgid); }
 313    AUE_NULL        OBSOL   signanosleep
-314    AUE_NULL        NOSTD   { int freebsd32_aio_return( \
+314    AUE_NULL        STD     { int freebsd32_aio_return( \
                                    struct aiocb32 *aiocbp); }
-315    AUE_NULL        NOSTD   { int freebsd32_aio_suspend( \
+315    AUE_NULL        STD     { int freebsd32_aio_suspend( \
                                    struct aiocb32 * const * aiocbp, int nent, \
                                    const struct timespec32 *timeout); }
-316    AUE_NULL        NOSTD   { int freebsd32_aio_cancel(int fd, \
+316    AUE_NULL        NOPROTO { int aio_cancel(int fd, \
+                                   struct aiocb *aiocbp); }
+317    AUE_NULL        STD     { int freebsd32_aio_error( \
                                    struct aiocb32 *aiocbp); }
-317    AUE_NULL        NOSTD   { int freebsd32_aio_error( \
-                                   struct aiocb32 *aiocbp); }
-318    AUE_NULL        NOSTD   { int freebsd32_oaio_read( \
+318    AUE_NULL        COMPAT6 { int freebsd32_aio_read( \
                                    struct oaiocb32 *aiocbp); }
-319    AUE_NULL        NOSTD   { int freebsd32_oaio_write( \
+319    AUE_NULL        COMPAT6 { int freebsd32_aio_write( \
                                    struct oaiocb32 *aiocbp); }
-320    AUE_NULL        NOSTD   { int freebsd32_olio_listio(int mode, \
+320    AUE_NULL        COMPAT6 { int freebsd32_lio_listio(int mode, \
                                    struct oaiocb32 * const *acb_list, \
                                    int nent, struct osigevent32 *sig); }
 321    AUE_NULL        NOPROTO { int yield(void); }
@@ -653,7 +653,7 @@
 358    AUE_EXTATTR_DELETE_FILE NOPROTO { int extattr_delete_file( \
                                    const char *path, int attrnamespace, \
                                    const char *attrname); }
-359    AUE_NULL        NOSTD   { int freebsd32_aio_waitcomplete( \
+359    AUE_NULL        STD     { int freebsd32_aio_waitcomplete( \
                                    struct aiocb32 **aiocbp, \
                                    struct timespec32 *timeout); }
 360    AUE_GETRESUID   NOPROTO { int getresuid(uid_t *ruid, uid_t *euid, \
@@ -837,7 +837,7 @@
 462    AUE_NULL        NOPROTO|NOSTD   { int kmq_unlink(const char *path); }
 463    AUE_NULL        NOPROTO { int abort2(const char *why, int nargs, void 
**args); }
 464    AUE_NULL        NOPROTO { int thr_set_name(long id, const char *name); }
-465    AUE_NULL        NOSTD   { int freebsd32_aio_fsync(int op, \
+465    AUE_NULL        STD     { int freebsd32_aio_fsync(int op, \
                                    struct aiocb32 *aiocbp); }
 466    AUE_RTPRIO      NOPROTO { int rtprio_thread(int function, \
                                    lwpid_t lwpid, struct rtprio *rtp); }
@@ -1055,7 +1055,7 @@
                                    __socklen_t * __restrict anamelen, \
                                    int flags); }
 542    AUE_PIPE        NOPROTO { int pipe2(int *fildes, int flags); }
-543    AUE_NULL        NOSTD   { int freebsd32_aio_mlock( \
+543    AUE_NULL        STD     { int freebsd32_aio_mlock( \
                                    struct aiocb32 *aiocbp); }
 #ifdef PAD64_REQUIRED
 544    AUE_NULL        STD     { int freebsd32_procctl(int idtype, int pad, \

Modified: head/sys/kern/kern_descrip.c
==============================================================================
--- head/sys/kern/kern_descrip.c        Wed Mar  9 18:45:41 2016        
(r296571)
+++ head/sys/kern/kern_descrip.c        Wed Mar  9 19:05:11 2016        
(r296572)
@@ -1395,9 +1395,8 @@ sys_fpathconf(struct thread *td, struct 
        if (error != 0)
                return (error);
 
-       /* If asynchronous I/O is available, it works for all descriptors. */
        if (uap->name == _PC_ASYNC_IO) {
-               td->td_retval[0] = async_io_version;
+               td->td_retval[0] = _POSIX_ASYNCHRONOUS_IO;
                goto out;
        }
        vp = fp->f_vnode;

Modified: head/sys/kern/posix4_mib.c
==============================================================================
--- head/sys/kern/posix4_mib.c  Wed Mar  9 18:45:41 2016        (r296571)
+++ head/sys/kern/posix4_mib.c  Wed Mar  9 19:05:11 2016        (r296572)
@@ -77,8 +77,7 @@ SYSCTL_NODE(_kern, OID_AUTO, p1003_1b, C
 
 #endif
 
-SYSCTL_INT(_p1003_1b, CTL_P1003_1B_ASYNCHRONOUS_IO, \
-       asynchronous_io, CTLFLAG_RD, &async_io_version, 0, "");
+P1B_SYSCTL(CTL_P1003_1B_ASYNCHRONOUS_IO, asynchronous_io);
 P1B_SYSCTL(CTL_P1003_1B_MAPPED_FILES, mapped_files);
 P1B_SYSCTL(CTL_P1003_1B_MEMLOCK, memlock);
 P1B_SYSCTL(CTL_P1003_1B_MEMLOCK_RANGE, memlock_range);
@@ -170,12 +169,6 @@ p31b_set_standard(void *dummy)
        p31b_setcfg(CTL_P1003_1B_MAPPED_FILES, 200112L);
        p31b_setcfg(CTL_P1003_1B_SHARED_MEMORY_OBJECTS, 200112L);
        p31b_setcfg(CTL_P1003_1B_PAGESIZE, PAGE_SIZE);
-       if (!p31b_iscfg(CTL_P1003_1B_AIO_LISTIO_MAX))
-               p31b_setcfg(CTL_P1003_1B_AIO_LISTIO_MAX, -1);
-       if (!p31b_iscfg(CTL_P1003_1B_AIO_MAX))
-               p31b_setcfg(CTL_P1003_1B_AIO_MAX, -1);
-       if (!p31b_iscfg(CTL_P1003_1B_AIO_PRIO_DELTA_MAX))
-               p31b_setcfg(CTL_P1003_1B_AIO_PRIO_DELTA_MAX, -1);
 }
 
 SYSINIT(p31b_set_standard, SI_SUB_P1003_1B, SI_ORDER_ANY, p31b_set_standard, 

Modified: head/sys/kern/syscalls.master
==============================================================================
--- head/sys/kern/syscalls.master       Wed Mar  9 18:45:41 2016        
(r296571)
+++ head/sys/kern/syscalls.master       Wed Mar  9 19:05:11 2016        
(r296572)
@@ -475,9 +475,9 @@
                                    u_int nfds, int timeout); }
 253    AUE_ISSETUGID   STD     { int issetugid(void); }
 254    AUE_LCHOWN      STD     { int lchown(char *path, int uid, int gid); }
-255    AUE_NULL        NOSTD   { int aio_read(struct aiocb *aiocbp); }
-256    AUE_NULL        NOSTD   { int aio_write(struct aiocb *aiocbp); }
-257    AUE_NULL        NOSTD   { int lio_listio(int mode, \
+255    AUE_NULL        STD     { int aio_read(struct aiocb *aiocbp); }
+256    AUE_NULL        STD     { int aio_write(struct aiocb *aiocbp); }
+257    AUE_NULL        STD     { int lio_listio(int mode, \
                                    struct aiocb * const *acb_list, \
                                    int nent, struct sigevent *sig); }
 258    AUE_NULL        UNIMPL  nosys
@@ -554,16 +554,16 @@
 312    AUE_SETRESGID   STD     { int setresgid(gid_t rgid, gid_t egid, \
                                    gid_t sgid); }
 313    AUE_NULL        OBSOL   signanosleep
-314    AUE_NULL        NOSTD   { int aio_return(struct aiocb *aiocbp); }
-315    AUE_NULL        NOSTD   { int aio_suspend( \
+314    AUE_NULL        STD     { int aio_return(struct aiocb *aiocbp); }
+315    AUE_NULL        STD     { int aio_suspend( \
                                    struct aiocb * const * aiocbp, int nent, \
                                    const struct timespec *timeout); }
-316    AUE_NULL        NOSTD   { int aio_cancel(int fd, \
+316    AUE_NULL        STD     { int aio_cancel(int fd, \
                                    struct aiocb *aiocbp); }
-317    AUE_NULL        NOSTD   { int aio_error(struct aiocb *aiocbp); }
-318    AUE_NULL        NOSTD   { int oaio_read(struct oaiocb *aiocbp); }
-319    AUE_NULL        NOSTD   { int oaio_write(struct oaiocb *aiocbp); }
-320    AUE_NULL        NOSTD   { int olio_listio(int mode, \
+317    AUE_NULL        STD     { int aio_error(struct aiocb *aiocbp); }
+318    AUE_NULL        COMPAT6 { int aio_read(struct oaiocb *aiocbp); }
+319    AUE_NULL        COMPAT6 { int aio_write(struct oaiocb *aiocbp); }
+320    AUE_NULL        COMPAT6 { int lio_listio(int mode, \
                                    struct oaiocb * const *acb_list, \
                                    int nent, struct osigevent *sig); }
 321    AUE_NULL        STD     { int yield(void); }
@@ -643,7 +643,7 @@
 358    AUE_EXTATTR_DELETE_FILE STD     { int extattr_delete_file(const char 
*path, \
                                    int attrnamespace, \
                                    const char *attrname); }
-359    AUE_NULL        NOSTD   { int aio_waitcomplete( \
+359    AUE_NULL        STD     { int aio_waitcomplete( \
                                    struct aiocb **aiocbp, \
                                    struct timespec *timeout); }
 360    AUE_GETRESUID   STD     { int getresuid(uid_t *ruid, uid_t *euid, \
@@ -830,7 +830,7 @@
 462    AUE_NULL        NOSTD   { int kmq_unlink(const char *path); }
 463    AUE_NULL        STD     { int abort2(const char *why, int nargs, void 
**args); }
 464    AUE_NULL        STD     { int thr_set_name(long id, const char *name); }
-465    AUE_NULL        NOSTD   { int aio_fsync(int op, struct aiocb *aiocbp); }
+465    AUE_NULL        STD     { int aio_fsync(int op, struct aiocb *aiocbp); }
 466    AUE_RTPRIO      STD     { int rtprio_thread(int function, \
                                    lwpid_t lwpid, struct rtprio *rtp); }
 467    AUE_NULL        UNIMPL  nosys
@@ -977,7 +977,7 @@
                                    __socklen_t * __restrict anamelen, \
                                    int flags); }
 542    AUE_PIPE        STD     { int pipe2(int *fildes, int flags); }
-543    AUE_NULL        NOSTD   { int aio_mlock(struct aiocb *aiocbp); }
+543    AUE_NULL        STD     { int aio_mlock(struct aiocb *aiocbp); }
 544    AUE_NULL        STD     { int procctl(idtype_t idtype, id_t id, \
                                    int com, void *data); }
 545    AUE_POLL        STD     { int ppoll(struct pollfd *fds, u_int nfds, \

Modified: head/sys/kern/vfs_aio.c
==============================================================================
--- head/sys/kern/vfs_aio.c     Wed Mar  9 18:45:41 2016        (r296571)
+++ head/sys/kern/vfs_aio.c     Wed Mar  9 19:05:11 2016        (r296572)
@@ -161,6 +161,7 @@ static int max_buf_aio = MAX_BUF_AIO;
 SYSCTL_INT(_vfs_aio, OID_AUTO, max_buf_aio, CTLFLAG_RW, &max_buf_aio, 0,
     "Maximum buf aio requests per process (stored in the process)");
 
+#ifdef COMPAT_FREEBSD6
 typedef struct oaiocb {
        int     aio_fildes;             /* File descriptor */
        off_t   aio_offset;             /* File offset for I/O */
@@ -171,6 +172,7 @@ typedef struct oaiocb {
        int     aio_reqprio;            /* Request priority -- ignored */
        struct  __aiocb_private _aiocb_private;
 } oaiocb_t;
+#endif
 
 /*
  * Below is a key of locks used to protect each member of struct kaiocb
@@ -368,52 +370,7 @@ static moduledata_t aio_mod = {
        NULL
 };
 
-static struct syscall_helper_data aio_syscalls[] = {
-       SYSCALL_INIT_HELPER(aio_cancel),
-       SYSCALL_INIT_HELPER(aio_error),
-       SYSCALL_INIT_HELPER(aio_fsync),
-       SYSCALL_INIT_HELPER(aio_mlock),
-       SYSCALL_INIT_HELPER(aio_read),
-       SYSCALL_INIT_HELPER(aio_return),
-       SYSCALL_INIT_HELPER(aio_suspend),
-       SYSCALL_INIT_HELPER(aio_waitcomplete),
-       SYSCALL_INIT_HELPER(aio_write),
-       SYSCALL_INIT_HELPER(lio_listio),
-       SYSCALL_INIT_HELPER(oaio_read),
-       SYSCALL_INIT_HELPER(oaio_write),
-       SYSCALL_INIT_HELPER(olio_listio),
-       SYSCALL_INIT_LAST
-};
-
-#ifdef COMPAT_FREEBSD32
-#include <sys/mount.h>
-#include <sys/socket.h>
-#include <compat/freebsd32/freebsd32.h>
-#include <compat/freebsd32/freebsd32_proto.h>
-#include <compat/freebsd32/freebsd32_signal.h>
-#include <compat/freebsd32/freebsd32_syscall.h>
-#include <compat/freebsd32/freebsd32_util.h>
-
-static struct syscall_helper_data aio32_syscalls[] = {
-       SYSCALL32_INIT_HELPER(freebsd32_aio_return),
-       SYSCALL32_INIT_HELPER(freebsd32_aio_suspend),
-       SYSCALL32_INIT_HELPER(freebsd32_aio_cancel),
-       SYSCALL32_INIT_HELPER(freebsd32_aio_error),
-       SYSCALL32_INIT_HELPER(freebsd32_aio_fsync),
-       SYSCALL32_INIT_HELPER(freebsd32_aio_mlock),
-       SYSCALL32_INIT_HELPER(freebsd32_aio_read),
-       SYSCALL32_INIT_HELPER(freebsd32_aio_write),
-       SYSCALL32_INIT_HELPER(freebsd32_aio_waitcomplete),
-       SYSCALL32_INIT_HELPER(freebsd32_lio_listio),
-       SYSCALL32_INIT_HELPER(freebsd32_oaio_read),
-       SYSCALL32_INIT_HELPER(freebsd32_oaio_write),
-       SYSCALL32_INIT_HELPER(freebsd32_olio_listio),
-       SYSCALL_INIT_LAST
-};
-#endif
-
-DECLARE_MODULE(aio, aio_mod,
-       SI_SUB_VFS, SI_ORDER_ANY);
+DECLARE_MODULE(aio, aio_mod, SI_SUB_VFS, SI_ORDER_ANY);
 MODULE_VERSION(aio, 1);
 
 /*
@@ -422,7 +379,6 @@ MODULE_VERSION(aio, 1);
 static int
 aio_onceonly(void)
 {
-       int error;
 
        exit_tag = EVENTHANDLER_REGISTER(process_exit, aio_proc_rundown, NULL,
            EVENTHANDLER_PRI_ANY);
@@ -447,19 +403,11 @@ aio_onceonly(void)
            NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_NOFREE);
        aiod_lifetime = AIOD_LIFETIME_DEFAULT;
        jobrefid = 1;
-       async_io_version = _POSIX_VERSION;
+       p31b_setcfg(CTL_P1003_1B_ASYNCHRONOUS_IO, _POSIX_ASYNCHRONOUS_IO);
        p31b_setcfg(CTL_P1003_1B_AIO_LISTIO_MAX, AIO_LISTIO_MAX);
        p31b_setcfg(CTL_P1003_1B_AIO_MAX, MAX_AIO_QUEUE);
        p31b_setcfg(CTL_P1003_1B_AIO_PRIO_DELTA_MAX, 0);
 
-       error = syscall_helper_register(aio_syscalls, SY_THR_STATIC_KLD);
-       if (error)
-               return (error);
-#ifdef COMPAT_FREEBSD32
-       error = syscall32_helper_register(aio32_syscalls, SY_THR_STATIC_KLD);
-       if (error)
-               return (error);
-#endif
        return (0);
 }
 
@@ -1340,6 +1288,7 @@ unref:
        return (error);
 }
 
+#ifdef COMPAT_FREEBSD6
 static int
 convert_old_sigevent(struct osigevent *osig, struct sigevent *nsig)
 {
@@ -1379,6 +1328,7 @@ aiocb_copyin_old_sigevent(struct aiocb *
        ojob = (struct oaiocb *)kjob;
        return (convert_old_sigevent(&ojob->aio_sigevent, &kjob->aio_sigevent));
 }
+#endif
 
 static int
 aiocb_copyin(struct aiocb *ujob, struct aiocb *kjob)
@@ -1439,6 +1389,7 @@ static struct aiocb_ops aiocb_ops = {
        .store_aiocb = aiocb_store_aiocb,
 };
 
+#ifdef COMPAT_FREEBSD6
 static struct aiocb_ops aiocb_ops_osigevent = {
        .copyin = aiocb_copyin_old_sigevent,
        .fetch_status = aiocb_fetch_status,
@@ -1448,6 +1399,7 @@ static struct aiocb_ops aiocb_ops_osigev
        .store_kernelinfo = aiocb_store_kernelinfo,
        .store_aiocb = aiocb_store_aiocb,
 };
+#endif
 
 /*
  * Queue a new AIO request.  Choosing either the threaded or direct physio VCHR
@@ -2094,13 +2046,15 @@ sys_aio_error(struct thread *td, struct 
 }
 
 /* syscall - asynchronous read from a file (REALTIME) */
+#ifdef COMPAT_FREEBSD6
 int
-sys_oaio_read(struct thread *td, struct oaio_read_args *uap)
+freebsd6_aio_read(struct thread *td, struct freebsd6_aio_read_args *uap)
 {
 
        return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_READ,
            &aiocb_ops_osigevent));
 }
+#endif
 
 int
 sys_aio_read(struct thread *td, struct aio_read_args *uap)
@@ -2110,13 +2064,15 @@ sys_aio_read(struct thread *td, struct a
 }
 
 /* syscall - asynchronous write to a file (REALTIME) */
+#ifdef COMPAT_FREEBSD6
 int
-sys_oaio_write(struct thread *td, struct oaio_write_args *uap)
+freebsd6_aio_write(struct thread *td, struct freebsd6_aio_write_args *uap)
 {
 
        return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_WRITE,
            &aiocb_ops_osigevent));
 }
+#endif
 
 int
 sys_aio_write(struct thread *td, struct aio_write_args *uap)
@@ -2268,8 +2224,9 @@ kern_lio_listio(struct thread *td, int m
 }
 
 /* syscall - list directed I/O (REALTIME) */
+#ifdef COMPAT_FREEBSD6
 int
-sys_olio_listio(struct thread *td, struct olio_listio_args *uap)
+freebsd6_lio_listio(struct thread *td, struct freebsd6_lio_listio_args *uap)
 {
        struct aiocb **acb_list;
        struct sigevent *sigp, sig;
@@ -2303,6 +2260,7 @@ sys_olio_listio(struct thread *td, struc
        free(acb_list, M_LIO);
        return (error);
 }
+#endif
 
 /* syscall - list directed I/O (REALTIME) */
 int
@@ -2582,6 +2540,13 @@ filt_lio(struct knote *kn, long hint)
 }
 
 #ifdef COMPAT_FREEBSD32
+#include <sys/mount.h>
+#include <sys/socket.h>
+#include <compat/freebsd32/freebsd32.h>
+#include <compat/freebsd32/freebsd32_proto.h>
+#include <compat/freebsd32/freebsd32_signal.h>
+#include <compat/freebsd32/freebsd32_syscall.h>
+#include <compat/freebsd32/freebsd32_util.h>
 
 struct __aiocb_private32 {
        int32_t status;
@@ -2589,6 +2554,7 @@ struct __aiocb_private32 {
        uint32_t kernelinfo;
 };
 
+#ifdef COMPAT_FREEBSD6
 typedef struct oaiocb32 {
        int     aio_fildes;             /* File descriptor */
        uint64_t aio_offset __packed;   /* File offset for I/O */
@@ -2599,6 +2565,7 @@ typedef struct oaiocb32 {
        int     aio_reqprio;            /* Request priority -- ignored */
        struct  __aiocb_private32 _aiocb_private;
 } oaiocb32_t;
+#endif
 
 typedef struct aiocb32 {
        int32_t aio_fildes;             /* File descriptor */
@@ -2613,6 +2580,7 @@ typedef struct aiocb32 {
        struct  sigevent32 aio_sigevent;        /* Signal to deliver */
 } aiocb32_t;
 
+#ifdef COMPAT_FREEBSD6
 static int
 convert_old_sigevent32(struct osigevent32 *osig, struct sigevent *nsig)
 {
@@ -2662,6 +2630,7 @@ aiocb32_copyin_old_sigevent(struct aiocb
        return (convert_old_sigevent32(&job32.aio_sigevent,
            &kjob->aio_sigevent));
 }
+#endif
 
 static int
 aiocb32_copyin(struct aiocb *ujob, struct aiocb *kjob)
@@ -2746,6 +2715,7 @@ static struct aiocb_ops aiocb32_ops = {
        .store_aiocb = aiocb32_store_aiocb,
 };
 
+#ifdef COMPAT_FREEBSD6
 static struct aiocb_ops aiocb32_ops_osigevent = {
        .copyin = aiocb32_copyin_old_sigevent,
        .fetch_status = aiocb32_fetch_status,
@@ -2755,6 +2725,7 @@ static struct aiocb_ops aiocb32_ops_osig
        .store_kernelinfo = aiocb32_store_kernelinfo,
        .store_aiocb = aiocb32_store_aiocb,
 };
+#endif
 
 int
 freebsd32_aio_return(struct thread *td, struct freebsd32_aio_return_args *uap)
@@ -2800,26 +2771,22 @@ freebsd32_aio_suspend(struct thread *td,
 }
 
 int
-freebsd32_aio_cancel(struct thread *td, struct freebsd32_aio_cancel_args *uap)
-{
-
-       return (sys_aio_cancel(td, (struct aio_cancel_args *)uap));
-}
-
-int
 freebsd32_aio_error(struct thread *td, struct freebsd32_aio_error_args *uap)
 {
 
        return (kern_aio_error(td, (struct aiocb *)uap->aiocbp, &aiocb32_ops));
 }
 
+#ifdef COMPAT_FREEBSD6
 int
-freebsd32_oaio_read(struct thread *td, struct freebsd32_oaio_read_args *uap)
+freebsd6_freebsd32_aio_read(struct thread *td,
+    struct freebsd6_freebsd32_aio_read_args *uap)
 {
 
        return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_READ,
            &aiocb32_ops_osigevent));
 }
+#endif
 
 int
 freebsd32_aio_read(struct thread *td, struct freebsd32_aio_read_args *uap)
@@ -2829,13 +2796,16 @@ freebsd32_aio_read(struct thread *td, st
            &aiocb32_ops));
 }
 
+#ifdef COMPAT_FREEBSD6
 int
-freebsd32_oaio_write(struct thread *td, struct freebsd32_oaio_write_args *uap)
+freebsd6_freebsd32_aio_write(struct thread *td,
+    struct freebsd6_freebsd32_aio_write_args *uap)
 {
 
        return (aio_aqueue(td, (struct aiocb *)uap->aiocbp, NULL, LIO_WRITE,
            &aiocb32_ops_osigevent));
 }
+#endif
 
 int
 freebsd32_aio_write(struct thread *td, struct freebsd32_aio_write_args *uap)
@@ -2884,8 +2854,10 @@ freebsd32_aio_fsync(struct thread *td, s
            &aiocb32_ops));
 }
 
+#ifdef COMPAT_FREEBSD6
 int
-freebsd32_olio_listio(struct thread *td, struct freebsd32_olio_listio_args 
*uap)
+freebsd6_freebsd32_lio_listio(struct thread *td,
+    struct freebsd6_freebsd32_lio_listio_args *uap)
 {
        struct aiocb **acb_list;
        struct sigevent *sigp, sig;
@@ -2928,6 +2900,7 @@ freebsd32_olio_listio(struct thread *td,
        free(acb_list, M_LIO);
        return (error);
 }
+#endif
 
 int
 freebsd32_lio_listio(struct thread *td, struct freebsd32_lio_listio_args *uap)

Modified: head/sys/kern/vfs_default.c
==============================================================================
--- head/sys/kern/vfs_default.c Wed Mar  9 18:45:41 2016        (r296571)
+++ head/sys/kern/vfs_default.c Wed Mar  9 19:05:11 2016        (r296572)
@@ -472,6 +472,9 @@ vop_stdpathconf(ap)
 {
 
        switch (ap->a_name) {
+               case _PC_ASYNC_IO:
+                       *ap->a_retval = _POSIX_ASYNCHRONOUS_IO;
+                       return (0);
                case _PC_NAME_MAX:
                        *ap->a_retval = NAME_MAX;
                        return (0);

Modified: head/sys/kern/vfs_syscalls.c
==============================================================================
--- head/sys/kern/vfs_syscalls.c        Wed Mar  9 18:45:41 2016        
(r296571)
+++ head/sys/kern/vfs_syscalls.c        Wed Mar  9 19:05:11 2016        
(r296572)
@@ -106,14 +106,6 @@ static int vn_access(struct vnode *vp, i
     struct thread *td);
 
 /*
- * The module initialization routine for POSIX asynchronous I/O will
- * set this to the version of AIO that it implements.  (Zero means
- * that it is not implemented.)  This value is used here by pathconf()
- * and in kern_descrip.c by fpathconf().
- */
-int async_io_version;
-
-/*
  * Sync each mounted filesystem.
  */
 #ifndef _SYS_SYSPROTO_H_
@@ -2347,11 +2339,7 @@ kern_pathconf(struct thread *td, char *p
                return (error);
        NDFREE(&nd, NDF_ONLY_PNBUF);
 
-       /* If asynchronous I/O is available, it works for all files. */
-       if (name == _PC_ASYNC_IO)
-               td->td_retval[0] = async_io_version;
-       else
-               error = VOP_PATHCONF(nd.ni_vp, name, td->td_retval);
+       error = VOP_PATHCONF(nd.ni_vp, name, td->td_retval);
        vput(nd.ni_vp);
        return (error);
 }

Modified: head/sys/sys/signalvar.h
==============================================================================
--- head/sys/sys/signalvar.h    Wed Mar  9 18:45:41 2016        (r296571)
+++ head/sys/sys/signalvar.h    Wed Mar  9 19:05:11 2016        (r296572)
@@ -199,6 +199,7 @@ __sigseteq(sigset_t *set1, sigset_t *set
        return (1);
 }
 
+#ifdef COMPAT_FREEBSD6
 struct osigevent {
        int     sigev_notify;           /* Notification type */
        union {
@@ -207,6 +208,7 @@ struct osigevent {
        } __sigev_u;
        union sigval sigev_value;       /* Signal value */
 };
+#endif
 
 typedef struct ksiginfo {
        TAILQ_ENTRY(ksiginfo)   ksi_link;

Modified: head/sys/sys/unistd.h
==============================================================================
--- head/sys/sys/unistd.h       Wed Mar  9 18:45:41 2016        (r296571)
+++ head/sys/sys/unistd.h       Wed Mar  9 19:05:11 2016        (r296572)
@@ -50,7 +50,7 @@
  * returns -1, the functions may be stubbed out.
  */
 #define        _POSIX_ADVISORY_INFO            200112L
-#define        _POSIX_ASYNCHRONOUS_IO          0
+#define        _POSIX_ASYNCHRONOUS_IO          200112L
 #define        _POSIX_CHOWN_RESTRICTED         1
 #define        _POSIX_CLOCK_SELECTION          (-1)
 #define        _POSIX_CPUTIME                  200112L

Modified: head/sys/sys/vnode.h
==============================================================================
--- head/sys/sys/vnode.h        Wed Mar  9 18:45:41 2016        (r296571)
+++ head/sys/sys/vnode.h        Wed Mar  9 19:05:11 2016        (r296572)
@@ -422,7 +422,6 @@ extern int          vttoif_tab[];
  */
 extern struct vnode *rootvnode;        /* root (i.e. "/") vnode */
 extern struct mount *rootdevmp;        /* "/dev" mount */
-extern int async_io_version;           /* 0 or POSIX version of AIO i'face */
 extern int desiredvnodes;              /* number of vnodes desired */
 extern struct uma_zone *namei_zone;
 extern struct vattr va_null;           /* predefined null vattr structure */
_______________________________________________
[email protected] mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to