Author: rdivacky
Date: Wed Sep 18 18:48:33 2013
New Revision: 255675
URL: http://svnweb.freebsd.org/changeset/base/255675

Log:
  Revert r255672, it has some serious flaws, leaking file references etc.
  
  Approved by:  re (delphij)

Deleted:
  head/sys/compat/linux/linux_epoll.c
  head/sys/compat/linux/linux_epoll.h
Modified:
  head/sys/amd64/linux32/linux32_dummy.c
  head/sys/amd64/linux32/syscalls.master
  head/sys/conf/files.amd64
  head/sys/conf/files.i386
  head/sys/conf/files.pc98
  head/sys/i386/linux/linux_dummy.c
  head/sys/i386/linux/syscalls.master
  head/sys/kern/kern_event.c
  head/sys/modules/linux/Makefile
  head/sys/sys/event.h
  head/sys/sys/file.h
  head/sys/sys/syscallsubr.h

Modified: head/sys/amd64/linux32/linux32_dummy.c
==============================================================================
--- head/sys/amd64/linux32/linux32_dummy.c      Wed Sep 18 18:02:01 2013        
(r255674)
+++ head/sys/amd64/linux32/linux32_dummy.c      Wed Sep 18 18:48:33 2013        
(r255675)
@@ -70,6 +70,9 @@ DUMMY(pivot_root);
 DUMMY(mincore);
 DUMMY(ptrace);
 DUMMY(lookup_dcookie);
+DUMMY(epoll_create);
+DUMMY(epoll_ctl);
+DUMMY(epoll_wait);
 DUMMY(remap_file_pages);
 DUMMY(timer_create);
 DUMMY(timer_settime);
@@ -126,6 +129,7 @@ DUMMY(timerfd_gettime);
 /* linux 2.6.27: */
 DUMMY(signalfd4);
 DUMMY(eventfd2);
+DUMMY(epoll_create1);
 DUMMY(dup3);
 DUMMY(inotify_init1);
 /* linux 2.6.30: */

Modified: head/sys/amd64/linux32/syscalls.master
==============================================================================
--- head/sys/amd64/linux32/syscalls.master      Wed Sep 18 18:02:01 2013        
(r255674)
+++ head/sys/amd64/linux32/syscalls.master      Wed Sep 18 18:48:33 2013        
(r255675)
@@ -430,11 +430,9 @@
 251    AUE_NULL        UNIMPL
 252    AUE_EXIT        STD     { int linux_exit_group(int error_code); }
 253    AUE_NULL        STD     { int linux_lookup_dcookie(void); }
-254    AUE_NULL        STD     { int linux_epoll_create(l_int size); }
-255    AUE_NULL        STD     { int linux_epoll_ctl(l_int epfd, l_int op, 
l_int fd, \
-                                       struct linux_epoll_event *event); }
-256    AUE_NULL        STD     { int linux_epoll_wait(l_int epfd, struct 
linux_epoll_event *events, \
-                                       l_int maxevents, l_int timeout); }
+254    AUE_NULL        STD     { int linux_epoll_create(void); }
+255    AUE_NULL        STD     { int linux_epoll_ctl(void); }
+256    AUE_NULL        STD     { int linux_epoll_wait(void); }
 257    AUE_NULL        STD     { int linux_remap_file_pages(void); }
 258    AUE_NULL        STD     { int linux_set_tid_address(int *tidptr); }
 259    AUE_NULL        STD     { int linux_timer_create(void); }
@@ -536,7 +534,7 @@
 ; linux 2.6.27:
 327    AUE_NULL        STD     { int linux_signalfd4(void); }
 328    AUE_NULL        STD     { int linux_eventfd2(void); }
-329    AUE_NULL        STD     { int linux_epoll_create1(l_int flags); }
+329    AUE_NULL        STD     { int linux_epoll_create1(void); }
 330    AUE_NULL        STD     { int linux_dup3(void); }
 331    AUE_NULL        STD     { int linux_pipe2(l_int *pipefds, l_int flags); 
}
 332    AUE_NULL        STD     { int linux_inotify_init1(void); }

Modified: head/sys/conf/files.amd64
==============================================================================
--- head/sys/conf/files.amd64   Wed Sep 18 18:02:01 2013        (r255674)
+++ head/sys/conf/files.amd64   Wed Sep 18 18:48:33 2013        (r255675)
@@ -467,7 +467,6 @@ amd64/linux32/linux32_support.s     optional
        dependency      "linux32_assym.h"
 amd64/linux32/linux32_sysent.c optional        compat_linux32
 amd64/linux32/linux32_sysvec.c optional        compat_linux32
-compat/linux/linux_epoll.c     optional        compat_linux32
 compat/linux/linux_emul.c      optional        compat_linux32
 compat/linux/linux_file.c      optional        compat_linux32
 compat/linux/linux_fork.c      optional        compat_linux32

Modified: head/sys/conf/files.i386
==============================================================================
--- head/sys/conf/files.i386    Wed Sep 18 18:02:01 2013        (r255674)
+++ head/sys/conf/files.i386    Wed Sep 18 18:48:33 2013        (r255675)
@@ -80,7 +80,6 @@ hptrr_lib.o                   optional        hptrr           
        \
 cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S       
optional zfs compile-with "${ZFS_S}"
 compat/linprocfs/linprocfs.c   optional linprocfs
 compat/linsysfs/linsysfs.c     optional linsysfs
-compat/linux/linux_epoll.c     optional compat_linux
 compat/linux/linux_emul.c      optional compat_linux
 compat/linux/linux_file.c      optional compat_linux
 compat/linux/linux_fork.c      optional compat_linux

Modified: head/sys/conf/files.pc98
==============================================================================
--- head/sys/conf/files.pc98    Wed Sep 18 18:02:01 2013        (r255674)
+++ head/sys/conf/files.pc98    Wed Sep 18 18:48:33 2013        (r255675)
@@ -41,7 +41,6 @@ ukbdmap.h                     optional        
ukbd_dflt_keymap        \
 cddl/contrib/opensolaris/common/atomic/i386/opensolaris_atomic.S       
optional zfs compile-with "${ZFS_S}"
 compat/linprocfs/linprocfs.c   optional linprocfs
 compat/linsysfs/linsysfs.c     optional linsysfs
-compat/linux/linux_epoll.c     optional compat_linux
 compat/linux/linux_emul.c      optional compat_linux
 compat/linux/linux_file.c      optional compat_linux
 compat/linux/linux_fork.c      optional compat_linux

Modified: head/sys/i386/linux/linux_dummy.c
==============================================================================
--- head/sys/i386/linux/linux_dummy.c   Wed Sep 18 18:02:01 2013        
(r255674)
+++ head/sys/i386/linux/linux_dummy.c   Wed Sep 18 18:48:33 2013        
(r255675)
@@ -72,6 +72,9 @@ DUMMY(setfsgid);
 DUMMY(pivot_root);
 DUMMY(mincore);
 DUMMY(lookup_dcookie);
+DUMMY(epoll_create);
+DUMMY(epoll_ctl);
+DUMMY(epoll_wait);
 DUMMY(remap_file_pages);
 DUMMY(fstatfs64);
 DUMMY(mbind);
@@ -117,6 +120,7 @@ DUMMY(timerfd_gettime);
 /* linux 2.6.27: */
 DUMMY(signalfd4);
 DUMMY(eventfd2);
+DUMMY(epoll_create1);
 DUMMY(dup3);
 DUMMY(inotify_init1);
 /* linux 2.6.30: */

Modified: head/sys/i386/linux/syscalls.master
==============================================================================
--- head/sys/i386/linux/syscalls.master Wed Sep 18 18:02:01 2013        
(r255674)
+++ head/sys/i386/linux/syscalls.master Wed Sep 18 18:48:33 2013        
(r255675)
@@ -432,11 +432,9 @@
 251    AUE_NULL        UNIMPL
 252    AUE_EXIT        STD     { int linux_exit_group(int error_code); }
 253    AUE_NULL        STD     { int linux_lookup_dcookie(void); }
-254    AUE_NULL        STD     { int linux_epoll_create(l_int size); }
-255    AUE_NULL        STD     { int linux_epoll_ctl(l_int epfd, l_int op, 
l_int fd, \
-                                       struct linux_epoll_event *event); }
-256    AUE_NULL        STD     { int linux_epoll_wait(l_int epfd, struct 
linux_epoll_event *events, \
-                                       l_int maxevents, l_int timeout); }
+254    AUE_NULL        STD     { int linux_epoll_create(void); }
+255    AUE_NULL        STD     { int linux_epoll_ctl(void); }
+256    AUE_NULL        STD     { int linux_epoll_wait(void); }
 257    AUE_NULL        STD     { int linux_remap_file_pages(void); }
 258    AUE_NULL        STD     { int linux_set_tid_address(int *tidptr); }
 259    AUE_NULL        STD     { int linux_timer_create(clockid_t clock_id, \
@@ -546,7 +544,7 @@
 ; linux 2.6.27:
 327    AUE_NULL        STD     { int linux_signalfd4(void); }
 328    AUE_NULL        STD     { int linux_eventfd2(void); }
-329    AUE_NULL        STD     { int linux_epoll_create1(l_int flags); }
+329    AUE_NULL        STD     { int linux_epoll_create1(void); }
 330    AUE_NULL        STD     { int linux_dup3(void); }
 331    AUE_NULL        STD     { int linux_pipe2(l_int *pipefds, l_int flags); 
}
 332    AUE_NULL        STD     { int linux_inotify_init1(void); }

Modified: head/sys/kern/kern_event.c
==============================================================================
--- head/sys/kern/kern_event.c  Wed Sep 18 18:02:01 2013        (r255674)
+++ head/sys/kern/kern_event.c  Wed Sep 18 18:48:33 2013        (r255675)
@@ -107,7 +107,16 @@ static void        kqueue_wakeup(struct kqueue
 static struct filterops *kqueue_fo_find(int filt);
 static void    kqueue_fo_release(int filt);
 
-struct fileops kqueueops = {
+static fo_rdwr_t       kqueue_read;
+static fo_rdwr_t       kqueue_write;
+static fo_truncate_t   kqueue_truncate;
+static fo_ioctl_t      kqueue_ioctl;
+static fo_poll_t       kqueue_poll;
+static fo_kqfilter_t   kqueue_kqfilter;
+static fo_stat_t       kqueue_stat;
+static fo_close_t      kqueue_close;
+
+static struct fileops kqueueops = {
        .fo_read = kqueue_read,
        .fo_write = kqueue_write,
        .fo_truncate = kqueue_truncate,
@@ -294,7 +303,7 @@ filt_fileattach(struct knote *kn)
 }
 
 /*ARGSUSED*/
-int
+static int
 kqueue_kqfilter(struct file *fp, struct knote *kn)
 {
        struct kqueue *kq = kn->kn_fp->f_data;
@@ -679,7 +688,34 @@ filt_usertouch(struct knote *kn, struct 
 int
 sys_kqueue(struct thread *td, struct kqueue_args *uap)
 {
-       return (kern_kqueue(td));
+       struct filedesc *fdp;
+       struct kqueue *kq;
+       struct file *fp;
+       int fd, error;
+
+       fdp = td->td_proc->p_fd;
+       error = falloc(td, &fp, &fd, 0);
+       if (error)
+               goto done2;
+
+       /* An extra reference on `fp' has been held for us by falloc(). */
+       kq = malloc(sizeof *kq, M_KQUEUE, M_WAITOK | M_ZERO);
+       mtx_init(&kq->kq_lock, "kqueue", NULL, MTX_DEF|MTX_DUPOK);
+       TAILQ_INIT(&kq->kq_head);
+       kq->kq_fdp = fdp;
+       knlist_init_mtx(&kq->kq_sel.si_note, &kq->kq_lock);
+       TASK_INIT(&kq->kq_task, 0, kqueue_task, kq);
+
+       FILEDESC_XLOCK(fdp);
+       TAILQ_INSERT_HEAD(&fdp->fd_kqlist, kq, kq_list);
+       FILEDESC_XUNLOCK(fdp);
+
+       finit(fp, FREAD | FWRITE, DTYPE_KQUEUE, kq, &kqueueops);
+       fdrop(fp, td);
+
+       td->td_retval[0] = fd;
+done2:
+       return (error);
 }
 
 #ifndef _SYS_SYSPROTO_H_
@@ -781,75 +817,19 @@ kevent_copyin(void *arg, struct kevent *
 }
 
 int
-kern_kqueue(struct thread *td)
-{
-       struct file *fp;
-       int error;
-
-       error = kern_kqueue_locked(td, &fp);
-
-       fdrop(fp, td);
-       return (error);
-}
-
-int
-kern_kqueue_locked(struct thread *td, struct file **fpp)
-{
-       struct filedesc *fdp;
-       struct kqueue *kq;
-       struct file *fp;
-       int fd, error;
-
-       fdp = td->td_proc->p_fd;
-       error = falloc(td, &fp, &fd, 0);
-       if (error)
-               return (error);
-
-       /* An extra reference on `fp' has been held for us by falloc(). */
-       kq = malloc(sizeof *kq, M_KQUEUE, M_WAITOK | M_ZERO);
-       mtx_init(&kq->kq_lock, "kqueue", NULL, MTX_DEF|MTX_DUPOK);
-       TAILQ_INIT(&kq->kq_head);
-       kq->kq_fdp = fdp;
-       knlist_init_mtx(&kq->kq_sel.si_note, &kq->kq_lock);
-       TASK_INIT(&kq->kq_task, 0, kqueue_task, kq);
-
-       FILEDESC_XLOCK(fdp);
-       TAILQ_INSERT_HEAD(&fdp->fd_kqlist, kq, kq_list);
-       FILEDESC_XUNLOCK(fdp);
-
-       finit(fp, FREAD | FWRITE, DTYPE_KQUEUE, kq, &kqueueops);
-
-       td->td_retval[0] = fd;
-       *fpp = fp;
-       return (0);
-}
-
-int
 kern_kevent(struct thread *td, int fd, int nchanges, int nevents,
     struct kevent_copyops *k_ops, const struct timespec *timeout)
 {
-       struct file *fp;
-       cap_rights_t rights;
-       int error;
-
-       if ((error = fget(td, fd, cap_rights_init(&rights, CAP_POST_EVENT), 
&fp)) != 0)
-               return (error);
-
-       error = kern_kevent_locked(td, fp, nchanges, nevents, k_ops, timeout);
-
-       fdrop(fp, td);
-       return (error);
-}
-
-int
-kern_kevent_locked(struct thread *td, struct file *fp, int nchanges, int 
nevents,
-    struct kevent_copyops *k_ops, const struct timespec *timeout)
-{
        struct kevent keva[KQ_NEVENTS];
        struct kevent *kevp, *changes;
        struct kqueue *kq;
+       struct file *fp;
+       cap_rights_t rights;
        int i, n, nerrors, error;
 
+       error = fget(td, fd, cap_rights_init(&rights, CAP_POST_EVENT), &fp);
+       if (error != 0)
+               return (error);
        if ((error = kqueue_acquire(fp, &kq)) != 0)
                goto done_norel;
 
@@ -892,6 +872,7 @@ kern_kevent_locked(struct thread *td, st
 done:
        kqueue_release(kq, 0);
 done_norel:
+       fdrop(fp, td);
        return (error);
 }
 
@@ -1545,7 +1526,7 @@ done_nl:
  * This could be expanded to call kqueue_scan, if desired.
  */
 /*ARGSUSED*/
-int
+static int
 kqueue_read(struct file *fp, struct uio *uio, struct ucred *active_cred,
        int flags, struct thread *td)
 {
@@ -1553,7 +1534,7 @@ kqueue_read(struct file *fp, struct uio 
 }
 
 /*ARGSUSED*/
-int
+static int
 kqueue_write(struct file *fp, struct uio *uio, struct ucred *active_cred,
         int flags, struct thread *td)
 {
@@ -1561,7 +1542,7 @@ kqueue_write(struct file *fp, struct uio
 }
 
 /*ARGSUSED*/
-int
+static int
 kqueue_truncate(struct file *fp, off_t length, struct ucred *active_cred,
        struct thread *td)
 {
@@ -1570,7 +1551,7 @@ kqueue_truncate(struct file *fp, off_t l
 }
 
 /*ARGSUSED*/
-int
+static int
 kqueue_ioctl(struct file *fp, u_long cmd, void *data,
        struct ucred *active_cred, struct thread *td)
 {
@@ -1618,7 +1599,7 @@ kqueue_ioctl(struct file *fp, u_long cmd
 }
 
 /*ARGSUSED*/
-int
+static int
 kqueue_poll(struct file *fp, int events, struct ucred *active_cred,
        struct thread *td)
 {
@@ -1645,7 +1626,7 @@ kqueue_poll(struct file *fp, int events,
 }
 
 /*ARGSUSED*/
-int
+static int
 kqueue_stat(struct file *fp, struct stat *st, struct ucred *active_cred,
        struct thread *td)
 {
@@ -1663,7 +1644,7 @@ kqueue_stat(struct file *fp, struct stat
 }
 
 /*ARGSUSED*/
-int
+static int
 kqueue_close(struct file *fp, struct thread *td)
 {
        struct kqueue *kq = fp->f_data;

Modified: head/sys/modules/linux/Makefile
==============================================================================
--- head/sys/modules/linux/Makefile     Wed Sep 18 18:02:01 2013        
(r255674)
+++ head/sys/modules/linux/Makefile     Wed Sep 18 18:48:33 2013        
(r255675)
@@ -9,7 +9,7 @@ CFLAGS+=-DCOMPAT_FREEBSD32 -DCOMPAT_LINU
 
 KMOD=  linux
 SRCS=  linux_fork.c linux${SFX}_dummy.c linux_emul.c linux_file.c \
-       linux_futex.c linux_getcwd.c linux_ioctl.c linux_ipc.c linux_epoll.c \
+       linux_futex.c linux_getcwd.c linux_ioctl.c linux_ipc.c \
        linux${SFX}_machdep.c linux_mib.c linux_misc.c linux_signal.c \
        linux_socket.c linux_stats.c linux_sysctl.c linux${SFX}_sysent.c \
        linux${SFX}_sysvec.c linux_uid16.c linux_util.c linux_time.c \

Modified: head/sys/sys/event.h
==============================================================================
--- head/sys/sys/event.h        Wed Sep 18 18:02:01 2013        (r255674)
+++ head/sys/sys/event.h        Wed Sep 18 18:48:33 2013        (r255675)
@@ -236,9 +236,6 @@ struct proc;
 struct knlist;
 struct mtx;
 struct rwlock;
-struct uio;
-struct stat;
-struct ucred;
 
 extern void    knote(struct knlist *list, long hint, int lockflags);
 extern void    knote_fork(struct knlist *list, int pid);
@@ -264,21 +261,6 @@ extern int         kqfd_register(int fd, struct
 extern int     kqueue_add_filteropts(int filt, struct filterops *filtops);
 extern int     kqueue_del_filteropts(int filt);
 
-int kqueue_read(struct file *fp, struct uio *uio, struct ucred *active_cred,
-       int flags, struct thread *td);
-int kqueue_write(struct file *fp, struct uio *uio, struct ucred *active_cred,
-        int flags, struct thread *td);
-int kqueue_truncate(struct file *fp, off_t length, struct ucred *active_cred,
-       struct thread *td);
-int kqueue_ioctl(struct file *fp, u_long cmd, void *data,
-       struct ucred *active_cred, struct thread *td);
-int kqueue_poll(struct file *fp, int events, struct ucred *active_cred,
-       struct thread *td);
-int kqueue_kqfilter(struct file *fp, struct knote *kn);
-int kqueue_stat(struct file *fp, struct stat *st, struct ucred *active_cred,
-       struct thread *td);
-int kqueue_close(struct file *fp, struct thread *td);
-
 #else  /* !_KERNEL */
 
 #include <sys/cdefs.h>

Modified: head/sys/sys/file.h
==============================================================================
--- head/sys/sys/file.h Wed Sep 18 18:02:01 2013        (r255674)
+++ head/sys/sys/file.h Wed Sep 18 18:48:33 2013        (r255675)
@@ -169,8 +169,6 @@ struct file {
        union {
                struct cdev_privdata *fvn_cdevpriv;
                                        /* (d) Private data for the cdev. */
-               void    *fvn_epollpriv;
-                                       /* (d) Private data for the epoll. */
                struct fadvise_info *fvn_advice;
        } f_vnun;
        /*

Modified: head/sys/sys/syscallsubr.h
==============================================================================
--- head/sys/sys/syscallsubr.h  Wed Sep 18 18:02:01 2013        (r255674)
+++ head/sys/sys/syscallsubr.h  Wed Sep 18 18:48:33 2013        (r255675)
@@ -121,13 +121,8 @@ int        kern_ioctl(struct thread *td, int fd
 int    kern_jail(struct thread *td, struct jail *j);
 int    kern_jail_get(struct thread *td, struct uio *options, int flags);
 int    kern_jail_set(struct thread *td, struct uio *options, int flags);
-int    kern_kqueue(struct thread *td);
-int    kern_kqueue_locked(struct thread *td, struct file **fpp);
 int    kern_kevent(struct thread *td, int fd, int nchanges, int nevents,
            struct kevent_copyops *k_ops, const struct timespec *timeout);
-int    kern_kevent_locked(struct thread *td, struct file *fp, int nchanges,
-           int nevents,
-           struct kevent_copyops *k_ops, const struct timespec *timeout);
 int    kern_kldload(struct thread *td, const char *file, int *fileid);
 int    kern_kldstat(struct thread *td, int fileid, struct kld_file_stat *stat);
 int    kern_kldunload(struct thread *td, int fileid, int flags);
@@ -253,8 +248,6 @@ int kern_utimes(struct thread *td, char 
            struct timeval *tptr, enum uio_seg tptrseg);
 int    kern_utimesat(struct thread *td, int fd, char *path,
            enum uio_seg pathseg, struct timeval *tptr, enum uio_seg tptrseg);
-int    kern_utimensat(struct thread *td, int fd, char *path,
-           enum uio_seg pathseg, struct timespec *tptr, enum uio_seg tptrseg);
 int    kern_wait(struct thread *td, pid_t pid, int *status, int options,
            struct rusage *rup);
 int    kern_wait6(struct thread *td, enum idtype idtype, id_t id, int *status,
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to