git: tmpfs - Fix data loss issues
Matthew Dillon
dillon at crater.dragonflybsd.org
Sun Feb 11 08:57:23 PST 2018
commit a1b829f26cc7a233e4b9acf03ea71c2379ec8f64
Author: Matthew Dillon <dillon at apollo.backplane.com>
Date: Sat Feb 10 22:18:19 2018 -0800
tmpfs - Fix data loss issues
* Fix a data loss issue that can occur when vnodes are cycled. This
can be replicated by setting kern.maxvnodes to a fairly low value.
Vnode recycling does not necessarily issue a vinvalbuf() when clean
pages are present, which tmpfs needs to retain.
* Fix a data loss issue when swap becomes full or when the system has
no swap configured. When tmpfs tries to flush to swap and fails,
pages can remain associated with the vnode after the vinvalbuf()
call, and then lost when the vnode is recycled.
* The above fixes are accomplished by call vinvalbuf() on vnode deactivation
to make sure that all buffers have been flushed, and then moving any
pages that remain to tn_aobj.
The pages are moved back when the vnode is reinstantiated and an open(),
read(), write(), or setattr (i.e. truncation or extension) is called.
We try to avoid moving the pages back if the vnode is merely *stat()d
or deleted.
* Use cluster_read() by default to try to improve read throughput when
pages are swap-backed.
Reported-by: zrj, marino
Summary of changes:
sys/vfs/tmpfs/tmpfs.h | 20 +++----
sys/vfs/tmpfs/tmpfs_subr.c | 11 ++--
sys/vfs/tmpfs/tmpfs_vnops.c | 133 +++++++++++++++++++++++++++++++++++++++++++-
3 files changed, 146 insertions(+), 18 deletions(-)
http://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/a1b829f26cc7a233e4b9acf03ea71c2379ec8f64
--
DragonFly BSD source repository
More information about the Commits
mailing list