opnsense-src/sys/fs
Konstantin Belousov 997febb1e7 Fix dirty buf exhaustion easily triggered with msdosfs.
If truncate(2) is performed on msdosfs file, which extends the file by
system-depended large amount, fs creates corresponding amount of dirty
delayed-write buffers, which can consume all buffers.  Such buffers
cannot be flushed by the bufdaemon because the ftruncate() thread owns
the vnode lock.  So the system runs out of free buffers, and even
truncate() thread starves, which means deadlock because it owns the
vnode lock.

Fix this by doing vnode fsync in extendfile() when low memory or low
buffers condition detected, which flushes all dirty buffers belonging
to the file being extended.

Note that the more usual fallback to bawrite() does not work
acceptable in this situation, because it would only allow one buffer
to be recycled.  Other filesystems, most important UFS, do not allow
userspace to create arbitrary amount of dirty delayed-write buffers
without feedback, so bawrite() is good enough for them.

Reported and tested by:	pho
Sponsored by:	The FreeBSD Foundation
MFC after:	1 week
2019-04-09 19:55:02 +00:00
..
autofs Ensure that directory entry padding bytes are zeroed. 2018-11-23 22:24:59 +00:00
cd9660 Ensure that directory entry padding bytes are zeroed. 2018-11-23 22:24:59 +00:00
cuse Use NULL for SYSINIT's last arg, which is a pointer type 2018-05-18 17:58:09 +00:00
deadfs sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00
devfs Ensure that directory entry padding bytes are zeroed. 2018-11-23 22:24:59 +00:00
ext2fs Remove unneeded mount point unlock function calls. 2019-03-15 11:49:46 +00:00
fdescfs Ensure that directory entry padding bytes are zeroed. 2018-11-23 22:24:59 +00:00
fifofs Rework pathconf handling for FIFOs. 2017-12-19 22:39:05 +00:00
fuse fusefs: fix a panic on mount 2019-04-06 18:04:04 +00:00
msdosfs Fix dirty buf exhaustion easily triggered with msdosfs. 2019-04-09 19:55:02 +00:00
nandfs Add _PC_ACL_* to vop_stdpathconf 2019-03-11 20:40:56 +00:00
nfs Add INET6 support for the upcalls to the nfsuserd daemon. 2019-04-06 21:53:46 +00:00
nfsclient Use IN_foo() macros from sys/netinet/in.h inplace of handcrafted code 2019-04-04 19:01:13 +00:00
nfsserver Drop unused 'p' argument to nfsv4_strtogid(). 2019-03-12 15:07:47 +00:00
nullfs nullfs: fix unmounts when filesystem is active. 2019-03-21 13:30:48 +00:00
procfs Plug memory disclosures via ptrace(2). 2018-12-03 20:54:17 +00:00
pseudofs PFS: Bump NAMELEN and don't require clients to be sleepable 2019-02-20 20:55:02 +00:00
smbfs [smbfs] Allow semicolon in mounts that support long names 2019-01-20 05:52:16 +00:00
tmpfs tmpfs: plug holes on rw->ro mount update. 2019-04-02 13:59:04 +00:00
udf Ensure that directory entry padding bytes are zeroed. 2018-11-23 22:24:59 +00:00
unionfs sys: further adoption of SPDX licensing ID tags. 2017-11-20 19:43:44 +00:00