version 1.136, 2007/03/12 21:33:08 |
version 1.137, 2007/03/15 16:28:31 |
|
|
/* $NetBSD$ */ |
/* $NetBSD$ */ |
|
|
/*- |
/*- |
* Copyright (c) 2002 The NetBSD Foundation, Inc. |
* Copyright (c) 2002, 2007 The NetBSD Foundation, Inc. |
* All rights reserved. |
* All rights reserved. |
* |
* |
* This code is derived from software contributed to The NetBSD Foundation |
* This code is derived from software contributed to The NetBSD Foundation |
|
|
static size_t |
static size_t |
sodopendfreel() |
sodopendfreel() |
{ |
{ |
|
struct mbuf *m, *next; |
size_t rv = 0; |
size_t rv = 0; |
|
int s; |
|
|
KASSERT(mutex_owned(&so_pendfree_lock)); |
KASSERT(mutex_owned(&so_pendfree_lock)); |
|
|
for (;;) { |
while (so_pendfree != NULL) { |
struct mbuf *m; |
|
struct mbuf *next; |
|
|
|
m = so_pendfree; |
m = so_pendfree; |
if (m == NULL) |
|
break; |
|
so_pendfree = NULL; |
so_pendfree = NULL; |
mutex_exit(&so_pendfree_lock); |
mutex_exit(&so_pendfree_lock); |
|
|
|
|
sodoloanfree((m->m_flags & M_EXT_PAGES) ? |
sodoloanfree((m->m_flags & M_EXT_PAGES) ? |
m->m_ext.ext_pgs : NULL, m->m_ext.ext_buf, |
m->m_ext.ext_pgs : NULL, m->m_ext.ext_buf, |
m->m_ext.ext_size); |
m->m_ext.ext_size); |
|
s = splvm(); |
pool_cache_put(&mbpool_cache, m); |
pool_cache_put(&mbpool_cache, m); |
|
splx(s); |
} |
} |
|
|
mutex_enter(&so_pendfree_lock); |
mutex_enter(&so_pendfree_lock); |