svn commit: r192174 - in user/kmacy/ZFS_MFC/sys: kern sys
Kip Macy
kmacy at FreeBSD.org
Sat May 16 00:21:03 UTC 2009
Author: kmacy
Date: Sat May 16 00:21:02 2009
New Revision: 192174
URL: http://svn.freebsd.org/changeset/base/192174
Log:
remove rmlock dependency
add PR_* defines
Modified:
user/kmacy/ZFS_MFC/sys/kern/kern_osd.c
user/kmacy/ZFS_MFC/sys/sys/jail.h
Modified: user/kmacy/ZFS_MFC/sys/kern/kern_osd.c
==============================================================================
--- user/kmacy/ZFS_MFC/sys/kern/kern_osd.c Sat May 16 00:05:49 2009 (r192173)
+++ user/kmacy/ZFS_MFC/sys/kern/kern_osd.c Sat May 16 00:21:02 2009 (r192174)
@@ -36,7 +36,7 @@ __FBSDID("$FreeBSD$");
#include <sys/malloc.h>
#include <sys/lock.h>
#include <sys/mutex.h>
-#include <sys/rmlock.h>
+#include <sys/rwlock.h>
#include <sys/sx.h>
#include <sys/queue.h>
#include <sys/proc.h>
@@ -78,7 +78,7 @@ static const u_int osd_nmethods[OSD_LAST
};
static struct sx osd_module_lock[OSD_LAST + 1];
-static struct rmlock osd_object_lock[OSD_LAST + 1];
+static struct rwlock osd_object_lock[OSD_LAST + 1];
static struct mtx osd_list_lock[OSD_LAST + 1];
static void
@@ -124,12 +124,12 @@ osd_register(u_int type, osd_destructor_
osd_nmethods[type], M_OSD, M_WAITOK);
newptr = malloc(sizeof(osd_destructor_t) * osd_nslots[type],
M_OSD, M_WAITOK);
- rm_wlock(&osd_object_lock[type]);
+ rw_wlock(&osd_object_lock[type]);
bcopy(osd_destructors[type], newptr,
sizeof(osd_destructor_t) * i);
free(osd_destructors[type], M_OSD);
osd_destructors[type] = newptr;
- rm_wunlock(&osd_object_lock[type]);
+ rw_wunlock(&osd_object_lock[type]);
OSD_DEBUG("New slot allocated (type=%u, slot=%u).",
type, i + 1);
}
@@ -154,7 +154,7 @@ osd_deregister(u_int type, u_int slot)
KASSERT(osd_destructors[type][slot - 1] != NULL, ("Unused slot."));
sx_xlock(&osd_module_lock[type]);
- rm_wlock(&osd_object_lock[type]);
+ rw_wlock(&osd_object_lock[type]);
/*
* Free all OSD for the given slot.
*/
@@ -188,26 +188,25 @@ osd_deregister(u_int type, u_int slot)
OSD_DEBUG("Slot deregistration (type=%u, slot=%u).",
type, slot);
}
- rm_wunlock(&osd_object_lock[type]);
+ rw_wunlock(&osd_object_lock[type]);
sx_xunlock(&osd_module_lock[type]);
}
int
osd_set(u_int type, struct osd *osd, u_int slot, void *value)
{
- struct rm_priotracker tracker;
KASSERT(type >= OSD_FIRST && type <= OSD_LAST, ("Invalid type."));
KASSERT(slot > 0, ("Invalid slot."));
KASSERT(osd_destructors[type][slot - 1] != NULL, ("Unused slot."));
- rm_rlock(&osd_object_lock[type], &tracker);
+ rw_rlock(&osd_object_lock[type]);
if (slot > osd->osd_nslots) {
if (value == NULL) {
OSD_DEBUG(
"Not allocating null slot (type=%u, slot=%u).",
type, slot);
- rm_runlock(&osd_object_lock[type], &tracker);
+ rw_runlock(&osd_object_lock[type]);
return (0);
} else if (osd->osd_nslots == 0) {
/*
@@ -217,7 +216,7 @@ osd_set(u_int type, struct osd *osd, u_i
osd->osd_slots = malloc(sizeof(void *) * slot, M_OSD,
M_NOWAIT | M_ZERO);
if (osd->osd_slots == NULL) {
- rm_runlock(&osd_object_lock[type], &tracker);
+ rw_runlock(&osd_object_lock[type]);
return (ENOMEM);
}
osd->osd_nslots = slot;
@@ -235,7 +234,7 @@ osd_set(u_int type, struct osd *osd, u_i
newptr = realloc(osd->osd_slots, sizeof(void *) * slot,
M_OSD, M_NOWAIT | M_ZERO);
if (newptr == NULL) {
- rm_runlock(&osd_object_lock[type], &tracker);
+ rw_runlock(&osd_object_lock[type]);
return (ENOMEM);
}
osd->osd_slots = newptr;
@@ -246,21 +245,20 @@ osd_set(u_int type, struct osd *osd, u_i
OSD_DEBUG("Setting slot value (type=%u, slot=%u, value=%p).", type,
slot, value);
osd->osd_slots[slot - 1] = value;
- rm_runlock(&osd_object_lock[type], &tracker);
+ rw_runlock(&osd_object_lock[type]);
return (0);
}
void *
osd_get(u_int type, struct osd *osd, u_int slot)
{
- struct rm_priotracker tracker;
void *value;
KASSERT(type >= OSD_FIRST && type <= OSD_LAST, ("Invalid type."));
KASSERT(slot > 0, ("Invalid slot."));
KASSERT(osd_destructors[type][slot - 1] != NULL, ("Unused slot."));
- rm_rlock(&osd_object_lock[type], &tracker);
+ rw_rlock(&osd_object_lock[type]);
if (slot > osd->osd_nslots) {
value = NULL;
OSD_DEBUG("Slot doesn't exist (type=%u, slot=%u).", type, slot);
@@ -269,18 +267,17 @@ osd_get(u_int type, struct osd *osd, u_i
OSD_DEBUG("Returning slot value (type=%u, slot=%u, value=%p).",
type, slot, value);
}
- rm_runlock(&osd_object_lock[type], &tracker);
+ rw_runlock(&osd_object_lock[type]);
return (value);
}
void
osd_del(u_int type, struct osd *osd, u_int slot)
{
- struct rm_priotracker tracker;
- rm_rlock(&osd_object_lock[type], &tracker);
+ rw_rlock(&osd_object_lock[type]);
do_osd_del(type, osd, slot, 0);
- rm_runlock(&osd_object_lock[type], &tracker);
+ rw_runlock(&osd_object_lock[type]);
}
static void
@@ -363,7 +360,6 @@ osd_call(u_int type, u_int method, void
void
osd_exit(u_int type, struct osd *osd)
{
- struct rm_priotracker tracker;
u_int i;
KASSERT(type >= OSD_FIRST && type <= OSD_LAST, ("Invalid type."));
@@ -374,14 +370,14 @@ osd_exit(u_int type, struct osd *osd)
return;
}
- rm_rlock(&osd_object_lock[type], &tracker);
+ rw_rlock(&osd_object_lock[type]);
for (i = 1; i <= osd->osd_nslots; i++) {
if (osd_destructors[type][i - 1] != NULL)
do_osd_del(type, osd, i, 0);
else
OSD_DEBUG("Unused slot (type=%u, slot=%u).", type, i);
}
- rm_runlock(&osd_object_lock[type], &tracker);
+ rw_runlock(&osd_object_lock[type]);
OSD_DEBUG("Object exit (type=%u).", type);
}
@@ -394,7 +390,7 @@ osd_init(void *arg __unused)
osd_nslots[i] = 0;
LIST_INIT(&osd_list[i]);
sx_init(&osd_module_lock[i], "osd_module");
- rm_init(&osd_object_lock[i], "osd_object", 0);
+ rw_init(&osd_object_lock[i], "osd_object");
mtx_init(&osd_list_lock[i], "osd_list", NULL, MTX_DEF);
osd_destructors[i] = NULL;
osd_methods[i] = NULL;
Modified: user/kmacy/ZFS_MFC/sys/sys/jail.h
==============================================================================
--- user/kmacy/ZFS_MFC/sys/sys/jail.h Sat May 16 00:05:49 2009 (r192173)
+++ user/kmacy/ZFS_MFC/sys/sys/jail.h Sat May 16 00:21:02 2009 (r192174)
@@ -142,6 +142,22 @@ struct prison {
#ifdef _KERNEL
/*
+ * Flag bits set via options or internally
+ */
+#define PR_PERSIST 0x00000001 /* Can exist without processes */
+#define PR_REMOVE 0x01000000 /* In process of being removed */
+
+/*
+ * OSD methods
+ */
+#define PR_METHOD_CREATE 0
+#define PR_METHOD_GET 1
+#define PR_METHOD_SET 2
+#define PR_METHOD_CHECK 3
+#define PR_METHOD_ATTACH 4
+#define PR_MAXMETHOD 5
+
+/*
* Sysctl-set variables that determine global jail policy
*
* XXX MIB entries will need to be protected by a mutex.
More information about the svn-src-user
mailing list