X-Git-Url: https://git.whamcloud.com/?a=blobdiff_plain;f=lnet%2Flnet%2Frouter_proc.c;h=e1c5055fdd0561150c7325dce2407614acbcfd60;hb=facf5086667874c405c9ef6ce7f8f737868ffefd;hp=cd9bdca034b6f86a067c29fc8fedebefc457b8da;hpb=f95393b0d0a59cf3dc2f29cffc35dcc4cc9d7728;p=fs%2Flustre-release.git diff --git a/lnet/lnet/router_proc.c b/lnet/lnet/router_proc.c index cd9bdca..e1c5055 100644 --- a/lnet/lnet/router_proc.c +++ b/lnet/lnet/router_proc.c @@ -1,8 +1,8 @@ -/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*- - * vim:expandtab:shiftwidth=8:tabstop=8: - * +/* * Copyright (c) 2007, 2010, Oracle and/or its affiliates. All rights reserved. * + * Copyright (c) 2011, Whamcloud, Inc. + * * This file is part of Portals * http://sourceforge.net/projects/sandiaportals/ * @@ -27,7 +27,8 @@ #if defined(__KERNEL__) && defined(LNET_ROUTER) -/* this is really lnet_proc.c */ +/* This is really lnet_proc.c. You might need to update sanity test 215 + * if any file format is changed. */ static cfs_sysctl_table_header_t *lnet_table_header = NULL; @@ -407,8 +408,8 @@ int LL_PROC_PROTO(proc_lnet_peers) if (*ppos == 0) { s += snprintf(s, tmpstr + tmpsiz - s, - "%-24s %4s %5s %5s %5s %5s %5s %5s %s\n", - "nid", "refs", "state", "max", + "%-24s %4s %5s %5s %5s %5s %5s %5s %5s %s\n", + "nid", "refs", "state", "last", "max", "rtr", "min", "tx", "min", "queue"); LASSERT (tmpstr + tmpsiz - s > 0); @@ -441,7 +442,7 @@ int LL_PROC_PROTO(proc_lnet_peers) if (skip == 0) { peer = lp; - /* minor optimiztion: start from idx+1 + /* minor optimization: start from idx+1 * on next iteration if we've just * drained lp_hashlist */ if (lp->lp_hashlist.next == @@ -470,6 +471,7 @@ int LL_PROC_PROTO(proc_lnet_peers) if (peer != NULL) { lnet_nid_t nid = peer->lp_nid; int nrefs = peer->lp_refcount; + int lastalive = -1; char *aliveness = "NA"; int maxcr = peer->lp_ni->ni_peertxcredits; int txcr = peer->lp_txcredits; @@ -482,10 +484,25 @@ int LL_PROC_PROTO(proc_lnet_peers) lnet_peer_aliveness_enabled(peer)) aliveness = peer->lp_alive ? "up" : "down"; + if (lnet_peer_aliveness_enabled(peer)) { + cfs_time_t now = cfs_time_current(); + cfs_duration_t delta; + + delta = cfs_time_sub(now, peer->lp_last_alive); + lastalive = cfs_duration_sec(delta); + + /* No need to mess up peers contents with + * arbitrarily long integers - it suffices to + * know that lastalive is more than 10000s old + */ + if (lastalive >= 10000) + lastalive = 9999; + } + s += snprintf(s, tmpstr + tmpsiz - s, - "%-24s %4d %5s %5d %5d %5d %5d %5d %d\n", + "%-24s %4d %5s %5d %5d %5d %5d %5d %5d %d\n", libcfs_nid2str(nid), nrefs, aliveness, - maxcr, rtrcr, minrtrcr, txcr, + lastalive, maxcr, rtrcr, minrtrcr, txcr, mintxcr, txqnob); LASSERT (tmpstr + tmpsiz - s > 0); } @@ -674,47 +691,49 @@ static cfs_sysctl_table_t lnet_table[] = { * to go via /proc for portability. */ { - .ctl_name = PSDEV_LNET_STATS, + INIT_CTL_NAME(PSDEV_LNET_STATS) .procname = "stats", .mode = 0644, .proc_handler = &proc_lnet_stats, }, { - .ctl_name = PSDEV_LNET_ROUTES, + INIT_CTL_NAME(PSDEV_LNET_ROUTES) .procname = "routes", .mode = 0444, .proc_handler = &proc_lnet_routes, }, { - .ctl_name = PSDEV_LNET_ROUTERS, + INIT_CTL_NAME(PSDEV_LNET_ROUTERS) .procname = "routers", .mode = 0444, .proc_handler = &proc_lnet_routers, }, { - .ctl_name = PSDEV_LNET_PEERS, + INIT_CTL_NAME(PSDEV_LNET_PEERS) .procname = "peers", .mode = 0444, .proc_handler = &proc_lnet_peers, }, { - .ctl_name = PSDEV_LNET_PEERS, + INIT_CTL_NAME(PSDEV_LNET_PEERS) .procname = "buffers", .mode = 0444, .proc_handler = &proc_lnet_buffers, }, { - .ctl_name = PSDEV_LNET_NIS, + INIT_CTL_NAME(PSDEV_LNET_NIS) .procname = "nis", .mode = 0444, .proc_handler = &proc_lnet_nis, }, - {0} + { + INIT_CTL_NAME(0) + } }; static cfs_sysctl_table_t top_table[] = { { - .ctl_name = CTL_LNET, + INIT_CTL_NAME(CTL_LNET) .procname = "lnet", .mode = 0555, .data = NULL, @@ -722,7 +741,7 @@ static cfs_sysctl_table_t top_table[] = { .child = lnet_table, }, { - .ctl_name = 0 + INIT_CTL_NAME(0) } };