NFS 网络文件系统分析

学习NFS SUNRPC 开始于下面这个文档,有一定的参考价值:

http://download.youkuaiyun.com/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 信息。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值