• Christian Brauner's avatar
    libfs: improve path_from_stashed() helper · 159a0d9f
    Christian Brauner authored
    In earlier patches we moved both nsfs and pidfs to path_from_stashed().
    The helper currently tries to add and stash a new dentry if a reusable
    dentry couldn't be found and returns EAGAIN if it lost the race to stash
    the dentry. The caller can use EAGAIN to retry.
    
    The helper and the two filesystems be written in a way that makes
    returning EAGAIN unnecessary. To do this we need to change the
    dentry->d_prune() implementation of nsfs and pidfs to not simply replace
    the stashed dentry with NULL but to use a cmpxchg() and only replace
    their own dentry.
    
    Then path_from_stashed() can then be changed to not just stash a new
    dentry when no dentry is currently stashed but also when an already dead
    dentry is stashed. If another task managed to install a dentry in the
    meantime it can simply be reused. Pack that into a loop and call it a
    day.
    Suggested-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    Link: https://lore.kernel.org/r/CAHk-=wgtLF5Z5=15-LKAczWm=-tUjHO+Bpf7WjBG+UU3s=fEQw@mail.gmail.comSigned-off-by: default avatarChristian Brauner <brauner@kernel.org>
    159a0d9f
pidfs.c 7.18 KB