Bug 1657186

Summary: nfsd-trace.stp regressed comparing rhel8 to rhel7 (error::dwarf)
Product: Red Hat Enterprise Linux 8 Reporter: Martin Cermak <mcermak>
Component: systemtapAssignee: Frank Ch. Eigler <fche>
Status: CLOSED CURRENTRELEASE QA Contact: Martin Cermak <mcermak>
Severity: unspecified Docs Contact:
Priority: unspecified    
Version: 8.0CC: lberk, mcermak, mjw
Target Milestone: rc   
Target Release: 8.0   
Hardware: Unspecified   
OS: Unspecified   
Whiteboard:
Fixed In Version: systemtap-4.0-5.el8 Doc Type: If docs needed, set a value
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2019-06-14 02:02:38 UTC Type: Bug
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1651314    
Bug Blocks:    

Description Martin Cermak 2018-12-07 11:40:07 UTC
The nfsd-trace.stp (systemtap-4.0-3.el8.x86_64) started to fail on rhel8 (compared to rhel7).  The problem seems to be the kernel debuginfo quality:

=======
 8.0 Server x86_64 # stap -P -p4 /usr/share/systemtap/examples/network/nfsd-trace.stp
semantic error: while processing probe module("nfsd").function("nfsd4_read@fs/nfsd/nfs4proc.c:752").call from: nfsd.proc4.read from: nfsd.proc.read from: nfsd.proc.entries from: nfsd.proc.entries

semantic error: failed to retrieve location attribute for 'read' [man error::dwarf]: identifier '$read' at /usr/share/systemtap/tapset/linux/nfsd.stp:570:10
        dieoffset: 0x1dae8a from /usr/lib/debug/lib/modules/4.18.0-40.el8.x86_64/kernel/fs/nfsd/nfsd.ko.debug
        function: nfsd4_read at fs/nfsd/nfs4proc.c:759:5
        source:         count = $read->rd_length
                                ^

semantic error: failed to retrieve location attribute for 'read' [man error::dwarf]: identifier '$read' at :570:10
        dieoffset: 0x1dae8a from /usr/lib/debug/lib/modules/4.18.0-40.el8.x86_64/kernel/fs/nfsd/nfsd.ko.debug
        function: nfsd4_read at fs/nfsd/nfs4proc.c:759:5
        source:         count = $read->rd_length
                                ^

Pass 2: analysis failed.  [man error::pass2]
(1)  8.0 Server x86_64 #
=======

The symbol in question appears to actually be present in the kernel source:

=======
  8.0 Server x86_64 # nl -ba /usr/src/debug/kernel-4.18.0-40.el8/linux-4.18.0-40.el8.x86_64/fs/nfsd/nfs4proc.c  | sed '751,755!d'
   751  static __be32
   752  nfsd4_read(struct svc_rqst *rqstp, struct nfsd4_compound_state *cstate,
   753             union nfsd4_op_u *u)
   754  {
   755          struct nfsd4_read *read = &u->read;
 8.0 Server x86_64 #
=======

Prologue search doesn't seem to help here.

Comment 1 Martin Cermak 2018-12-07 11:45:33 UTC
There are similar problems in this area already: bz1107616, bz1094816 .
This might easily be a WONTFIX with rationale similar to bz1107616#c8 .

Comment 2 Frank Ch. Eigler 2018-12-07 13:19:20 UTC
I believe these guys should actually fix the problem:

commit 4e81610ae8c233d876f378cca8374e34cc2ee0e8
Author: Frank Ch. Eigler <fche>
Date:   Fri Oct 19 19:31:31 2018 -0400

    nfsd tapset: adapt nfsd.proc4.commit probe to different kernel versions

commit 8bc64034509474bee3fb7996b2a9e74c8bc27281
Author: Frank Ch. Eigler <fche>
Date:   Fri Oct 19 17:36:04 2018 -0400

    nfsd tapset: adapt nfsd.proc4.read probe to different kernel versions
    
    Here too an if(@defined($u)) is appropriate, just like in the .write case.

Comment 3 Martin Cermak 2018-12-07 14:15:51 UTC
I can confirm that this problem is gone with upstream 891810c24.  Thanks!

Comment 5 Martin Cermak 2019-02-11 15:18:16 UTC
Fixed in systemtap-4.0-7.el8.