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
Mateusz Guzik
82397d7919
vfs: denote vnode being a mount point with VIRF_MOUNTPOINT
...
Reviewed by: kib (previous version)
Differential Revision: https://reviews.freebsd.org/D27794
2021-01-03 06:50:06 +00:00
Mateusz Guzik
51bf55fa6c
cache: stop checkpointing cn_namelen
...
The variable is recomputed by regular lookup from the get go.
2021-01-03 06:50:06 +00:00
Mateusz Guzik
7220a10b5b
cache: predict on no spurious slashes in cache_fpl_handle_root
...
This is a step towards speculatively not handling them.
2021-01-03 06:50:06 +00:00
Mateusz Guzik
30a2fc91fa
cache: postpone NAME_MAX check as it may be unnecessary
2021-01-03 06:50:06 +00:00
Mateusz Guzik
eca899bd5d
cache: remove spurious null check in sdt probe
2021-01-03 06:50:06 +00:00
Mateusz Guzik
1365b5f86f
cache: fold NCF_WHITE check into the rest
...
Tested by: pho
2021-01-01 00:10:43 +00:00
Mateusz Guzik
d7c62d98c9
cache: call cache_fplookup_modifying in neg
...
Tested by: pho
2021-01-01 00:10:43 +00:00
Mateusz Guzik
6fe7de1a25
cache: refactor cache_fpl_handle_root to fit the rest of the code better
...
Tested by: pho
2021-01-01 00:10:43 +00:00
Mateusz Guzik
e17e01bd0e
cache: refactor dot handling
...
Tested by: pho
2021-01-01 00:10:43 +00:00
Mateusz Guzik
4651db56c7
cache: remove a branch from mount point checking
...
Tested by: pho
2021-01-01 00:10:42 +00:00
Mateusz Guzik
0b5bd1afd8
cache: support lockless lookup of degenerate paths
...
Tested by: pho
2021-01-01 00:10:42 +00:00
Mateusz Guzik
1d6eb97677
cache: save on branching when parsing the path by inserting a sentinel
...
Tested by: pho
2021-01-01 00:10:42 +00:00
Mateusz Guzik
67297766b5
cache: hoist trailing slash and degenerate path handling out of the loop
...
Tested by: pho
2021-01-01 00:10:42 +00:00
Mateusz Guzik
0c09f4b0cc
cache: work around corner case of dvp == tvp in cache_fplookup_final_modifying
...
Fixes a panic where the kernel would unlock an unheld lock coming from
rename looking up "foo/." as the source.
Reported by: markj (syzkaller)
2020-12-28 21:38:20 +00:00
Mateusz Guzik
4ab7d9f484
cache: reduce engrish in previous commit
2020-12-28 02:05:30 +00:00