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
Mateusz Guzik
ac7715471c
cache: stop checkpointing cn_nameptr
...
For aborts cn_nameptr is the same as cn_pnbuf. For partial results
the same cn_nameptr is to be used.
2021-01-07 23:29:38 +00:00
Mateusz Guzik
0f1fc3a31f
cache: stop manipulating pathlen
...
It is a copy-pasto from regular lookup. Add debug to ensure the result
is the same.
2021-01-07 23:26:53 +00:00
Mateusz Guzik
f2b794e1e9
cache: unengrish the comment in previous commit
...
Reported by: rpokala, brd
2021-01-06 23:46:05 +00:00
Mateusz Guzik
deabdc6868
cache: stop pre-checking seqc when starting the lookup
...
Tested by: pho
2021-01-06 07:28:07 +00:00
Mateusz Guzik
71a6a0b545
cache: skip checking for spurious slashes if possible
...
Tested by: pho
2021-01-06 07:28:06 +00:00
Mateusz Guzik
33f3e81df5
cache: combine fast path enabled status into one flag
...
Tested by: pho
2021-01-06 07:28:06 +00:00
Mateusz Guzik
dbbbc07cc3
cache: split handling of 0 and non-0 error codes
...
Tested by: pho
2021-01-06 07:07:24 +01:00
Mateusz Guzik
a1a8f8ada1
cache: deinline state handling
...
The intent is to reduce branchfest when finishing the lookup.
Tested by: pho
2021-01-06 07:05:22 +01:00
Mateusz Guzik
05803be000
cache: stop setting cn_nameptr on entry as matches cn_pnbuf already
...
While here tidy up other asserts.
2021-01-06 07:03:41 +01:00
Mateusz Guzik
3814bea00a
cache: drop the now spurious doomed check when crossing a mount point
2021-01-03 21:22:16 +00:00