freebsd-dev/sys/kern
Alan Somers c2090e73d7 Replace 4.4BSD Lite's unix domain socket backpressure hack with a cleaner
mechanism, based on the new SB_STOP sockbuf flag.  The old hack dynamically
changed the sending sockbuf's high water mark whenever adding or removing
data from the receiving sockbuf.  It worked for stream sockets, but it never
worked for SOCK_SEQPACKET sockets because of their atomic nature.  If the
sockbuf was partially full, it might return EMSGSIZE instead of blocking.

The new solution is based on DragonFlyBSD's fix from commit
3a6117bbe0ed6a87605c1e43e12a1438d8844380 on 2008-05-27.  It adds an SB_STOP
flag to sockbufs.  Whenever uipc_send surpasses the socket's size limit, it
sets SB_STOP on the sending sockbuf.  sbspace() will then return 0 for that
sockbuf, causing sosend_generic and friends to block.  uipc_rcvd will
likewise clear SB_STOP.  There are two fringe benefits: uipc_{send,rcvd} no
longer need to call chgsbsize() on every send and receive because they don't
change the sockbuf's high water mark.  Also, uipc_sense no longer needs to
acquire the UIPC linkage lock, because it's simpler to compute the
st_blksizes.

There is one drawback: since sbspace() will only ever return 0 or the
maximum, sosend_generic will allow the sockbuf to exceed its nominal maximum
size by at most one packet of size less than the max.  I don't think that's
a serious problem.  In fact, I'm not even positive that FreeBSD guarantees a
socket will always stay within its nominal size limit.

sys/sys/sockbuf.h
	Add the SB_STOP flag and adjust sbspace()

sys/sys/unpcb.h
	Delete the obsolete unp_cc and unp_mbcnt fields from struct unpcb.

sys/kern/uipc_usrreq.c
	Adjust uipc_rcvd, uipc_send, and uipc_sense to use the SB_STOP
	backpressure mechanism.  Removing obsolete unpcb fields from
	db_show_unpcb.

tests/sys/kern/unix_seqpacket_test.c
	Clear expected failures from ATF.

Obtained from:	DragonFly BSD
PR:		kern/185812
Reviewed by:	silence from freebsd-net@ and rwatson@
MFC after:	3 weeks
Sponsored by:	Spectra Logic Corporation
2014-03-13 18:42:12 +00:00
..
bus_if.m
capabilities.conf Allow sigwait(2) in capabilities mode. 2014-01-28 01:49:49 +00:00
clock_if.m
cpufreq_if.m
device_if.m
genassym.sh
imgact_aout.c
imgact_elf32.c
imgact_elf64.c
imgact_elf.c Add a mmap flag (MAP_32BIT) on 64-bit platforms to request that a mapping use 2013-09-09 18:11:59 +00:00
imgact_gzip.c Add a mmap flag (MAP_32BIT) on 64-bit platforms to request that a mapping use 2013-09-09 18:11:59 +00:00
imgact_shell.c
inflate.c
init_main.c Debugging. My attempt at EVENTHANDLER(multiuser) was a failure; use EVENTHANDLER(mountroot) instead. 2013-10-08 06:54:52 +00:00
init_sysent.c Allow sigwait(2) in capabilities mode. 2014-01-28 01:49:49 +00:00
kern_acct.c acct: create a special plimit object and set it for exiting processes 2013-06-30 19:08:06 +00:00
kern_alq.c The fix committed in r250951 replaced the reported panic with a deadlock... gold 2013-06-17 09:49:07 +00:00
kern_clock.c dtrace sdt: remove the ugly sname parameter of SDT_PROBE_DEFINE 2013-11-26 08:46:27 +00:00
kern_clocksource.c Fix periodic per-CPU timers startup on boot. 2013-12-16 13:52:18 +00:00
kern_condvar.c Fix lc_lock/lc_unlock() support for rmlocks held in shared mode. With 2013-09-20 23:06:21 +00:00
kern_conf.c Remove global device lock acquisition from dev_relthread(), replacing it 2013-10-22 10:40:26 +00:00
kern_cons.c Rework the EARLY_PRINTF mechanism. Instead of defining a special eprintf() 2014-02-12 00:53:38 +00:00
kern_context.c
kern_cpu.c
kern_cpuset.c Several improvements to rmlock(9). Many of these are based on patches 2013-06-25 18:44:15 +00:00
kern_ctf.c
kern_descrip.c Fix style of comment blocks. 2014-02-22 04:28:49 +00:00
kern_dtrace.c
kern_environment.c Make getenv_*() functions and respectively TUNABLE_*_FETCH() macros not 2013-11-01 10:32:33 +00:00
kern_et.c Fix incorrect assertion that caused panic when periodic-only timers used. 2013-03-13 06:42:01 +00:00
kern_event.c Add in a default initialiser for the EVOPS_SENDFILE kqueue filterops. 2014-01-17 05:15:44 +00:00
kern_exec.c dtrace sdt: remove the ugly sname parameter of SDT_PROBE_DEFINE 2013-11-26 08:46:27 +00:00
kern_exit.c proc exit: don't take PROC_LOCK while freeing rlimits 2013-12-15 04:11:43 +00:00
kern_fail.c
kern_ffclock.c
kern_fork.c The fasttrap fork handler is responsible for removing tracepoints in the 2013-12-18 01:41:52 +00:00
kern_gzio.c
kern_hhook.c Move hhook's per-vnet initialisation to an earlier SYSINIT SI_SUB stage to 2013-06-15 10:08:34 +00:00
kern_idle.c
kern_intr.c Snapshot. This passes the build test, but has not yet been finished or debugged. 2013-10-04 06:55:06 +00:00
kern_jail.c Back out r261266 pending security buy-in. 2014-01-31 17:39:51 +00:00
kern_khelp.c Cleanup and simplification in khelp_{register|deregister}_helper(). No 2013-06-15 06:45:17 +00:00
kern_kthread.c Do not use potentially stale thread in kthread_add() 2013-08-17 17:02:43 +00:00
kern_ktr.c Drop the 3rd clause from all 3 clause BSD licenses where I am the sole 2014-02-05 18:13:27 +00:00
kern_ktrace.c Fix panic in ktrcapfail() when no capability rights are passed. 2013-09-18 19:26:08 +00:00
kern_linker.c Use correct types for sizeof() in the calculations for the malloc(9) sizes [1]. 2014-03-12 10:25:26 +00:00
kern_lock.c - For kernel compiled only with KDTRACE_HOOKS and not any lock debugging 2013-11-25 07:38:45 +00:00
kern_lockf.c
kern_lockstat.c - For kernel compiled only with KDTRACE_HOOKS and not any lock debugging 2013-11-25 07:38:45 +00:00
kern_loginclass.c
kern_malloc.c On sparc64, VM_KMEM_SIZE_SCALE is not a constant expression, so it 2014-02-23 17:37:24 +00:00
kern_mbuf.c Ignore attempts to set the nmbcluster sysctls to their current value 2013-10-10 16:11:34 +00:00
kern_mib.c Rename sysctl kern.supported_abis to kern.supported_archs, since it gives 2013-12-04 16:38:40 +00:00
kern_module.c
kern_mtxpool.c
kern_mutex.c - For kernel compiled only with KDTRACE_HOOKS and not any lock debugging 2013-11-25 07:38:45 +00:00
kern_ntptime.c rename scheduler->swapper and SI_SUB_RUN_SCHEDULER->SI_SUB_LAST 2013-07-24 09:45:31 +00:00
kern_osd.c
kern_physio.c Fix some issues in change 254760 pointed out by Bruce Evans: 2013-08-29 16:41:40 +00:00
kern_pmc.c
kern_poll.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
kern_priv.c dtrace sdt: remove the ugly sname parameter of SDT_PROBE_DEFINE 2013-11-26 08:46:27 +00:00
kern_proc.c Expose OBJT_MGTDEVICE VM objects used for GEM/TTM with drm2 as an 2014-02-11 21:57:37 +00:00
kern_prot.c
kern_racct.c dtrace sdt: remove the ugly sname parameter of SDT_PROBE_DEFINE 2013-11-26 08:46:27 +00:00
kern_rangelock.c Change the queue of locks in kern_rangelock.c from holding lock requests in 2013-08-15 20:19:17 +00:00
kern_rctl.c
kern_resource.c rlimit: avoid unnecessary copying of rlimits 2013-12-13 20:54:45 +00:00
kern_rmlock.c - For kernel compiled only with KDTRACE_HOOKS and not any lock debugging 2013-11-25 07:38:45 +00:00
kern_rwlock.c Drop the 3rd clause from all 3 clause BSD licenses where I am the sole 2014-02-05 18:13:27 +00:00
kern_sdt.c Print a backtrace if the SDT(9) stub gets called so that there's at least 2014-02-22 01:41:45 +00:00
kern_sema.c
kern_sharedpage.c Remove the deprecated VM_ALLOC_RETRY flag for the vm_page_grab(9). 2013-08-22 07:39:53 +00:00
kern_shutdown.c Make panic_reboot_wait_time static. 2013-12-05 03:01:41 +00:00
kern_sig.c Make process descriptors standard part of the kernel. rwhod(8) already 2013-11-30 15:08:35 +00:00
kern_switch.c Add a comment on why inlining critical_enter() may not be a good idea 2012-12-09 04:54:22 +00:00
kern_sx.c - For kernel compiled only with KDTRACE_HOOKS and not any lock debugging 2013-11-25 07:38:45 +00:00
kern_synch.c use saner calculations in should_yield 2013-11-26 14:00:50 +00:00
kern_syscalls.c
kern_sysctl.c Remove identical vnet sysctl handlers, and handle CTLFLAG_VNET 2014-02-07 13:47:33 +00:00
kern_tc.c - Make callout(9) tickless, relying on eventtimers(4) as backend for 2013-03-04 11:09:56 +00:00
kern_thr.c
kern_thread.c dtrace sdt: remove the ugly sname parameter of SDT_PROBE_DEFINE 2013-11-26 08:46:27 +00:00
kern_time.c Implement compat32 wrappers for the ktimer_* syscalls. 2013-07-21 19:43:52 +00:00
kern_timeout.c Include the CPU id in the per-CPU timer swi thread descriptions. 2014-02-14 23:19:51 +00:00
kern_umtx.c Fix two issues with the spin loops in the umtx(2) implementation. 2013-06-13 09:33:22 +00:00
kern_uuid.c Fix a bug in be_uuid_dec(); it called le16dec() instead of be16dec(), 2014-02-13 22:24:36 +00:00
kern_xxx.c
ksched.c
link_elf_obj.c Add a mmap flag (MAP_32BIT) on 64-bit platforms to request that a mapping use 2013-09-09 18:11:59 +00:00
link_elf.c Add a mmap flag (MAP_32BIT) on 64-bit platforms to request that a mapping use 2013-09-09 18:11:59 +00:00
linker_if.m
Make.tags.inc - Trim an unused and bogus Makefile for mount_smbfs. 2013-06-28 21:00:08 +00:00
Makefile
makesyscalls.sh Fix syscalls that can be loaded as kernel modules - they were not given 2013-12-15 23:19:42 +00:00
md4c.c
md5c.c
p1003_1b.c
posix4_mib.c
sched_4bsd.c The arguments to sched:::off-cpu are the thread and associated process of 2013-12-29 17:08:30 +00:00
sched_ule.c - Make runq_steal_from more aggressive. Previously it would examine only 2014-03-08 00:35:06 +00:00
serdev_if.m
stack_protector.c
subr_acl_nfs4.c
subr_acl_posix1e.c
subr_autoconf.c
subr_blist.c Remove reference to the rlist code from comments, and fix a typo visible 2013-02-05 20:08:33 +00:00
subr_bufring.c
subr_bus_dma.c Add bus_dmamap_load_ma() function to load map with the array of 2013-10-27 21:39:16 +00:00
subr_bus.c Add YARROW_RNG and FORTUNA_RNG to sys/conf/options. 2013-10-08 11:05:26 +00:00
subr_busdma_bufalloc.c Replace kernel virtual address space allocation with vmem. This provides 2013-08-07 06:21:20 +00:00
subr_capability.c Change cap_rights_merge(3) and cap_rights_remove(3) to return pointer 2013-11-14 22:59:20 +00:00
subr_clock.c
subr_counter.c Create two public UMA_ZONE_PCPU zones: 64 bit sized and pointer sized. 2014-02-10 19:59:46 +00:00
subr_devstat.c dtrace sdt: remove the ugly sname parameter of SDT_PROBE_DEFINE 2013-11-26 08:46:27 +00:00
subr_disk.c
subr_dummy_vdso_tc.c
subr_eventhandler.c
subr_fattime.c
subr_firmware.c
subr_hash.c
subr_hints.c Preserve one character space for a trailing '\0'. 2014-02-14 20:54:03 +00:00
subr_kdb.c When reentering kdb, typically due to a bug causing trap or assert in 2013-10-27 16:20:52 +00:00
subr_kobj.c
subr_lock.c Drop the 3rd clause from all 3 clause BSD licenses where I am the sole 2014-02-05 18:13:27 +00:00
subr_log.c MFcalloutng (r244255 by mav, with minor changes): 2013-03-04 16:07:55 +00:00
subr_mbpool.c Give (*ext_free) an int return value allowing for very sophisticated 2013-08-25 10:57:09 +00:00
subr_mchain.c Mechanically substitute flags from historic mbuf allocator with 2012-12-05 08:04:20 +00:00
subr_module.c
subr_msgbuf.c
subr_param.c Add VM_LAST, a special last element in enum VM_GUEST and use it in CTASSERT 2013-11-12 20:13:10 +00:00
subr_pcpu.c Create two public UMA_ZONE_PCPU zones: 64 bit sized and pointer sized. 2014-02-10 19:59:46 +00:00
subr_pctrie.c - Add a new general purpose path-compressed radix trie which can be used 2013-05-12 04:05:01 +00:00
subr_power.c
subr_prf.c Rework the EARLY_PRINTF mechanism. Instead of defining a special eprintf() 2014-02-12 00:53:38 +00:00
subr_prof.c
subr_rman.c
subr_rtc.c
subr_sbuf.c Always request zeroed memory, in case we're dumb enough to leak it later. 2013-09-22 23:47:56 +00:00
subr_scanf.c
subr_sglist.c Add sglist_append_bio(9) to append a struct bio's data to a sglist 2014-01-13 04:41:08 +00:00
subr_sleepqueue.c Drop the 3rd clause from all 3 clause BSD licenses where I am the sole 2014-02-05 18:13:27 +00:00
subr_smp.c Drop the 3rd clause from all 3 clause BSD licenses where I am the sole 2014-02-05 18:13:27 +00:00
subr_stack.c
subr_syscall.c - For kernel compiled only with KDTRACE_HOOKS and not any lock debugging 2013-11-25 07:38:45 +00:00
subr_taskqueue.c add taskqueue_drain_all 2013-11-28 18:56:34 +00:00
subr_terminal.c Fix copy-pasting of CJK fullwidth characters. 2013-12-24 18:42:26 +00:00
subr_trap.c - Assert for not leaking readers rw locks counter on userland return. 2013-12-17 13:37:02 +00:00
subr_turnstile.c dtrace sdt: remove the ugly sname parameter of SDT_PROBE_DEFINE 2013-11-26 08:46:27 +00:00
subr_uio.c Remove zero-copy sockets code. It only worked for anonymous memory, 2013-09-16 06:25:54 +00:00
subr_unit.c Move the definition of the struct unrhdr into a separate header file, 2013-08-30 07:37:45 +00:00
subr_vmem.c Create own free list for each of the first 32 possible allocation sizes. 2013-12-11 21:48:04 +00:00
subr_witness.c Bump up WITNESS_COUNT from 1024 to 1536 so there are sufficient entries for 2014-01-20 01:59:35 +00:00
sys_capability.c This looks like a typo that breaks the build. Yell at me if this isn't the 2013-09-05 03:36:57 +00:00
sys_generic.c Replace CAP_POLL_EVENT and CAP_POST_EVENT capability rights (which I had 2013-11-15 19:55:35 +00:00
sys_pipe.c Add a mmap flag (MAP_32BIT) on 64-bit platforms to request that a mapping use 2013-09-09 18:11:59 +00:00
sys_procdesc.c Make process descriptors standard part of the kernel. rwhod(8) already 2013-11-30 15:08:35 +00:00
sys_process.c Extend the support for exempting processes from being killed when swap is 2013-09-19 18:53:42 +00:00
sys_socket.c The r48589 promised to remove implicit inclusion of if_var.h soon. Prepare 2013-10-26 17:58:36 +00:00
syscalls.c Regen. 2013-09-19 18:56:00 +00:00
syscalls.master Extend the support for exempting processes from being killed when swap is 2013-09-19 18:53:42 +00:00
systrace_args.c Regenerate syscall argument strings after r255777. 2013-09-21 23:06:36 +00:00
sysv_ipc.c
sysv_msg.c
sysv_sem.c
sysv_shm.c Eliminate the gratuitous use of mmap(2) flags from the implementation 2013-11-12 17:46:11 +00:00
tty_compat.c
tty_info.c
tty_inq.c
tty_outq.c
tty_pts.c Make sendfile() a method in the struct fileops. Currently only 2013-08-15 07:54:31 +00:00
tty_tty.c
tty_ttydisc.c
tty.c Move list of ttys handling from the allocating procedures, to the 2013-12-20 19:45:51 +00:00
uipc_accf.c
uipc_debug.c Fix socket buffer timeouts precision using the new sbintime_t KPI instead 2013-09-01 23:34:53 +00:00
uipc_domain.c - Implement two new system calls: 2013-03-02 21:11:30 +00:00
uipc_mbuf2.c Mechanically substitute flags from historic mbuf allocator with 2012-12-05 08:04:20 +00:00
uipc_mbuf.c Remove historical macro. 2014-01-16 13:42:50 +00:00
uipc_mqueue.c Replace CAP_POLL_EVENT and CAP_POST_EVENT capability rights (which I had 2013-11-15 19:55:35 +00:00
uipc_sem.c Change the cap_rights_t type from uint64_t to a structure that we can extend 2013-09-05 00:09:56 +00:00
uipc_shm.c Accept O_CLOEXEC in shm_open(). 2014-01-24 21:05:07 +00:00
uipc_sockbuf.c Fix PR kern/185813 "SOCK_SEQPACKET AF_UNIX sockets with asymmetrical 2014-03-06 20:24:15 +00:00
uipc_socket.c Simplify wait/nowait code, eventually killing last remnant of 2014-01-16 13:45:41 +00:00
uipc_syscalls.c Implement a kqueue notification path for sendfile. 2014-01-17 05:26:55 +00:00
uipc_usrreq.c Replace 4.4BSD Lite's unix domain socket backpressure hack with a cleaner 2014-03-13 18:42:12 +00:00
vfs_acl.c Change the cap_rights_t type from uint64_t to a structure that we can extend 2013-09-05 00:09:56 +00:00
vfs_aio.c The fget() function now takes pointer to cap_rights_t, so change 0 to NULL. 2013-09-05 11:59:23 +00:00
vfs_bio.c Fix a typo. 2014-01-21 03:24:52 +00:00
vfs_cache.c Fix accounting for the negative cache entries when reusing v_cache_dd. 2013-12-27 17:09:59 +00:00
vfs_cluster.c When allocating a pbuf for the cluster write, do not sleep waiting 2013-08-27 01:31:12 +00:00
vfs_default.c - Convert the bufobj lock to rwlock. 2013-05-31 00:43:41 +00:00
vfs_export.c Further refine the handling of stop signals in the NFS client. The 2013-02-21 19:02:50 +00:00
vfs_extattr.c Change the cap_rights_t type from uint64_t to a structure that we can extend 2013-09-05 00:09:56 +00:00
vfs_hash.c Add exported vfs_hash_index() function, which calculates the canonical 2013-01-14 05:41:40 +00:00
vfs_init.c Revert accidental commit. 2013-06-29 05:05:57 +00:00
vfs_lookup.c dtrace sdt: remove the ugly sname parameter of SDT_PROBE_DEFINE 2013-11-26 08:46:27 +00:00
vfs_mount.c Change len checks for fstypelen and fspathlen to be against absolute len 2013-10-03 22:52:03 +00:00
vfs_mountroot.c In sys/kern/vfs_mountroot.c, remove static function parse_isspace(), 2013-12-25 22:14:42 +00:00
vfs_subr.c Do not flush buffers when the v_object of the passed vnode does not 2013-10-09 18:43:29 +00:00
vfs_syscalls.c The auio structure is only initialized when the vnode is symlink, 2014-03-12 10:23:51 +00:00
vfs_vnops.c If vn_open_vnode() succeeded in opening the vnode, but subsequent 2013-12-17 17:31:16 +00:00
vnode_if.src If filesystem declares that it supports shared locking for writes, use 2013-11-09 20:36:29 +00:00