Skip to content
Snippets Groups Projects
  • Al Viro's avatar
    8fd3395e
    get rid of ...lookup...fdget_rcu() family · 8fd3395e
    Al Viro authored
    
    Once upon a time, predecessors of those used to do file lookup
    without bumping a refcount, provided that caller held rcu_read_lock()
    across the lookup and whatever it wanted to read from the struct
    file found.  When struct file allocation switched to SLAB_TYPESAFE_BY_RCU,
    that stopped being feasible and these primitives started to bump the
    file refcount for lookup result, requiring the caller to call fput()
    afterwards.
    
    But that turned them pointless - e.g.
    	rcu_read_lock();
    	file = lookup_fdget_rcu(fd);
    	rcu_read_unlock();
    is equivalent to
    	file = fget_raw(fd);
    and all callers of lookup_fdget_rcu() are of that form.  Similarly,
    task_lookup_fdget_rcu() calls can be replaced with calling fget_task().
    task_lookup_next_fdget_rcu() doesn't have direct counterparts, but
    its callers would be happier if we replaced it with an analogue that
    deals with RCU internally.
    
    Reviewed-by: default avatarChristian Brauner <brauner@kernel.org>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
    8fd3395e
    History
    get rid of ...lookup...fdget_rcu() family
    Al Viro authored
    
    Once upon a time, predecessors of those used to do file lookup
    without bumping a refcount, provided that caller held rcu_read_lock()
    across the lookup and whatever it wanted to read from the struct
    file found.  When struct file allocation switched to SLAB_TYPESAFE_BY_RCU,
    that stopped being feasible and these primitives started to bump the
    file refcount for lookup result, requiring the caller to call fput()
    afterwards.
    
    But that turned them pointless - e.g.
    	rcu_read_lock();
    	file = lookup_fdget_rcu(fd);
    	rcu_read_unlock();
    is equivalent to
    	file = fget_raw(fd);
    and all callers of lookup_fdget_rcu() are of that form.  Similarly,
    task_lookup_fdget_rcu() calls can be replaced with calling fget_task().
    task_lookup_next_fdget_rcu() doesn't have direct counterparts, but
    its callers would be happier if we replaced it with an analogue that
    deals with RCU internally.
    
    Reviewed-by: default avatarChristian Brauner <brauner@kernel.org>
    Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>