On Wed, Jul 01, 2020 at 08:23:57AM +0000, Hans Petter Selasky wrote:
> Author: hselasky
> Date: Wed Jul 1 08:23:57 2020
> New Revision: 362829
> URL: https://svnweb.freebsd.org/changeset/base/362829
>
> Log:
> The "pid" field in the LinuxKPI task struct is typically set to the thread
> ID
> and not the process ID. Make sure the linux_task_exiting() function uses
> tdfind()
> to lookup the BSD procedure structure pointer by the "pid" field, and only
> fallback to pfind() when no match is found! This makes linux_task_exiting()
> in line with the rest of the code.
>
> Differential Revision: https://reviews.freebsd.org/D25509
> Submitted by: Greg V <greg@unrelenting.technology>
> MFC after: 1 week
> Sponsored by: Mellanox Technologies
>
> Modified:
> head/sys/compat/linuxkpi/common/src/linux_current.c
>
> Modified: head/sys/compat/linuxkpi/common/src/linux_current.c
> ==============================================================================
> --- head/sys/compat/linuxkpi/common/src/linux_current.c Wed Jul 1
> 05:59:08 2020 (r362828)
> +++ head/sys/compat/linuxkpi/common/src/linux_current.c Wed Jul 1
> 08:23:57 2020 (r362829)
> @@ -219,11 +219,21 @@ linux_get_pid_task(pid_t pid)
> bool
> linux_task_exiting(struct task_struct *task)
> {
> + struct thread *td;
> struct proc *p;
> bool ret;
>
> ret = false;
> - p = pfind(task->pid);
> +
> + /* try to find corresponding thread */
> + td = tdfind(task->pid, -1);
> + if (td != NULL) {
> + p = td->td_proc;
> + } else {
> + /* try to find corresponding procedure */
> + p = pfind(task->pid);
> + }
> +
> if (p != NULL) {
> if ((p->p_flag & P_WEXIT) != 0)
> ret = true;
It should be expressed as pget(pid, 0); instead of duplicating.
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"