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