freebsd-dev/sys/kern
Bosko Milekic 479728fd77 Fix a potential bucket leak where when freeing to an empty bucket
we failed to put the bucket back into the general cache/container.

Also, fix a bad assumption.  There was a KASSERT() that aimed to
guarantee that whenever the pcpu container's mc_starved was > 0,
that whatever the bucket we were freeing to was an empty bucket,
assuming it belonged to the pcpu container cache. However, there
is at least one case where this is not true anymore; consider:
1) All containers empty, next thread to try to alloc will touch
   a pcpu container, notice it's empty, and increment the pcpu
   container's mc_starved.
2) Some other thread frees an mbuf belonging to a bucket in
   the general cache/container.  Then it frees another mbuf
   belonging to the same bucket (still in gen container).
3) Some third thread tries to allocate an mbuf from the pcpu
   container and, since empty, grabs one mbuf now available
   in the general cache and moves the non-empty bucket from
   which it took 1 mbuf and to which the thread in (2) freed
   to, and moves it to the pcpu container.
4) A final thread tries to free an mbuf belonging to the
   NON-EMPTY bucket mentionned in (2) and (3) and, since
   the pcpu container's mc_starved is > 0, but the bucket
   is obviously non-empty, it trips on the KASSERT.
This meant that one could potentially get a panic in some
cases when out of mbufs and clusters.  The problem could
be mitigated by commenting out some cv_signal() calls,
but I'm assuming that was pure coincidence and this is
the correct fix.
2003-06-03 19:19:13 +00:00
..
bus_if.m Give print_child a default method. 2003-03-25 04:32:52 +00:00
clock_if.m
device_if.m
genassym.sh
imgact_aout.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
imgact_elf32.c Improve the way that an elf image activator for an alternate word size is 2003-01-04 22:07:48 +00:00
imgact_elf64.c Improve the way that an elf image activator for an alternate word size is 2003-01-04 22:07:48 +00:00
imgact_elf.c Fix ia32 compat on ia64. Recent ia64 MD changes caused the garbage on 2003-05-31 19:55:05 +00:00
imgact_gzip.c Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, 2003-01-01 18:49:04 +00:00
imgact_shell.c Correct typos, mostly s/ a / an / where appropriate. Some whitespace cleanup, 2003-01-01 18:49:04 +00:00
inflate.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
init_main.c Add tracking of process leaders sharing a file descriptor table and 2003-06-02 16:05:32 +00:00
init_sysent.c Regen. 2003-04-09 02:57:29 +00:00
kern_acct.c Instead of recording the Unix time in a process when it starts, record the 2003-05-01 16:59:23 +00:00
kern_acl.c Bow to the whining masses and change a union back into void *. Retain 2003-01-13 00:33:17 +00:00
kern_alq.c - Reset the free ent to NULL if we have consumed the last free entry. This 2003-05-25 08:48:42 +00:00
kern_clock.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
kern_condvar.c - Merge struct procsig with struct sigacts. 2003-05-13 20:36:02 +00:00
kern_conf.c Remove return after panic. 2003-05-31 20:18:23 +00:00
kern_context.c Add an argument to get_mcontext() which specified whether the 2003-04-25 01:50:30 +00:00
kern_descrip.c Add tracking of process leaders sharing a file descriptor table and 2003-06-02 16:05:32 +00:00
kern_environment.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern_event.c Fix race between a process registering a NOTE_EXIT EVFILT_PROC event and 2003-04-12 01:57:04 +00:00
kern_exec.c - Merge struct procsig with struct sigacts. 2003-05-13 20:36:02 +00:00
kern_exit.c - Merge struct procsig with struct sigacts. 2003-05-13 20:36:02 +00:00
kern_fork.c Add tracking of process leaders sharing a file descriptor table and 2003-06-02 16:05:32 +00:00
kern_idle.c Move the flag that indicates an idle thread from the KSE to the thread. 2003-05-02 00:33:12 +00:00
kern_intr.c Remove unused variable(s). 2003-05-31 20:29:34 +00:00
kern_jail.c style(9) 2003-04-28 18:32:19 +00:00
kern_kse.c Remove the ia64 hackery in threadinit() that was needed to work around 2003-06-01 05:57:58 +00:00
kern_kthread.c - Merge struct procsig with struct sigacts. 2003-05-13 20:36:02 +00:00
kern_ktr.c Move the flag that indicates an idle thread from the KSE to the thread. 2003-05-02 00:33:12 +00:00
kern_ktrace.c - Push down Giant around vnode operations in ktrace(). 2003-04-25 19:59:35 +00:00
kern_linker.c FreeBSD 5.0 has stopped shipping /modules 2.5 years ago. Catch 2003-03-03 22:53:35 +00:00
kern_lock.c Use the KTR_LOCK mask for logging events via KTR in lockmgr() rather 2003-03-11 20:00:37 +00:00
kern_lockf.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
kern_mac.c Rename MAC_MAX_POLICIES to MAC_MAX_SLOTS, since the variables and 2003-05-08 19:49:42 +00:00
kern_malloc.c Don't pass NULL pointer to memset if we are compiled with DIAGNOSTIC 2003-05-12 05:09:56 +00:00
kern_mib.c Fix some easy, global, lint warnings. In most cases, this means 2003-04-30 12:57:40 +00:00
kern_module.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
kern_mtxpool.c
kern_mutex.c Add "" around mutex name to make message less confusing. 2003-05-31 21:11:01 +00:00
kern_ntptime.c Explicitly have the timecounter init happen after the cpu_initclocks is 2003-01-06 01:01:08 +00:00
kern_physio.c Don't reinitialize fields that are already initialized by getpbuf(). 2003-04-05 23:02:58 +00:00
kern_poll.c Update netisr handling; Each SWI now registers its queue, and all queue 2003-03-04 23:19:55 +00:00
kern_proc.c - Merge struct procsig with struct sigacts. 2003-05-13 20:36:02 +00:00
kern_prot.c Remove Giant from the setuid(), seteuid(), setgid(), setegid(), 2003-05-01 21:21:42 +00:00
kern_resource.c Remove Giant from [gs]etpriority(). 2003-04-23 18:48:55 +00:00
kern_sema.c
kern_shutdown.c Lock the sched_lock while setting TDF_INPANIC. 2003-04-17 22:29:23 +00:00
kern_sig.c Fix long standing bug that prevents the PT_CONTINUE, PT_KILL and 2003-05-16 01:34:23 +00:00
kern_subr.c Tweak the clearing of TDF_DEADLKTREAT so that we only bother grabbing the 2003-05-05 21:27:29 +00:00
kern_switch.c When we are spilling threads out of the run queue during panic, make sure we 2003-05-21 18:53:25 +00:00
kern_sx.c
kern_synch.c Add a couple of XXX comments where the intent is not clear. 2003-05-31 20:13:58 +00:00
kern_syscalls.c
kern_sysctl.c When loading a module that contains a sysctl which is already compiled 2003-05-29 21:19:18 +00:00
kern_tc.c Including <sys/stdint.h> is (almost?) universally only to be able to use 2003-03-18 08:45:25 +00:00
kern_thr.c Revamp of the syscall path, exception and context handling. The 2003-05-16 21:26:42 +00:00
kern_thread.c Remove the ia64 hackery in threadinit() that was needed to work around 2003-06-01 05:57:58 +00:00
kern_time.c In setitimer(2), if the it_value of the new itimer value is clear, then 2003-05-13 19:21:46 +00:00
kern_timeout.c Under DIAGNOSTIC, only report expensive timeouts if they are more expensive 2003-02-01 10:06:40 +00:00
kern_umtx.c - Remove the blocked pointer from the umtx structure. 2003-06-03 05:24:46 +00:00
kern_uuid.c Introduce {be,le}_uuid_{enc,dec}() functions for explicitly encoding 2003-05-31 16:47:07 +00:00
kern_xxx.c
ksched.c Move a bunch of flags from the KSE to the thread. 2003-02-17 09:55:10 +00:00
link_elf_obj.c Bail out if there were not two loadable sections. Add XXX comment about 2003-05-12 15:08:10 +00:00
link_elf.c Bail out if there were not two loadable sections. Add XXX comment about 2003-05-12 15:08:10 +00:00
linker_if.m
Make.tags.inc Finish driving a stake through the heart of netns and the associated 2003-03-05 19:24:24 +00:00
Makefile Finish driving a stake through the heart of netns and the associated 2003-03-05 19:24:24 +00:00
makesyscalls.sh - Include umtx.h in files generated by makesyscalls.sh 2003-04-01 01:12:24 +00:00
md4c.c
md5c.c Use le32dec() instead of le32toh() because we are not guaranteed to have 2003-05-05 07:22:35 +00:00
p1003_1b.c Use copyout to access user memory. 2003-01-07 20:10:04 +00:00
posix4_mib.c Rework the sysconf(3) interaction with aio: 2002-11-17 04:15:34 +00:00
sched_4bsd.c Fix some easy, global, lint warnings. In most cases, this means 2003-04-30 12:57:40 +00:00
sched_ule.c Fix typo in last commit 2003-05-02 06:18:55 +00:00
subr_acl_posix1e.c Bow to the whining masses and change a union back into void *. Retain 2003-01-13 00:33:17 +00:00
subr_autoconf.c
subr_blist.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
subr_bus.c Fix some easy, global, lint warnings. In most cases, this means 2003-04-30 12:57:40 +00:00
subr_clist.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
subr_clock.c Split the global timezone structure into two integer fields to 2003-02-03 19:49:35 +00:00
subr_devstat.c Unbreak vinum, iostat and systat on sparc64 by changing the devstat 2003-04-17 15:06:28 +00:00
subr_disk.c Don't include <sys/disklabel.h> 2003-04-16 20:57:35 +00:00
subr_eventhandler.c Rework the eventhandler locking for hopefully the last time. The scheme 2003-03-11 20:17:00 +00:00
subr_hints.c
subr_kobj.c
subr_log.c Gigacommit to improve device-driver source compatibility between 2003-03-03 12:15:54 +00:00
subr_mbuf.c Fix a potential bucket leak where when freeing to an empty bucket 2003-06-03 19:19:13 +00:00
subr_mchain.c The "m = m->m_next" that was removed in the revision 1.12 was necessary 2003-02-19 10:12:42 +00:00
subr_module.c
subr_param.c
subr_pcpu.c
subr_power.c
subr_prf.c Remove unused variable(s). 2003-05-31 20:11:33 +00:00
subr_prof.c remove old and inaccurate XXX comment. 2003-05-02 01:02:20 +00:00
subr_rman.c Remove unused variable(s). 2003-05-31 20:29:34 +00:00
subr_rtc.c Split the global timezone structure into two integer fields to 2003-02-03 19:49:35 +00:00
subr_sbuf.c Copy the va_list in sbuf_vprintf() before passing it to vsnprintf(), 2003-05-25 19:03:08 +00:00
subr_scanf.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
subr_smp.c Move the _oncpu entry from the KSE to the thread. 2003-04-10 17:35:44 +00:00
subr_taskqueue.c Introduce a new taskqueue that runs completely free of Giant, and in 2003-02-26 03:15:42 +00:00
subr_trap.c - Merge struct procsig with struct sigacts. 2003-05-13 20:36:02 +00:00
subr_turnstile.c Add "" around mutex name to make message less confusing. 2003-05-31 21:11:01 +00:00
subr_witness.c Remove return after panic. 2003-05-31 20:09:42 +00:00
subr_xxx.c - Add vm_paddr_t, a physical address type. This is required for systems 2003-03-25 00:07:06 +00:00
sys_generic.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
sys_pipe.c Need to hold the same SMP lock for (knote) list traversal as for 2003-04-02 15:24:50 +00:00
sys_process.c Push down Giant around calls to proc_rwmem() in kern_ptrace. kern_ptrace() 2003-04-25 20:02:16 +00:00
sys_socket.c Remove duplicate includes. 2003-02-20 03:26:11 +00:00
syscalls.c Regen. 2003-04-09 02:57:29 +00:00
syscalls.master o In struct prison, add an allprison linked list of prisons (protected 2003-04-09 02:55:18 +00:00
sysv_ipc.c Attempt to further comment and clarify System V IPC logic: document 2003-05-31 23:31:51 +00:00
sysv_msg.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
sysv_sem.c Replace the at_fork, at_exec, and at_exit functions with the slightly more 2003-03-24 21:15:35 +00:00
sysv_shm.c Change the semantics of sysv shm emulation to take a additional 2003-05-05 09:22:58 +00:00
tty_compat.c
tty_conf.c
tty_cons.c Don't call make_dev() before we are ready for it. 2003-03-09 20:42:49 +00:00
tty_pty.c "break" rather than fall through to a break in the default clause. 2003-05-31 16:53:16 +00:00
tty_subr.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
tty_tty.c Gigacommit to improve device-driver source compatibility between 2003-03-03 12:15:54 +00:00
tty.c p_sigignore moved into struct sigacts. move one which was missed. 2003-05-14 00:03:55 +00:00
uipc_accf.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
uipc_cow.c The data in an sf_buf should not be modified by the mbuf system. Mark 2003-04-11 07:02:36 +00:00
uipc_domain.c Fix a spelling error. 2003-03-07 22:47:32 +00:00
uipc_jumbo.c Lock the jumbo_vm_object when performing vm_page_alloc(). 2003-04-19 19:13:25 +00:00
uipc_mbuf2.c Move MAC label storage for mbufs into m_tags from the m_pkthdr structure, 2003-04-14 20:39:06 +00:00
uipc_mbuf.c Add another MBUF_STRESS_TEST feature, m_defragrandomfailures. 2003-04-15 02:14:43 +00:00
uipc_proto.c
uipc_sem.c Replace the at_fork, at_exec, and at_exit functions with the slightly more 2003-03-24 21:15:35 +00:00
uipc_sockbuf.c Fix some easy, global, lint warnings. In most cases, this means 2003-04-30 12:57:40 +00:00
uipc_socket2.c Fix some easy, global, lint warnings. In most cases, this means 2003-04-30 12:57:40 +00:00
uipc_socket.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
uipc_syscalls.c Grab giant in sendit rather than kern_sendit because sockargs may 2003-05-29 18:36:26 +00:00
uipc_usrreq.c s/discriptors/descriptors/ 2003-03-23 19:41:34 +00:00
vfs_acl.c Bow to the whining masses and change a union back into void *. Retain 2003-01-13 00:33:17 +00:00
vfs_aio.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
vfs_bio.c The IO_NOWDRAIN and B_NOWDRAIN hacks are no longer needed to prevent 2003-05-31 16:42:45 +00:00
vfs_cache.c Backout the getcwd changes, a more comprehensive effort will be needed. 2003-03-20 10:40:45 +00:00
vfs_cluster.c The IO_NOWDRAIN and B_NOWDRAIN hacks are no longer needed to prevent 2003-05-31 16:42:45 +00:00
vfs_default.c Lock the vm_object when performing vm_pager_deallocate(). 2003-05-06 02:45:28 +00:00
vfs_export.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
vfs_extattr.c Remove unused variable(s). 2003-05-31 20:29:34 +00:00
vfs_init.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
vfs_lookup.c Back out M_* changes, per decision of the TRB. 2003-02-19 05:47:46 +00:00
vfs_mount.c Free mount credentials (mnt_cred) when freeing the mount struct 2003-04-24 08:16:06 +00:00
vfs_subr.c Remove unused variable and now unbalanced call to splbio(); 2003-05-31 20:09:01 +00:00
vfs_syscalls.c Remove unused variable(s). 2003-05-31 20:29:34 +00:00
vfs_vnops.c Deprecate machine/limits.h in favor of new sys/limits.h. 2003-04-29 13:36:06 +00:00
vnode_if.src Temporarily introduce a new VOP_SPECSTRATEGY operation while I try 2003-01-04 22:10:36 +00:00