linux-uconsole/drivers/staging
NeilBrown f1ee616214 VFS: don't keep disconnected dentries on d_anon
The original purpose of the per-superblock d_anon list was to
keep disconnected dentries in the cache between consecutive
requests to the NFS server.  Dentries can be disconnected if
a client holds a file open and repeatedly performs IO on it,
and if the server drops the dentry, whether due to memory
pressure, server restart, or "echo 3 > /proc/sys/vm/drop_caches".

This purpose was thwarted by commit 75a6f82a0d ("freeing unlinked
file indefinitely delayed") which caused disconnected dentries
to be freed as soon as their refcount reached zero.

This means that, when a dentry being used by nfsd gets disconnected, a
new one needs to be allocated for every request (unless requests
overlap).  As the dentry has no name, no parent, and no children,
there is little of value to cache.  As small memory allocations are
typically fast (from per-cpu free lists) this likely has little cost.

This means that the original purpose of s_anon is no longer relevant:
there is no longer any need to keep disconnected dentries on a list so
they appear to be hashed.

However, s_anon now has a new use.  When you mount an NFS filesystem,
the dentry stored in s_root is just a placebo.  The "real" root dentry
is allocated using d_obtain_root() and so it kept on the s_anon list.
I don't know the reason for this, but suspect it related to NFSv4
where a mount of "server:/some/path" require NFS to look up the root
filehandle on the server, then walk down "/some" and "/path" to get
the filehandle to mount.

Whatever the reason, NFS depends on the s_anon list and on
shrink_dcache_for_umount() pruning all dentries on this list.  So we
cannot simply remove s_anon.

We could just leave the code unchanged, but apart from that being
potentially confusing, the (unfair) bit-spin-lock which protects
s_anon can become a bottle neck when lots of disconnected dentries are
being created.

So this patch renames s_anon to s_roots, and stops storing
disconnected dentries on the list.  Only dentries obtained with
d_obtain_root() are now stored on this list.  There are many fewer of
these (only NFS and NILFS2 use the call, and only during filesystem
mount) so contention on the bit-lock will not be a problem.

Possibly an alternate solution should be found for NFS and NILFS2, but
that would require understanding their needs first.

Signed-off-by: NeilBrown <neilb@suse.com>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
2017-12-25 20:22:07 -05:00
..
android Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
board License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
ccree staging: ccree: simplify ioread/iowrite 2017-11-06 16:47:04 +01:00
clocking-wizard
comedi Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
dgnc Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
emxx_udc
fbtft Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
fsl-dpaa2 staging: fsl-dpaa2/eth: Extra headroom in RX buffers 2017-11-03 16:19:27 +01:00
fsl-mc staging: fsl-mc/dpio: Fix incorrect comparison 2017-10-03 18:34:56 +02:00
fwserial Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
gdm724x Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
goldfish staging: goldfish: (Coding Style) Fixed parenthesis alignment. 2017-08-31 18:21:37 +02:00
greybus treewide: setup_timer() -> timer_setup() 2017-11-21 15:57:07 -08:00
gs_fpgaboot staging: gs_fpgaboot: pr_err() strings should end with newlines 2017-10-03 18:36:25 +02:00
iio Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
irda treewide: Remove TIMER_FUNC_TYPE and TIMER_DATA_TYPE casts 2017-11-21 16:35:54 -08:00
ks7010 Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
lustre VFS: don't keep disconnected dentries on d_anon 2017-12-25 20:22:07 -05:00
media treewide: setup_timer() -> timer_setup() 2017-11-21 15:57:07 -08:00
most treewide: setup_timer() -> timer_setup() 2017-11-21 15:57:07 -08:00
mt29f_spinand staging: mt29f_spinand: Enable the read ECC before program the page 2017-09-18 12:25:31 +02:00
netlogic staging: net: netlogic: Fix alignment issue 2017-10-18 16:17:14 +02:00
nvec License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
octeon staging: octeon: fix line over 80 characters 2017-08-18 15:57:17 -07:00
octeon-usb
olpc_dcon License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
pi433 Merge branch 'misc.compat' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2017-11-17 11:54:55 -08:00
rtl8188eu Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
rtl8192e Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
rtl8192u treewide: setup_timer() -> timer_setup() 2017-11-21 15:57:07 -08:00
rtl8712 treewide: setup_timer() -> timer_setup() 2017-11-21 15:57:07 -08:00
rtl8723bs Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
rtlwifi staging: rtl8822be: fix wrong dma unmap len 2017-11-03 14:49:08 +01:00
rts5208 Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
skein License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
sm750fb Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
speakup treewide: Switch DEFINE_TIMER callbacks to struct timer_list * 2017-11-21 15:57:05 -08:00
typec staging: typec: tcpci: mark expected switch fall-through in tcpci_to_typec_cc 2017-10-18 16:42:28 +02:00
unisys treewide: setup_timer() -> timer_setup() 2017-11-21 15:57:07 -08:00
vboxvideo main drm pull request for v4.15 2017-11-15 20:42:10 -08:00
vc04_services Merge branch 'work.get_user_pages_fast' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs 2017-11-17 12:38:51 -08:00
vme Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
vt6655 Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
vt6656 Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
wilc1000 treewide: setup_timer() -> timer_setup() 2017-11-21 15:57:07 -08:00
wlan-ng USB/PHY patches for 4.15-rc1 2017-11-13 21:14:07 -08:00
xgifb Staging/IIO patches for 4.15-rc1 2017-11-13 20:53:28 -08:00
Kconfig Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2017-09-06 14:45:08 -07:00
Makefile License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00