您的位置:首页 > 理论基础 > 计算机网络

NFS 网络文件系统分析

2013-07-10 10:35 1206 查看
学习NFS SUNRPC 开始于下面这个文档,有一定的参考价值:

http://download.csdn.net/detail/chenqiang0721/5729801

v2.6.34 如何打开 SUNRPC 调试:

SUNRPC 中很多代码中都用dprintk 输出debug 信息,比如,

static int xs_tcp_send_request(struct rpc_task *task)
{
struct rpc_rqst *req = task->tk_rqstp;
struct rpc_xprt *xprt = req->rq_xprt;
struct sock_xprt *transport = container_of(xprt, struct sock_xprt, xprt);
struct xdr_buf *xdr = &req->rq_snd_buf;
int status;

xs_encode_tcp_record_marker(&req->rq_snd_buf);

xs_pktdump("packet data:",
req->rq_svec->iov_base,
req->rq_svec->iov_len);

/* Continue transmitting the packet/record. We must be careful
* to cope with writespace callbacks arriving _after_ we have
* called sendmsg(). */
while (1) {
status = xs_sendpages(transport->sock,
NULL, 0, xdr, req->rq_bytes_sent);

dprintk("RPC:       xs_tcp_send_request(%u) = %d\n",
xdr->len - req->rq_bytes_sent, status);


dprintk() 的定义在 include/linux/sunrpc/debug.h

#define dprintk(args...)	dfprintk(FACILITY, ## args)

#undef ifdebug
#ifdef RPC_DEBUG
# define ifdebug(fac)		if (unlikely(rpc_debug & RPCDBG_##fac))
# define dfprintk(fac, args...)	do { ifdebug(fac) printk(args); } while(0)
# define RPC_IFDEBUG(x)		x


也就是,rpc_debug 和 子的debug选项位与,获得这个debug 语句是否输出。

其中,rpc_debug 是通过 /proc/sys/sunrpc/rpc_debug 获取的数值

子的debug 选项包括:

/*
* RPC debug facilities
*/
#define RPCDBG_XPRT		0x0001
#define RPCDBG_CALL		0x0002
#define RPCDBG_DEBUG		0x0004
#define RPCDBG_NFS		0x0008
#define RPCDBG_AUTH		0x0010
#define RPCDBG_BIND		0x0020
#define RPCDBG_SCHED		0x0040
#define RPCDBG_TRANS		0x0080
#define RPCDBG_SVCXPRT		0x0100
#define RPCDBG_SVCDSP		0x0200
#define RPCDBG_MISC		0x0400
#define RPCDBG_CACHE		0x0800
#define RPCDBG_ALL		0x7fff


也就是说,想打开其中的任何一个debug 选项,只需要 执行: # echo "子选项的值" > /proc/sys/sunrpc/rpc_debug

在 sunrpc 中的各个文件中会对 FACILITY 进行赋值,这样不同文件中使用 dprintk() 就对应了不同的子debug 选项,例如

net/sunrpc/xprtsock.c

#ifdef RPC_DEBUG
# undef RPC_DEBUG_DATA
# define RPCDBG_FACILITY RPCDBG_TRANS
#endif


#echo 32767 > /proc/sys/sunrpc/rpc_debug 就将会输出所有的debug 信息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: