Mateusz Guzik
7e9680d3be
cache: whack "set but not used" warnings
2021-11-14 16:57:43 +00:00
Konstantin Belousov
9a0bee9f6a
Make vn_fullpath_hardlink() externally callable
...
Reviewed by: markj
Tested by: pho
Sponsored by: The FreeBSD Foundation
MFC after: 1 week
Differential revision: https://reviews.freebsd.org/D32611
2021-10-28 20:49:26 +03:00
Mateusz Guzik
628c3b307f
cache: only let non-dir descriptors through when doing EMPTYPATH lookups
...
Otherwise things like realpath against a file and '.' end up with an
illegal state of having a regular vnode for the parent.
Reported by: syzbot+9aa5439dd9c708aeb1a8@syzkaller.appspotmail.com
2021-10-27 18:27:47 +00:00
Mateusz Guzik
1045352f15
cache: only assert on flags when dealing with EMPTYPATH
...
Reported by: syzbot+bd48ee0843206a09e6b8@syzkaller.appspotmail.com
Fixes: 7dd419cabc ("cache: add empty path support")
2021-10-17 08:42:47 +00:00
Mateusz Guzik
7dd419cabc
cache: add empty path support
...
This avoids spurious drop offs as EMPTY is passed regardless of the
actual path name.
Pushign the work inside the lookup instead of just ignorign the flag
allows avoid checking for empty pathname for all other lookups.
2021-10-16 20:08:37 +00:00
Mateusz Guzik
b4a58fbf64
vfs: remove cn_thread
...
It is always curthread.
Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D32453
2021-10-11 13:21:47 +00:00
Mateusz Guzik
a2cb65b8fe
cache: count vnodes in cache_purgevfs
2021-09-18 10:16:50 +00:00
Mateusz Guzik
b65ad70195
cache: retire cache_fast_revlookup sysctl
...
Sponsored by: Rubicon Communications, LLC ("Netgate")
2021-08-23 15:31:44 +02:00
Mateusz Guzik
b30e7cb7fa
cache: add OPENREAD and OPENWRITE to fast path lookup
2021-08-07 13:02:38 +02:00
Mateusz Guzik
844aa31c6d
cache: add cache_enter_time_flags
2021-07-12 07:03:14 +02:00
Mateusz Guzik
12288bd999
cache: fix lockless absolute symlink traversal to non-fp mounts
...
Said lookups would incorrectly fail with EOPNOTSUP.
Reported by: kib
2021-05-11 04:30:12 +00:00
Mark Johnston
c8bbb1272c
vfs: Fix error handling in vn_fullpath_hardlink()
...
vn_fullpath_any_smr() will return a positive error number if the
caller-supplied buffer isn't big enough. In this case the error must be
propagated up, otherwise we may copy out uninitialized bytes.
Reported by: syzkaller+KMSAN
Reviewed by: mjg, kib
MFC aftr: 3 days
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D30198
2021-05-10 20:22:27 -04:00
Mateusz Guzik
074abaccfa
cache: remove incomplete lockless lockout support during resize
...
This is already properly handled thanks to 2 step hash replacement.
2021-04-28 19:53:25 +00:00
Mateusz Guzik
4f0279e064
cache: extend mismatch vnode assert print to include the name
2021-04-15 07:55:43 +00:00
Mateusz Guzik
72b3b5a941
vfs: replace vfs_smr_quiesce with vfs_smr_synchronize
...
This ends up using a smr specific method.
Suggested by: markj
Tested by: pho
2021-04-08 11:14:45 +00:00
Mateusz Guzik
13b3862ee8
cache: update an assert on CACHE_FPL_STATUS_ABORTED
...
Since symlink support it can get upgraded to CACHE_FPL_STATUS_DESTROYED.
Reported by: bdrewery
2021-04-06 22:31:58 +02:00
Mateusz Guzik
f79bd71def
cache: add high level overview
...
Differential Revision: https://reviews.freebsd.org/D28675
2021-04-02 05:11:05 +02:00
Mateusz Guzik
dc532884d5
cache: fix resizing in face of lockless lookup
...
Reported by: pho
Tested by: pho
2021-04-02 05:11:05 +02:00
Mateusz Guzik
1239a72221
cache: temporarily drop the assert that dvp != vp when adding an entry
...
Historically it was allowed for any names, but arguably should never be
even attempted. Allow it again since there is a release pending and
allowing it is bug-compatible with previous behavior.
Reported by: otis
2021-02-27 22:29:50 +00:00
Mateusz Guzik
39e0c3f686
cache: assorted comment fixups
2021-02-09 17:09:44 +01:00
Mateusz Guzik
2f8a844635
cache: remove the largely obsolete general description
...
Examples of inconsistencies with the current state:
- references LRU of all entries, removed years ago
- references a non-existent lock (neglist)
- claims negative entries have a NULL target
It will be replaced with a more accurate and more informative
description.
In the meantime take it out so it stops misleading.
2021-02-06 00:28:40 +01:00
Mateusz Guzik
0e1594e60e
cache: fix vfs:namecache:lookup:miss probe call sites
2021-02-06 00:28:40 +01:00
Mateusz Guzik
2e96132a7d
cache: drop spurious arg from panic in cache_validate
...
vp is already reported when noting mismatch
2021-02-06 00:28:39 +01:00
Mateusz Guzik
b54ed778fe
cache: comment on FNV
2021-02-06 00:13:57 +01:00
Mateusz Guzik
45456abc4c
cache: fix trailing slash support in face of permission problems
...
Reported by: Johan Hendriks <joh.hendriks gmail.com>
Tested by: kevans
2021-02-02 18:13:51 +00:00
Mateusz Guzik
6f19dc2124
cache: add delayed degenerate path handling
2021-02-01 04:53:23 +00:00
Mateusz Guzik
bbfb1edd70
cache: move hash computation into the parsing loop
2021-02-01 04:36:45 +00:00
Mateusz Guzik
e027e24bfa
cache: add trailing slash support
...
Tested by: pho
2021-01-31 12:02:46 +00:00
Mateusz Guzik
8cbd164a17
cache: handle NOFOLLOW requests for symlinks
...
Tested by: pho
2021-01-31 12:02:46 +00:00
Mateusz Guzik
5c325977b1
cache: add missing MNT_NOSYMFOLLOW check to symlink traversal
2021-01-27 15:08:38 +00:00
Mateusz Guzik
5fc384d181
cache: fallback when encountering a mount point during .. lookup
...
The current abort is overzealous.
2021-01-27 16:00:31 +01:00
Mateusz Guzik
a098a831a1
cache: tidy up handling of foo/bar lookups where foo is not a directory
...
The code was performing an avoidable check for doomed state to account
for foo being a VDIR but turning VBAD. Now that dooming puts a vnode
in a permanent "modify" state this is no longer necessary as the final
status check will catch it.
2021-01-26 20:42:53 +00:00
Mateusz Guzik
a51eca7936
cache: stop referring to removing entries as invalidating them
...
Said use is a remnant from the old code and clashes with the NCF_INVALID
flag.
2021-01-26 20:42:53 +00:00
Mateusz Guzik
6943671b48
cache: convert cache_fplookup_parse to void now that it always succeeds
2021-01-26 13:24:03 +01:00
Mateusz Guzik
e7cf562a40
cache: change ->v_cache_dd synchronisation rules
...
Instead of resorting to seqc modification take advantage of immutability
of entries and check if the entry still matches after everything got
prepared.
2021-01-25 22:41:13 +00:00
Mateusz Guzik
6f08427649
cache: make ->v_cache_dd accesses atomic-clean for lockless usage
2021-01-25 22:41:13 +00:00
Mateusz Guzik
6ef8fede86
cache: make ->nc_flag accesses atomic-clean for lockless usage
2021-01-25 22:41:13 +00:00
Mateusz Guzik
ffcf8f97f8
cache: store vnodes in local vars in cache_zap_locked
2021-01-25 22:41:13 +00:00
Mateusz Guzik
868643e722
cache: assorted cleanups
2021-01-25 19:45:24 +00:00
Mateusz Guzik
1c7a65adb0
cache: track calls to cache_symlink_alloc with unsupported size
...
While here assert on size passed to free.
2021-01-25 19:45:23 +00:00
Mateusz Guzik
02ec31bdf6
cache: add back target entry on rename
2021-01-23 18:10:16 +00:00
Mateusz Guzik
739ecbcf1c
cache: add symlink support to lockless lookup
...
Reviewed by: kib (previous version)
Tested by: pho (previous version)
Differential Revision: https://reviews.freebsd.org/D27488
2021-01-23 15:04:43 +00:00
Mateusz Guzik
2171b8e8a2
cache: augment sdt probe in cache_fplookup_dot
...
Same as 6d386b4c ("cache: save a branch in cache_fplookup_next")
2021-01-20 07:23:14 +00:00
Mateusz Guzik
aae03cfe64
cache: whitespace nit in cache_fplookup_modifying
2021-01-20 07:22:04 +00:00
Mateusz Guzik
57dab0292a
cache: fix some typos
2021-01-19 10:17:14 +01:00
Mateusz Guzik
84ab77ad27
cache: drop-write only var from cache_fplookup_preparse
2021-01-19 10:13:30 +01:00
Mateusz Guzik
6d386b4c8a
cache: save a branch in cache_fplookup_next
...
Previously the code would branch on top find out whether it should
branch on SDT probe and bumping the numposhits counter, depending
on cache_fplookup_cross_mount.
Arguably it should be done regardless of what said function returns.
2021-01-19 10:08:24 +01:00
Mateusz Guzik
70ba77706d
vfs: extend vfs:namei:lookup:return probe with nameidata
2021-01-12 13:35:27 +00:00
Mateusz Guzik
8ddea0b127
cache: just assign ni_resflags = NIRES_ABS
...
It is guaranteed to be 0 on entry.
2021-01-08 13:57:10 +00:00
Mateusz Guzik
fee405e057
cache: stop checkpointing cn_flags
...
They are only modified, if ever, for the last component.
2021-01-07 23:29:52 +00:00