Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys lock all uses of uidhash. provide macros to lock and unl...



details:   https://anonhg.NetBSD.org/src/rev/9f688cc2bc81
branches:  trunk
changeset: 580803:9f688cc2bc81
user:      christos <christos%NetBSD.org@localhost>
date:      Mon May 09 11:10:07 2005 +0000

description:
lock all uses of uidhash. provide macros to lock and unlock. based on more
discussions with yamt.

diffstat:

 sys/kern/kern_resource.c |  18 +++++++++---------
 sys/kern/vfs_lockf.c     |  15 +++++++++------
 sys/sys/resourcevar.h    |   5 ++++-
 3 files changed, 22 insertions(+), 16 deletions(-)

diffs (134 lines):

diff -r b141a5cec1f8 -r 9f688cc2bc81 sys/kern/kern_resource.c
--- a/sys/kern/kern_resource.c  Mon May 09 06:58:41 2005 +0000
+++ b/sys/kern/kern_resource.c  Mon May 09 11:10:07 2005 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: kern_resource.c,v 1.95 2005/05/09 03:27:21 christos Exp $      */
+/*     $NetBSD: kern_resource.c,v 1.96 2005/05/09 11:10:07 christos Exp $      */
 
 /*-
  * Copyright (c) 1982, 1986, 1991, 1993
@@ -37,7 +37,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.95 2005/05/09 03:27:21 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: kern_resource.c,v 1.96 2005/05/09 11:10:07 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -933,15 +933,16 @@
 chgproccnt(uid_t uid, int diff)
 {
        struct uidinfo *uip;
+       int s;
 
        if (diff == 0)
                return 0;
 
        uip = uid_find(uid);
-       simple_lock(&uip->ui_slock);
+       UILOCK(uip, s);
        uip->ui_proccnt += diff;
        KASSERT(uip->ui_proccnt >= 0);
-       simple_unlock(&uip->ui_slock);
+       UIUNLOCK(uip, s);
        return uip->ui_proccnt;
 }
 
@@ -949,19 +950,18 @@
 chgsbsize(struct uidinfo *uip, u_long *hiwat, u_long to, rlim_t max)
 {
        rlim_t nsb;
-       int s = splsoftnet();
+       int s;
 
-       simple_lock(&uip->ui_slock);
+       UILOCK(uip, s);
        nsb = uip->ui_sbsize + to - *hiwat;
        if (to > *hiwat && nsb > max) {
-               simple_unlock(&uip->ui_slock);
+               UIUNLOCK(uip, s);
                splx(s);
                return 0;
        }
        *hiwat = to;
        uip->ui_sbsize = nsb;
        KASSERT(uip->ui_sbsize >= 0);
-       simple_unlock(&uip->ui_slock);
-       splx(s);
+       UIUNLOCK(uip, s);
        return 1;
 }
diff -r b141a5cec1f8 -r 9f688cc2bc81 sys/kern/vfs_lockf.c
--- a/sys/kern/vfs_lockf.c      Mon May 09 06:58:41 2005 +0000
+++ b/sys/kern/vfs_lockf.c      Mon May 09 11:10:07 2005 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: vfs_lockf.c,v 1.40 2005/05/07 17:42:09 christos Exp $  */
+/*     $NetBSD: vfs_lockf.c,v 1.41 2005/05/09 11:10:07 christos Exp $  */
 
 /*
  * Copyright (c) 1982, 1986, 1989, 1993
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: vfs_lockf.c,v 1.40 2005/05/07 17:42:09 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: vfs_lockf.c,v 1.41 2005/05/09 11:10:07 christos Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -116,16 +116,17 @@
 {
        struct uidinfo *uip;
        struct lockf *lock;
+       int s;
 
        uip = uid_find(uid);
-       simple_lock(&uip->ui_slock);
+       UILOCK(uip, s);
        if (uid && allowfail && uip->ui_lockcnt >
            (allowfail == 1 ? maxlocksperuid : (maxlocksperuid * 2))) {
-               simple_unlock(&uip->ui_slock);
+               UIUNLOCK(uip, s);
                return NULL;
        }
        uip->ui_lockcnt++;
-       simple_unlock(&uip->ui_slock);
+       UIUNLOCK(uip, s);
        lock = pool_get(&lockfpool, PR_WAITOK);
        lock->lf_uid = uid;
        return lock;
@@ -135,11 +136,13 @@
 lf_free(struct lockf *lock)
 {
        struct uidinfo *uip;
+       int s;
 
        uip = uid_find(lock->lf_uid);
-       simple_lock(&uip->ui_slock);
+       UILOCK(uip, s);
        uip->ui_lockcnt--;
        simple_unlock(&uip->ui_slock);
+       UIUNLOCK(uip, s);
        pool_put(&lockfpool, lock);
 }
 
diff -r b141a5cec1f8 -r 9f688cc2bc81 sys/sys/resourcevar.h
--- a/sys/sys/resourcevar.h     Mon May 09 06:58:41 2005 +0000
+++ b/sys/sys/resourcevar.h     Mon May 09 11:10:07 2005 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: resourcevar.h,v 1.26 2005/05/07 17:42:09 christos Exp $        */
+/*     $NetBSD: resourcevar.h,v 1.27 2005/05/09 11:10:07 christos Exp $        */
 
 /*
  * Copyright (c) 1991, 1993
@@ -99,6 +99,9 @@
 
 };
 #define        UIHASH(uid)     (&uihashtbl[(uid) & uihash])
+#define UILOCK(uip, s)         s = splsoftnet(), simple_lock(&uip->ui_slock)
+#define UIUNLOCK(uip, s)       simple_lock(&uip->ui_slock), splx(s)
+
 extern LIST_HEAD(uihashhead, uidinfo) *uihashtbl;
 extern u_long uihash;          /* size of hash table - 1 */
 int       chgproccnt(uid_t, int);



Home | Main Index | Thread Index | Old Index