From: Chuck Lever <chuck.lever@oracle.com>
To: Linux NFS Mailing List <nfs@lists.sourceforge.net>
Subject: NFS debugging helpers
Date: Thu, 21 Jun 2007 16:31:29 -0400 [thread overview]
Message-ID: <467AE021.4000307@oracle.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 295 bytes --]
I thought I remembered that nfs-utils has simple programs to set NFS/RPC
debugging flags, but I couldn't find them.
So I constructed a couple of Python scripts to remember the flag names
and values (see attached). They are still a little raw.
Is there anything like this already out there?
[-- Attachment #2: nfsdebug --]
[-- Type: text/plain, Size: 2965 bytes --]
#!/usr/bin/env python
# -*- python-mode -*-
"""Script to set NFS debug levels symbolically
"""
__copyright__ = """
Copyright (C) 2007, Chuck Lever <chuck.lever@oracle.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""
""" History:
Thu Jun 21 10:41:40 EDT 2007 cel - created
"""
import sys, os, time, popen2
""" From include/linux/nfs_fs.h
"""
NfsDebugFlags = {
'vfs' : 0x0001,
'dircache' : 0x0002,
'lookupcache' : 0x0004,
'pagecache' : 0x0008,
'proc' : 0x0010,
'xdr' : 0x0020,
'file' : 0x0040,
'root' : 0x0080,
'callback' : 0x0100,
'client' : 0x0200,
'mount' : 0x0400,
}
NoNfsFlags = 0
AllNfsFlags = 0x07ff
def DoCmd(cmd):
p = popen2.Popen3(cmd, True)
output = p.fromchild.read()
if p.wait():
print '%s failed (%s)' % (str(cmd), p.childerr.read().strip())
return output
def CurrentSetting():
string = DoCmd("/sbin/sysctl sunrpc.nfs_debug")
words = string.split()
return int(words[2])
def SetNfsFlags(flags):
cmd = '/usr/bin/sudo /sbin/sysctl -w sunrpc.nfs_debug=%d' % flags
DoCmd(cmd)
return
def ProcessFlag(flag):
if flag not in NfsDebugFlags:
print 'Unrecognized NFS debugging flag.'
return
current = CurrentSetting()
SetNfsFlags(current | NfsDebugFlags[flag])
return
#
# Main
#
if len(sys.argv) == 1:
current = CurrentSetting()
if current == NoNfsFlags:
print 'NFS debugging is currently disabled.'
elif current == AllNfsFlags:
print 'NFS debugging is currently fully enabled.'
else:
print 'Current NFS debugging flags:'
for i in NfsDebugFlags.items():
if (current & i[1]) == i[1]:
print ' %s' % i[0]
sys.exit(0)
if sys.argv[1] in [ '-h', '--help' ]:
print 'Usage: nfsdebug [flag name] [flag name] ...'
print ' where flag name is one of: all, none, %s' % \
', '.join(NfsDebugFlags.keys())
sys.exit(1)
for arg in sys.argv:
if arg == sys.argv[0]:
continue
elif arg in [ 'all', 'on', 'true', 'yes' ]:
SetNfsFlags(AllNfsFlags)
print 'NFS debugging is now enabled.'
elif arg in [ 'none', 'off', 'false', 'no', 'clear', 'zero' ]:
SetNfsFlags(NoNfsFlags)
print 'NFS debugging is now disabled.'
else:
ProcessFlag(arg)
sys.exit(0)
[-- Attachment #3: rpcdebug --]
[-- Type: text/plain, Size: 2951 bytes --]
#!/usr/bin/env python
# -*- python-mode -*-
"""Script to set RPC debug levels symbolically
"""
__copyright__ = """
Copyright (C) 2007, Chuck Lever <chuck.lever@oracle.com>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License version 2 as
published by the Free Software Foundation.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
"""
""" History:
Thu Jun 21 10:41:40 EDT 2007 cel - created
"""
import sys, os, time, popen2
""" From include/linux/sunrpc/debug.h
"""
RpcDebugFlags = {
'xprt' : 0x0001,
'call' : 0x0002,
'debug' : 0x0004,
'nfs' : 0x0008,
'auth' : 0x0010,
'bind' : 0x0020,
'sched' : 0x0040,
'trans' : 0x0080,
'svcsock' : 0x0100,
'svcdsp' : 0x0200,
'misc' : 0x0400,
'cache' : 0x0800,
}
NoRpcFlags = 0
AllRpcFlags = 0x0fff
def DoCmd(cmd):
p = popen2.Popen3(cmd, True)
output = p.fromchild.read()
if p.wait():
print '%s failed (%s)' % (str(cmd), p.childerr.read().strip())
return output
def CurrentSetting():
string = DoCmd("/sbin/sysctl sunrpc.rpc_debug")
words = string.split()
return int(words[2])
def SetRpcFlags(flags):
cmd = '/usr/bin/sudo /sbin/sysctl -w sunrpc.rpc_debug=%d' % flags
DoCmd(cmd)
return
def ProcessFlag(flag):
if flag not in RpcDebugFlags:
print 'Unrecognized RPC debugging flag.'
return
current = CurrentSetting()
SetRpcFlags(current | RpcDebugFlags[flag])
return
#
# Main
#
if len(sys.argv) == 1:
current = CurrentSetting()
if current == NoRpcFlags:
print 'RPC debugging is currently disabled.'
elif current == AllRpcFlags:
print 'RPC debugging is currently fully enabled.'
else:
print 'Current RPC debugging flags:'
for i in RpcDebugFlags.items():
if (current & i[1]) == i[1]:
print ' %s' % i[0]
sys.exit(0)
if sys.argv[1] in [ '-h', '--help' ]:
print 'Usage: rpcdebug [flag name] [flag name] ...'
print ' where flag name is one of: all, none, %s' % \
', '.join(RpcDebugFlags.keys())
sys.exit(1)
for arg in sys.argv:
if arg == sys.argv[0]:
continue
elif arg in [ 'all', 'on', 'true', 'yes' ]:
SetRpcFlags(AllRpcFlags)
print 'RPC debugging is now enabled.'
elif arg in [ 'none', 'off', 'false', 'no', 'clear', 'zero' ]:
SetRpcFlags(NoRpcFlags)
print 'RPC debugging is now disabled.'
else:
ProcessFlag(arg)
sys.exit(0)
[-- Attachment #4: chuck.lever.vcf --]
[-- Type: text/x-vcard, Size: 291 bytes --]
begin:vcard
fn:Chuck Lever
n:Lever;Chuck
org:Oracle Corporation;Corporate Architecture: Linux Projects Group
adr:;;1015 Granger Avenue;Ann Arbor;MI;48104;USA
title:Principal Member of Staff
tel;work:+1 248 614 5091
x-mozilla-html:FALSE
url:http://oss.oracle.com/~cel/
version:2.1
end:vcard
[-- Attachment #5: Type: text/plain, Size: 286 bytes --]
-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
[-- Attachment #6: Type: text/plain, Size: 140 bytes --]
_______________________________________________
NFS maillist - NFS@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/nfs
next reply other threads:[~2007-06-21 20:32 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-06-21 20:31 Chuck Lever [this message]
2007-06-21 20:37 ` NFS debugging helpers J. Bruce Fields
2007-06-22 16:39 ` Chuck Lever
2007-06-22 18:12 ` J. Bruce Fields
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=467AE021.4000307@oracle.com \
--to=chuck.lever@oracle.com \
--cc=nfs@lists.sourceforge.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox