From owner-svn-src-all@FreeBSD.ORG Sat Aug 30 00:07:53 2014 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTPS id 6D9712A9; Sat, 30 Aug 2014 00:07:53 +0000 (UTC) Received: from mail-qc0-x22f.google.com (mail-qc0-x22f.google.com [IPv6:2607:f8b0:400d:c01::22f]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (Client CN "smtp.gmail.com", Issuer "Google Internet Authority G2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id EF8411D23; Sat, 30 Aug 2014 00:07:52 +0000 (UTC) Received: by mail-qc0-f175.google.com with SMTP id c9so3152034qcz.6 for ; Fri, 29 Aug 2014 17:07:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:sender:in-reply-to:references:date:message-id:subject :from:to:cc:content-type; bh=qFjLm4wHIrP7Rosy7lMn84OL49kPnfj0qEpLSPnoVhs=; b=yL77YM2H+3SbKB1owtUJTfBQMML8xUzW6EYQWqLZlkkgEjqyMxBl4wb2aOdrOHjN6Y ir0eiei++dBz5c6ud7ul9SY1FUrqj8zlZqv+28UB94/vRPNjIgfgedwndhwWTstw2YHa E+osIwnDX2hbnELztv0xrsBecOGtjH9OztA+Vjjd1NDIicRQQSdwtp3UoRV9H/5/CuBa ZGTxavg8xF1q7P+pSrC+OUdO/S68fTUOSYN33t+TQqGIoqRqubzYRogmPWOB5Y+I9eTh YrnzZ1+QP/W/dNiZD7eoBoiT4sNcqUpFbnQeitlESysQP2HV6Mxum1pbMyl56sfrT85k F2fg== MIME-Version: 1.0 X-Received: by 10.140.31.75 with SMTP id e69mr3220198qge.2.1409357272042; Fri, 29 Aug 2014 17:07:52 -0700 (PDT) Sender: adrian.chadd@gmail.com Received: by 10.224.39.139 with HTTP; Fri, 29 Aug 2014 17:07:51 -0700 (PDT) In-Reply-To: <201408280841.s7S8fC6X012986@svn.freebsd.org> References: <201408280841.s7S8fC6X012986@svn.freebsd.org> Date: Fri, 29 Aug 2014 17:07:51 -0700 X-Google-Sender-Auth: sex9n4z8qsZEpLsuaF-H-Z1S3EQ Message-ID: Subject: Re: svn commit: r270745 - in head: bin/ps sys/compat/freebsd32 sys/kern sys/sys From: Adrian Chadd To: Mateusz Guzik Content-Type: text/plain; charset=UTF-8 Cc: "svn-src-head@freebsd.org" , "svn-src-all@freebsd.org" , "src-committers@freebsd.org" X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.18-1 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 30 Aug 2014 00:07:53 -0000 Hi! So I'm now getting panics in the process coredump path on -HEAD. The proctree lock isn't held. Assertion : proctree not locked @ kern_proc.c:795 path: sigexit() -> elf64_coredump() -> elf64_note_procstat_proc() -> kern_proc_out() -> fill_kinfo_proc() -> panic. What did you peeps do this time? :P -a On 28 August 2014 01:41, Mateusz Guzik wrote: > Author: mjg > Date: Thu Aug 28 08:41:11 2014 > New Revision: 270745 > URL: http://svnweb.freebsd.org/changeset/base/270745 > > Log: > Return real parent pid in kinfo (used by e.g. ps) > > Add a separate field which exports tracer pid and add a new keyword > ("tracer") for ps to display it. > > This is a follow up to r270444. > > Reviewed by: kib > MFC after: 1 week > Relnotes: yes > > Modified: > head/bin/ps/keyword.c > head/bin/ps/ps.1 > head/sys/compat/freebsd32/freebsd32.h > head/sys/kern/kern_proc.c > head/sys/sys/user.h > > Modified: head/bin/ps/keyword.c > ============================================================================== > --- head/bin/ps/keyword.c Thu Aug 28 08:25:15 2014 (r270744) > +++ head/bin/ps/keyword.c Thu Aug 28 08:41:11 2014 (r270745) > @@ -157,6 +157,7 @@ static VAR var[] = { > {"tdnam", "TDNAM", NULL, LJUST, tdnam, 0, CHAR, NULL, 0}, > {"time", "TIME", NULL, USER, cputime, 0, CHAR, NULL, 0}, > {"tpgid", "TPGID", NULL, 0, kvar, KOFF(ki_tpgid), UINT, PIDFMT, 0}, > + {"tracer", "TRACER", NULL, 0, kvar, KOFF(ki_tracer), UINT, PIDFMT, 0}, > {"tsid", "TSID", NULL, 0, kvar, KOFF(ki_tsid), UINT, PIDFMT, 0}, > {"tsiz", "TSIZ", NULL, 0, kvar, KOFF(ki_tsize), PGTOK, "ld", 0}, > {"tt", "TT ", NULL, 0, tname, 0, CHAR, NULL, 0}, > > Modified: head/bin/ps/ps.1 > ============================================================================== > --- head/bin/ps/ps.1 Thu Aug 28 08:25:15 2014 (r270744) > +++ head/bin/ps/ps.1 Thu Aug 28 08:41:11 2014 (r270745) > @@ -29,7 +29,7 @@ > .\" @(#)ps.1 8.3 (Berkeley) 4/18/94 > .\" $FreeBSD$ > .\" > -.Dd August 7, 2014 > +.Dd August 27, 2014 > .Dt PS 1 > .Os > .Sh NAME > @@ -665,6 +665,8 @@ accumulated CPU time, user + system (ali > .Cm cputime ) > .It Cm tpgid > control terminal process group ID > +.It Cm tracer > +tracer process ID > .\".It Cm trss > .\"text resident set size (in Kbytes) > .It Cm tsid > > Modified: head/sys/compat/freebsd32/freebsd32.h > ============================================================================== > --- head/sys/compat/freebsd32/freebsd32.h Thu Aug 28 08:25:15 2014 (r270744) > +++ head/sys/compat/freebsd32/freebsd32.h Thu Aug 28 08:41:11 2014 (r270745) > @@ -343,6 +343,7 @@ struct kinfo_proc32 { > char ki_loginclass[LOGINCLASSLEN+1]; > char ki_sparestrings[50]; > int ki_spareints[KI_NSPARE_INT]; > + int ki_tracer; > int ki_flag2; > int ki_fibnum; > u_int ki_cr_flags; > > Modified: head/sys/kern/kern_proc.c > ============================================================================== > --- head/sys/kern/kern_proc.c Thu Aug 28 08:25:15 2014 (r270744) > +++ head/sys/kern/kern_proc.c Thu Aug 28 08:41:11 2014 (r270745) > @@ -791,6 +791,8 @@ fill_kinfo_proc_only(struct proc *p, str > struct ucred *cred; > struct sigacts *ps; > > + /* For proc_realparent. */ > + sx_assert(&proctree_lock, SX_LOCKED); > PROC_LOCK_ASSERT(p, MA_OWNED); > bzero(kp, sizeof(*kp)); > > @@ -920,7 +922,9 @@ fill_kinfo_proc_only(struct proc *p, str > kp->ki_acflag = p->p_acflag; > kp->ki_lock = p->p_lock; > if (p->p_pptr) > - kp->ki_ppid = p->p_pptr->p_pid; > + kp->ki_ppid = proc_realparent(p)->p_pid; > + if (p->p_flag & P_TRACED) > + kp->ki_tracer = p->p_pptr->p_pid; > } > > /* > @@ -1166,6 +1170,7 @@ freebsd32_kinfo_proc_out(const struct ki > bcopy(ki->ki_comm, ki32->ki_comm, COMMLEN + 1); > bcopy(ki->ki_emul, ki32->ki_emul, KI_EMULNAMELEN + 1); > bcopy(ki->ki_loginclass, ki32->ki_loginclass, LOGINCLASSLEN + 1); > + CP(*ki, *ki32, ki_tracer); > CP(*ki, *ki32, ki_flag2); > CP(*ki, *ki32, ki_fibnum); > CP(*ki, *ki32, ki_cr_flags); > @@ -1287,10 +1292,11 @@ sysctl_kern_proc(SYSCTL_HANDLER_ARGS) > error = sysctl_wire_old_buffer(req, 0); > if (error) > return (error); > + sx_slock(&proctree_lock); > error = pget((pid_t)name[0], PGET_CANSEE, &p); > - if (error != 0) > - return (error); > - error = sysctl_out_proc(p, req, flags, 0); > + if (error == 0) > + error = sysctl_out_proc(p, req, flags, 0); > + sx_sunlock(&proctree_lock); > return (error); > } > > @@ -1318,6 +1324,7 @@ sysctl_kern_proc(SYSCTL_HANDLER_ARGS) > error = sysctl_wire_old_buffer(req, 0); > if (error != 0) > return (error); > + sx_slock(&proctree_lock); > sx_slock(&allproc_lock); > for (doingzomb=0 ; doingzomb < 2 ; doingzomb++) { > if (!doingzomb) > @@ -1422,11 +1429,13 @@ sysctl_kern_proc(SYSCTL_HANDLER_ARGS) > error = sysctl_out_proc(p, req, flags, doingzomb); > if (error) { > sx_sunlock(&allproc_lock); > + sx_sunlock(&proctree_lock); > return (error); > } > } > } > sx_sunlock(&allproc_lock); > + sx_sunlock(&proctree_lock); > return (0); > } > > > Modified: head/sys/sys/user.h > ============================================================================== > --- head/sys/sys/user.h Thu Aug 28 08:25:15 2014 (r270744) > +++ head/sys/sys/user.h Thu Aug 28 08:41:11 2014 (r270745) > @@ -84,7 +84,7 @@ > * it in two places: function fill_kinfo_proc in sys/kern/kern_proc.c and > * function kvm_proclist in lib/libkvm/kvm_proc.c . > */ > -#define KI_NSPARE_INT 7 > +#define KI_NSPARE_INT 6 > #define KI_NSPARE_LONG 12 > #define KI_NSPARE_PTR 6 > > @@ -187,6 +187,7 @@ struct kinfo_proc { > */ > char ki_sparestrings[50]; /* spare string space */ > int ki_spareints[KI_NSPARE_INT]; /* spare room for growth */ > + int ki_tracer; /* Pid of tracing process */ > int ki_flag2; /* P2_* flags */ > int ki_fibnum; /* Default FIB number */ > u_int ki_cr_flags; /* Credential flags */ >