This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[Bug tapsets/15170] New: nfsd.proc4.write probe alias needs updating


http://sourceware.org/bugzilla/show_bug.cgi?id=15170

             Bug #: 15170
           Summary: nfsd.proc4.write probe alias needs updating
           Product: systemtap
           Version: unspecified
            Status: NEW
          Severity: normal
          Priority: P2
         Component: tapsets
        AssignedTo: systemtap@sourceware.org
        ReportedBy: dsmith@redhat.com
    Classification: Unclassified


The following kernel commit removed the 'wr_vlen' field from the 'nfsd4_write'
structure:

====
commit ffe1137ba743cdf1c2414d5a89690aec1daa6bba
Author: J. Bruce Fields <bfields@redhat.com>
Date:   Thu Nov 15 14:52:19 2012 -0500

    nfsd4: delay filling in write iovec array till after xdr decoding

    Our server rejects compounds containing more than one write operation.
    It's unclear whether this is really permitted by the spec; with 4.0,
    it's possibly OK, with 4.1 (which has clearer limits on compound
    parameters), it's probably not OK.  No client that we're aware of has
    ever done this, but in theory it could be useful.

    The source of the limitation: we need an array of iovecs to pass to the
    write operation.  In the worst case that array of iovecs could have
    hundreds of elements (the maximum rwsize divided by the page size), so
    it's too big to put on the stack, or in each compound op.  So we instead
    keep a single such array in the compound argument.

    We fill in that array at the time we decode the xdr operation.

    But we decode every op in the compound before executing any of them.  So
    once we've used that array we can't decode another write.

    If we instead delay filling in that array till the time we actually
    perform the write, we can reuse it.

    Another option might be to switch to decoding compound ops one at a
    time.  I considered doing that, but it has a number of other side
    effects, and I'd rather fix just this one problem for now.

    Signed-off-by: J. Bruce Fields <bfields@redhat.com>
====

This causes an error when accessing the 'nfsd.proc4.write' probe alias' 'vlen'
variable:

====
# stap -vp4 -e 'probe nfsd.proc4.write { printf("%d\n", vlen) }'
Pass 1: parsed user script and 90 library script(s) using
207572virt/25520res/2780shr/23068data kb, in 160usr/50sys/213real ms.
semantic error: unable to find member 'wr_vlen' for struct nfsd4_write
(alternatives: wr_stateid wr_offset wr_stable_how wr_buflen wr_head wr_pagelist
wr_bytes_written wr_how_written wr_verifier): operator '->' at
/usr/local/share/systemtap/tapset/linux/nfsd.stp:567:15
        source:     vlen = $write->wr_vlen
                                 ^

Pass 2: analyzed script: 3 probe(s), 2 function(s), 5 embed(s), 1 global(s)
using 489272virt/153104res/4336shr/149092data kb, in 2890usr/7080sys/10122real
ms.
Pass 2: analysis failed.  [man error::pass2]
====

-- 
Configure bugmail: http://sourceware.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]