mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2025-04-15 08:27:34 +07:00
![]() ->last_type values are set in 3 places: path_init() (sets to LAST_ROOT), link_path_walk (LAST_NORM/DOT/DOTDOT) and pick_link (LAST_BIND). The are checked in walk_component(), lookup_last() and do_last(). They also get copied to the caller by filename_parentat(). In the last 3 cases the value is what we had at the return from link_path_walk(). In case of walk_component() it's either directly downstream from assignment in link_path_walk() or, when called by lookup_last(), the value we have at the return from link_path_walk(). The value at the entry into link_path_walk() can survive to return only if the pathname contains nothing but slashes. Note that pick_link() never returns such - pure jumps are handled directly. So for the calls of link_path_walk() for trailing symlinks it does not matter what value had been there at the entry; the value at the return won't depend upon it. There are 3 call chains that might have pick_link() storing LAST_BIND: 1) pick_link() from step_into() from walk_component() from link_path_walk(). In that case we will either be parsing the next component immediately after return into link_path_walk(), which will overwrite the ->last_type before anyone has a chance to look at it, or we'll fail, in which case nobody will be looking at ->last_type at all. 2) pick_link() from step_into() from walk_component() from lookup_last(). The value is never looked at due to the above; it won't affect the value seen at return from any link_path_walk(). 3) pick_link() from step_into() from do_last(). Ditto. In other words, assignemnt in pick_link() is pointless, and so is LAST_BIND itself; nothing ever looks at that value. Kill it off. And make link_path_walk() _always_ assign ->last_type - in the only case when the value at the entry might survive to the return that value is always LAST_ROOT, inherited from path_init(). Move that assignment from path_init() into the beginning of link_path_walk(), to consolidate the things. Historical note: LAST_BIND used to be used for the kludge with trailing pure jump symlinks (extra iteration through the top-level loop). No point keeping it anymore... Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> |
||
---|---|---|
.. | ||
caching | ||
cifs | ||
configfs | ||
ext4 | ||
nfs | ||
9p.txt | ||
adfs.txt | ||
affs.txt | ||
afs.txt | ||
api-summary.rst | ||
autofs-mount-control.txt | ||
autofs.rst | ||
automount-support.txt | ||
befs.txt | ||
bfs.txt | ||
btrfs.txt | ||
ceph.txt | ||
coda.txt | ||
cramfs.txt | ||
dax.txt | ||
debugfs.txt | ||
devpts.txt | ||
directory-locking.rst | ||
dlmfs.txt | ||
dnotify.txt | ||
ecryptfs.txt | ||
efivarfs.txt | ||
erofs.txt | ||
ext2.txt | ||
ext3.txt | ||
f2fs.txt | ||
fiemap.txt | ||
files.txt | ||
fscrypt.rst | ||
fsverity.rst | ||
fuse-io.txt | ||
fuse.rst | ||
gfs2-glocks.txt | ||
gfs2-uevents.txt | ||
gfs2.txt | ||
hfs.txt | ||
hfsplus.txt | ||
hpfs.txt | ||
index.rst | ||
inotify.txt | ||
isofs.txt | ||
journalling.rst | ||
locking.rst | ||
locks.txt | ||
mandatory-locking.txt | ||
mount_api.txt | ||
nilfs2.txt | ||
ntfs.txt | ||
ocfs2-online-filecheck.txt | ||
ocfs2.txt | ||
omfs.txt | ||
orangefs.txt | ||
overlayfs.rst | ||
path-lookup.rst | ||
path-lookup.txt | ||
porting.rst | ||
proc.txt | ||
qnx6.txt | ||
quota.txt | ||
ramfs-rootfs-initramfs.txt | ||
relay.txt | ||
romfs.txt | ||
seq_file.txt | ||
sharedsubtree.txt | ||
splice.rst | ||
spufs.txt | ||
squashfs.txt | ||
sysfs-pci.txt | ||
sysfs-tagging.txt | ||
sysfs.txt | ||
sysv-fs.txt | ||
tmpfs.txt | ||
ubifs-authentication.rst | ||
ubifs.txt | ||
udf.txt | ||
vfat.rst | ||
vfs.rst | ||
virtiofs.rst | ||
xfs-delayed-logging-design.txt | ||
xfs-self-describing-metadata.txt | ||
zonefs.txt |