svn commit: r259475 - head/sys/kern
Adrian Chadd
adrian at FreeBSD.org
Mon Dec 16 19:31:24 UTC 2013
Author: adrian
Date: Mon Dec 16 19:31:23 2013
New Revision: 259475
URL: http://svnweb.freebsd.org/changeset/base/259475
Log:
Migrate the sendfile_sync struct to use a UMA zone rather than M_TEMP.
This allows it to be better tracked as well as being able to leverage
UMA for more interesting/useful behaviour at a later date.
Sponsored by: Netflix, Inc.
Modified:
head/sys/kern/uipc_syscalls.c
Modified: head/sys/kern/uipc_syscalls.c
==============================================================================
--- head/sys/kern/uipc_syscalls.c Mon Dec 16 18:53:09 2013 (r259474)
+++ head/sys/kern/uipc_syscalls.c Mon Dec 16 19:31:23 2013 (r259475)
@@ -80,6 +80,9 @@ __FBSDID("$FreeBSD$");
#include <compat/freebsd32/freebsd32_util.h>
#endif
+#include <vm/uma.h>
+#include <vm/uma_int.h>
+#include <vm/uma_dbg.h>
#include <net/vnet.h>
#include <security/audit/audit.h>
@@ -130,6 +133,7 @@ static int sfreadahead = 1;
SYSCTL_INT(_kern_ipc_sendfile, OID_AUTO, readahead, CTLFLAG_RW,
&sfreadahead, 0, "Number of sendfile(2) read-ahead MAXBSIZE blocks");
+static uma_zone_t zone_sfsync;
static void
sfstat_init(const void *unused)
@@ -140,6 +144,22 @@ sfstat_init(const void *unused)
}
SYSINIT(sfstat, SI_SUB_MBUF, SI_ORDER_FIRST, sfstat_init, NULL);
+static void
+sf_sync_init(const void *unused)
+{
+
+ zone_sfsync = uma_zcreate("sendfile_sync", sizeof(struct sendfile_sync),
+ NULL, NULL,
+#ifdef INVARIANTS
+ trash_init, trash_fini,
+#else
+ NULL, NULL,
+#endif
+ UMA_ALIGN_CACHE,
+ 0);
+}
+SYSINIT(sf_sync, SI_SUB_MBUF, SI_ORDER_FIRST, sf_sync_init, NULL);
+
static int
sfstat_sysctl(SYSCTL_HANDLER_ARGS)
{
@@ -1898,7 +1918,7 @@ sf_sync_alloc(uint32_t flags)
{
struct sendfile_sync *sfs;
- sfs = malloc(sizeof *sfs, M_TEMP, M_WAITOK | M_ZERO);
+ sfs = uma_zalloc(zone_sfsync, M_WAITOK | M_ZERO);
mtx_init(&sfs->mtx, "sendfile", NULL, MTX_DEF);
cv_init(&sfs->cv, "sendfile");
sfs->flags = flags;
@@ -1953,7 +1973,7 @@ sf_sync_free(struct sendfile_sync *sfs)
KASSERT(sfs->count == 0, ("sendfile sync still busy"));
cv_destroy(&sfs->cv);
mtx_destroy(&sfs->mtx);
- free(sfs, M_TEMP);
+ uma_zfree(zone_sfsync, sfs);
}
/*
More information about the svn-src-head
mailing list