On 10/15, Christian Brauner wrote:
>
> +static inline bool task_alive(struct pid *pid)
> +{
> +     bool alive = true;
> +
> +     rcu_read_lock();
> +     if (!pid_task(pid, PIDTYPE_PID))
> +             alive = false;
> +     rcu_read_unlock();
> +
> +     return alive;
> +}

Well, the usage of rcu_read_lock/unlock looks confusing to me...

I mean, this helper does not need rcu lock at all. Except
rcu_dereference_check() will complain.

        static inline bool task_alive(struct pid *pid)
        {
                bool alive;

                /* shut up rcu_dereference_check() */
                rcu_lock_acquire(&rcu_lock_map);
                alive = !!pid_task(pid, PIDTYPE_PID));
                rcu_lock_release(&rcu_lock_map);

                return alive;
        }

looks more clear imo.

But in fact I'd suggest to simply use !hlist_empty(&pid->tasks[PIDTYPE_PID])
in pidfd_show_fdinfo() and do not add a new helper.

Oleg.

Reply via email to