• L
    vfs: simplify and shrink stack frame of link_path_walk() · d6bb3e90
    Linus Torvalds 提交于
    Commit 9226b5b4 ("vfs: avoid non-forwarding large load after small
    store in path lookup") made link_path_walk() always access the
    "hash_len" field as a single 64-bit entity, in order to avoid mixed size
    accesses to the members.
    
    However, what I didn't notice was that that effectively means that the
    whole "struct qstr this" is now basically redundant.  We already
    explicitly track the "const char *name", and if we just use "u64
    hash_len" instead of "long len", there is nothing else left of the
    "struct qstr".
    
    We do end up wanting the "struct qstr" if we have a filesystem with a
    "d_hash()" function, but that's a rare case, and we might as well then
    just squirrell away the name and hash_len at that point.
    
    End result: fewer live variables in the loop, a smaller stack frame, and
    better code generation.  And we don't need to pass in pointers variables
    to helper functions any more, because the return value contains all the
    relevant information.  So this removes more lines than it adds, and the
    source code is clearer too.
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    d6bb3e90
namei.c 111.2 KB