opnsense-src/sys
Rick Macklem dfd174d6e0 Fix the client side krpc from doing TCP reconnects for ERESTART from sosend().
When sosend() replies ERESTART in the client side krpc, it indicates that
the RPC message hasn't yet been sent and that the send queue is full or
locked while a signal is posted for the process.
Without this patch, this would result in a RPC_CANTSEND reply from
clnt_vc_call(), which would cause clnt_reconnect_call() to create a new
TCP transport connection. For most NFS servers, this wasn't a serious problem,
although it did imply retries of outstanding RPCs, which could possibly
have missed the DRC.
For an NFSv4.1 mount to AmazonEFS, this caused a serious problem, since
AmazonEFS often didn't retain the NFSv4.1 session and would reply with
NFS4ERR_BAD_SESSION. This implies to the client a crash/reboot which
requires open/lock state recovery.

Three options were considered to fix this:
- Return the ERESTART all the way up to the system call boundary and then
  have the system call redone. This is fraught with risk, due to convoluted
  code paths, asynchronous I/O RPCs etc. cperciva@ worked on this, but it
  is still a work in prgress and may not be feasible.
- Set SB_NOINTR for the socket buffer. This fixes the problem, but makes
  the sosend() completely non interruptible, which kib@ considered
  inappropriate. It also would break forced dismount when a thread
  was blocked in sosend().
- Modify the retry loop in clnt_vc_call(), so that it loops for this case
  for up to 15sec. Testing showed that the sosend() usually succeeded by
  the 2nd retry. The extreme case observed was 111 loop iterations, or
  about 100msec of delay.
This third alternative is what is implemented in this patch, since the
change is:
- localized
- straightforward
- forced dismount is not broken by it.

This patch has been tested by cperciva@ extensively against AmazonEFS.

Reported by:	cperciva
Tested by:	cperciva
MFC after:	2 weeks
2017-05-07 12:12:45 +00:00
..
amd64 pcicfg: Fix direct calls of pci_cfg{read,write} on systems w/o PCI host bridge. 2017-05-04 05:28:46 +00:00
arm [arm] [rt1310] add initial RT1310 SoC code. 2017-05-06 06:14:46 +00:00
arm64 Add reclaim_pv_chunk on arm64. This is based on the amd64 code so should 2017-05-05 10:01:27 +00:00
boot loader: network read rework 2017-05-06 20:32:27 +00:00
bsm Merge OpenBSM 1.2-alpha5 from vendor branch to FreeBSD -CURRENT: 2017-03-26 21:14:49 +00:00
cam Add basic programmable early warning error injection to the sa(4) driver. 2017-05-05 20:00:53 +00:00
cddl Fix a harmless LOR in dtrace_load(). 2017-05-01 17:01:00 +00:00
compat Fix linprocfs_docpuinfo() output regarding to what newer Linux apps expect 2017-05-06 17:37:01 +00:00
conf [mips] [rt2880] Add oldest Ralink MIPS SOC RT2880 support code. 2017-05-06 06:20:34 +00:00
contrib Import Amazon Elastic Network Adapter (ENA) HAL to sys/contrib/ 2017-04-27 19:57:18 +00:00
crypto Fix counter increment in Salsa and ChaCha. 2017-04-22 01:06:23 +00:00
ddb Fix printing of negative offsets (typically from frame pointers) again. 2017-03-26 18:46:35 +00:00
dev [mips] [rt2880] Add oldest Ralink MIPS SOC RT2880 support code. 2017-05-06 06:20:34 +00:00
fs ext2fs: add read-write support for Extended Attributes. 2017-05-03 22:35:41 +00:00
gdb
geom Synchronize unclean mirrors before adding them to a running gmirror. 2017-05-02 23:29:42 +00:00
gnu [mips] [rt2880] Add oldest Ralink MIPS SOC RT2880 support code. 2017-05-06 06:20:34 +00:00
i386 Use kmem_malloc() instead of malloc(9) for the native amd64 filter. 2017-04-17 22:02:09 +00:00
isa Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
kern Provide a freebsd32 implementation of sigqueue() 2017-05-05 18:49:39 +00:00
kgssapi
libkern armv8 has support for optional CRC32C instructions. This patch checks if they are 2017-04-27 17:53:05 +00:00
mips [mediatek] [gpio] add PPS / interrupt support. 2017-05-06 06:22:14 +00:00
modules cxgbe/t4_tom: Per-connection rate limiting for TCP sockets handled by 2017-05-05 20:06:49 +00:00
net Relax r317696 locking to not drain taskqueue under the lock. 2017-05-05 16:51:53 +00:00
net80211 [net80211] add methods to fetch the global and per-VAP WME parameters. 2017-04-22 02:12:07 +00:00
netgraph Make cached Bluetooth LE host advertise information visible from userland. 2017-04-27 15:03:24 +00:00
netinet Allow SCTP to use the hostcache. 2017-04-29 19:20:50 +00:00
netinet6 Fix an issue with MTU calculation if an ICMP messaeg is received 2017-04-26 20:21:05 +00:00
netipsec Fix SP refcount leak. 2017-04-26 00:34:05 +00:00
netpfil pf: Fix panic on unload 2017-05-03 20:56:54 +00:00
netsmb
nfs Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
nfsclient Add an NFSv4.1 mount option for "use one openowner". 2017-04-13 21:54:19 +00:00
nfsserver Renumber copyright clause 4 2017-02-28 23:42:47 +00:00
nlm
ofed All these files need sys/vmmeter.h, but now they got it implicitly 2017-04-17 17:07:00 +00:00
opencrypto Don't leak a session and lock if a GMAC key has an invalid length. 2017-04-05 01:46:41 +00:00
powerpc - Remove 'struct vmmeter' from 'struct pcpu', leaving only global vmmeter 2017-04-17 17:34:47 +00:00
riscv Follow r317061 "Remove struct vmmeter from struct pcpu" 2017-04-19 17:06:32 +00:00
rpc Fix the client side krpc from doing TCP reconnects for ERESTART from sosend(). 2017-05-07 12:12:45 +00:00
security Break audit_bsm_klib.c into two files: one (audit_bsm_klib.c) 2017-04-03 10:15:58 +00:00
sparc64 Fix a bug introduced as part of r287726; use the right device_t for 2017-04-29 00:53:17 +00:00
sys Provide a freebsd32 implementation of sigqueue() 2017-05-05 18:49:39 +00:00
teken Oops, my fix for bright colors broke bright black some more (in cases 2017-03-27 10:48:28 +00:00
tests
tools [fdt] Make DTBs generated by make_dtb.sh overlay-ready 2017-03-10 22:45:07 +00:00
ufs UFS fs.h: clear warning from use in makefs(1) 2017-05-05 15:26:55 +00:00
vm Emulate pre-r317061 ABI. 2017-05-02 18:40:41 +00:00
x86 x86 MCA: Fix a deadlock in MCA exception processing 2017-04-28 18:25:10 +00:00
xdr
xen xenstore: fix suspension when using the xenstore device 2017-03-07 09:17:48 +00:00
Makefile Fix "make cscope-clean" when .OBJDIR already exists 2017-05-01 05:59:52 +00:00