Author: kib
Date: Fri Sep 20 07:45:37 2013
New Revision: 255729
URL: http://svnweb.freebsd.org/changeset/base/255729

Log:
  MFC r255527:
  Use TAILQ instead of STAILQ for kqeueue filedescriptors to ensure constant
  time removal on kqueue close.

Modified:
  stable/9/sys/kern/kern_event.c
  stable/9/sys/sys/event.h
  stable/9/sys/sys/eventvar.h
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/sys/   (props changed)

Modified: stable/9/sys/kern/kern_event.c
==============================================================================
--- stable/9/sys/kern/kern_event.c      Fri Sep 20 07:35:08 2013        
(r255728)
+++ stable/9/sys/kern/kern_event.c      Fri Sep 20 07:45:37 2013        
(r255729)
@@ -707,7 +707,7 @@ sys_kqueue(struct thread *td, struct kqu
        TASK_INIT(&kq->kq_task, 0, kqueue_task, kq);
 
        FILEDESC_XLOCK(fdp);
-       SLIST_INSERT_HEAD(&fdp->fd_kqlist, kq, kq_list);
+       TAILQ_INSERT_HEAD(&fdp->fd_kqlist, kq, kq_list);
        FILEDESC_XUNLOCK(fdp);
 
        finit(fp, FREAD | FWRITE, DTYPE_KQUEUE, kq, &kqueueops);
@@ -1708,7 +1708,7 @@ kqueue_close(struct file *fp, struct thr
        KQ_UNLOCK(kq);
 
        FILEDESC_XLOCK(fdp);
-       SLIST_REMOVE(&fdp->fd_kqlist, kq, kqueue, kq_list);
+       TAILQ_REMOVE(&fdp->fd_kqlist, kq, kq_list);
        FILEDESC_XUNLOCK(fdp);
 
        seldrain(&kq->kq_sel);
@@ -2044,7 +2044,7 @@ knote_fdclose(struct thread *td, int fd)
         * We shouldn't have to worry about new kevents appearing on fd
         * since filedesc is locked.
         */
-       SLIST_FOREACH(kq, &fdp->fd_kqlist, kq_list) {
+       TAILQ_FOREACH(kq, &fdp->fd_kqlist, kq_list) {
                KQ_LOCK(kq);
 
 again:

Modified: stable/9/sys/sys/event.h
==============================================================================
--- stable/9/sys/sys/event.h    Fri Sep 20 07:35:08 2013        (r255728)
+++ stable/9/sys/sys/event.h    Fri Sep 20 07:45:37 2013        (r255729)
@@ -134,7 +134,7 @@ struct kevent {
 struct knote;
 SLIST_HEAD(klist, knote);
 struct kqueue;
-SLIST_HEAD(kqlist, kqueue);
+TAILQ_HEAD(kqlist, kqueue);
 struct knlist {
        struct  klist   kl_list;
        void    (*kl_lock)(void *);     /* lock function */

Modified: stable/9/sys/sys/eventvar.h
==============================================================================
--- stable/9/sys/sys/eventvar.h Fri Sep 20 07:35:08 2013        (r255728)
+++ stable/9/sys/sys/eventvar.h Fri Sep 20 07:45:37 2013        (r255729)
@@ -41,7 +41,7 @@
 struct kqueue {
        struct          mtx kq_lock;
        int             kq_refcnt;
-       SLIST_ENTRY(kqueue)     kq_list;
+       TAILQ_ENTRY(kqueue)     kq_list;
        TAILQ_HEAD(, knote)     kq_head;        /* list of pending event */
        int             kq_count;               /* number of pending events */
        struct          selinfo kq_sel;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-stable-9
To unsubscribe, send any mail to "[email protected]"

Reply via email to