| version 1.136, 2007/03/12 21:33:08 |
version 1.136.2.1, 2007/03/18 00:06:45 |
|
|
| /* $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); |