• Dave Wysochanski's avatar
    sunrpc: Change rpc_print_iostats to rpc_clnt_show_stats and handle rpc_clnt clones · 016583d7
    Dave Wysochanski authored
    The existing rpc_print_iostats has a few shortcomings.  First, the naming
    is not consistent with other functions in the kernel that display stats.
    Second, it is really displaying stats for an rpc_clnt structure as it
    displays both xprt stats and per-op stats.  Third, it does not handle
    rpc_clnt clones, which is important for the one in-kernel tree caller
    of this function, the NFS client's nfs_show_stats function.
    
    Fix all of the above by renaming the rpc_print_iostats to
    rpc_clnt_show_stats and looping through any rpc_clnt clones via
    cl_parent.
    
    Once this interface is fixed, this addresses a problem with NFSv4.
    Before this patch, the /proc/self/mountstats always showed incorrect
    counts for NFSv4 lease and session related opcodes such as SEQUENCE,
    RENEW, SETCLIENTID, CREATE_SESSION, etc.  These counts were always 0
    even though many ops would go over the wire.  The reason for this is
    there are multiple rpc_clnt structures allocated for any given NFSv4
    mount, and inside nfs_show_stats() we callled into rpc_print_iostats()
    which only handled one of them, nfs_server->client.  Fix these counts
    by calling sunrpc's new rpc_clnt_show_stats() function, which handles
    cloned rpc_clnt structs and prints the stats together.
    
    Note that one side-effect of the above is that multiple mounts from
    the same NFS server will show identical counts in the above ops due
    to the fact the one rpc_clnt (representing the NFSv4 client state)
    is shared across mounts.
    Signed-off-by: default avatarDave Wysochanski <dwysocha@redhat.com>
    Signed-off-by: default avatarAnna Schumaker <Anna.Schumaker@Netapp.com>
    016583d7
super.c 75.8 KB