• NeilBrown's avatar
    VFS: replace {, total_}link_count in task_struct with pointer to nameidata · 756daf26
    NeilBrown authored
    task_struct currently contains two ad-hoc members for use by the VFS:
    link_count and total_link_count.  These are only interesting to fs/namei.c,
    so exposing them explicitly is poor layering.  Incidentally, link_count
    isn't used anymore, so it can just die.
    
    This patches replaces those with a single pointer to 'struct nameidata'.
    This structure represents the current filename lookup of which
    there can only be one per process, and is a natural place to
    store total_link_count.
    
    This will allow the current "nameidata" argument to all
    follow_link operations to be removed as current->nameidata
    can be used instead in the _very_ few instances that care about
    it at all.
    
    As there are occasional circumstances where pathname lookup can
    recurse, such as through kern_path_locked, we always save and old
    current->nameidata (if there is one) when setting a new value, and
    make sure any active link_counts are preserved.
    
    follow_mount and follow_automount now get a 'struct nameidata *'
    rather than 'int flags' so that they can directly access
    total_link_count, rather than going through 'current'.
    Suggested-by: default avatarAl Viro <viro@ZenIV.linux.org.uk>
    Signed-off-by: default avatarNeilBrown <neilb@suse.de>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    756daf26
namei.c 114 KB