lkml.org 
[lkml]   [2017]   [Nov]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.9 037/138] NFS: Avoid RCU usage in tracepoints
    Date
    4.9-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Anna Schumaker <Anna.Schumaker@Netapp.com>

    commit 3944369db701f075092357b511fd9f5755771585 upstream.

    There isn't an obvious way to acquire and release the RCU lock during a
    tracepoint, so we can't use the rpc_peeraddr2str() function here.
    Instead, rely on the client's cl_hostname, which should have similar
    enough information without needing an rcu_dereference().

    Reported-by: Dave Jones <davej@codemonkey.org.uk>
    Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    fs/nfs/nfs4trace.h | 24 ++++++------------------
    1 file changed, 6 insertions(+), 18 deletions(-)

    --- a/fs/nfs/nfs4trace.h
    +++ b/fs/nfs/nfs4trace.h
    @@ -201,17 +201,13 @@ DECLARE_EVENT_CLASS(nfs4_clientid_event,
    TP_ARGS(clp, error),

    TP_STRUCT__entry(
    - __string(dstaddr,
    - rpc_peeraddr2str(clp->cl_rpcclient,
    - RPC_DISPLAY_ADDR))
    + __string(dstaddr, clp->cl_hostname)
    __field(int, error)
    ),

    TP_fast_assign(
    __entry->error = error;
    - __assign_str(dstaddr,
    - rpc_peeraddr2str(clp->cl_rpcclient,
    - RPC_DISPLAY_ADDR));
    + __assign_str(dstaddr, clp->cl_hostname);
    ),

    TP_printk(
    @@ -1103,9 +1099,7 @@ DECLARE_EVENT_CLASS(nfs4_inode_callback_
    __field(dev_t, dev)
    __field(u32, fhandle)
    __field(u64, fileid)
    - __string(dstaddr, clp ?
    - rpc_peeraddr2str(clp->cl_rpcclient,
    - RPC_DISPLAY_ADDR) : "unknown")
    + __string(dstaddr, clp ? clp->cl_hostname : "unknown")
    ),

    TP_fast_assign(
    @@ -1118,9 +1112,7 @@ DECLARE_EVENT_CLASS(nfs4_inode_callback_
    __entry->fileid = 0;
    __entry->dev = 0;
    }
    - __assign_str(dstaddr, clp ?
    - rpc_peeraddr2str(clp->cl_rpcclient,
    - RPC_DISPLAY_ADDR) : "unknown")
    + __assign_str(dstaddr, clp ? clp->cl_hostname : "unknown")
    ),

    TP_printk(
    @@ -1162,9 +1154,7 @@ DECLARE_EVENT_CLASS(nfs4_inode_stateid_c
    __field(dev_t, dev)
    __field(u32, fhandle)
    __field(u64, fileid)
    - __string(dstaddr, clp ?
    - rpc_peeraddr2str(clp->cl_rpcclient,
    - RPC_DISPLAY_ADDR) : "unknown")
    + __string(dstaddr, clp ? clp->cl_hostname : "unknown")
    __field(int, stateid_seq)
    __field(u32, stateid_hash)
    ),
    @@ -1179,9 +1169,7 @@ DECLARE_EVENT_CLASS(nfs4_inode_stateid_c
    __entry->fileid = 0;
    __entry->dev = 0;
    }
    - __assign_str(dstaddr, clp ?
    - rpc_peeraddr2str(clp->cl_rpcclient,
    - RPC_DISPLAY_ADDR) : "unknown")
    + __assign_str(dstaddr, clp ? clp->cl_hostname : "unknown")
    __entry->stateid_seq =
    be32_to_cpu(stateid->seqid);
    __entry->stateid_hash =

    \
     
     \ /
      Last update: 2017-11-28 12:59    [W:4.037 / U:0.348 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site