[...] > > + if (rqstp->rq_addr.ss_family == AF_INET) > > + seq_printf(m, " %pI4 %pI4 ", > > + &((struct sockaddr_in *)&rqstp->rq_addr)->sin_addr, > > + &((struct sockaddr_in *)&rqstp->rq_daddr)->sin_addr); > > + else if (rqstp->rq_addr.ss_family == AF_INET6) > > + seq_printf(m, " %pI6 %pI6 ", > > + &((struct sockaddr_in6 *)&rqstp->rq_addr)->sin6_addr, > > + &((struct sockaddr_in6 *)&rqstp->rq_daddr)->sin6_addr); > > + else > > + seq_printf(m, " unknown:%hu", > > I think you'll need to add a second "unknown:%hu" here to keep the > fields aligned. In the ipv4/6 case there are 2 addresses, so you need 2 > addresses here as well. ack, I will fix it. > > > + rqstp->rq_addr.ss_family); > > +#ifdef CONFIG_NFSD_V4 > > + if (rqstp->rq_vers == NFS4_VERSION && > > + rqstp->rq_proc == NFSPROC4_COMPOUND) { > > + /* NFSv4 compund */ > > + struct nfsd4_compoundargs *args = rqstp->rq_argp; > > + struct nfsd4_compoundres *resp = rqstp->rq_resp; > > + > > + while (resp->opcnt < args->opcnt) { > > + struct nfsd4_op *op = &args->ops[resp->opcnt++]; > > + > > + seq_printf(m, " %s", nfsd4_op_name(op->opnum)); > > Given that this is going to be a variable-length field, we should have a > different delimiter between the different operations here. Maybe > something like a ':' or '|' character? That way the script could parse > the different operations, but we'd still be able to add new fields to > the end of the line later if we decide it's worthwhile. ack, I will fix it. Regards, Lorenzo > > > + } > > + } > > +#endif /* CONFIG_NFSD_V4 */ > > + seq_puts(m, "\n"); > > + } > > + } > > + > > + rcu_read_unlock(); > > + > > + return 0; > > +} > > + > > +/** > > + * nfsd_rpc_status_open - Atomically copy a write verifier > > + * @inode: entry inode pointer. > > + * @file: entry file pointer. > > + * > > + * This routine dumps pending RPC requests info queued into nfs server. > > + */ > > +int nfsd_rpc_status_open(struct inode *inode, struct file *file) > > +{ > > + struct nfsd_net *nn = net_generic(inode->i_sb->s_fs_info, nfsd_net_id); > > + > > + mutex_lock(&nfsd_mutex); > > + if (!nn->nfsd_serv) { > > + mutex_unlock(&nfsd_mutex); > > + return -ENODEV; > > + } > > + > > + svc_get(nn->nfsd_serv); > > + mutex_unlock(&nfsd_mutex); > > + > > + return single_open(file, nfsd_rpc_status_show, inode->i_private); > > +} > > diff --git a/net/sunrpc/svc.c b/net/sunrpc/svc.c > > index 587811a002c9..44eac83b35a1 100644 > > --- a/net/sunrpc/svc.c > > +++ b/net/sunrpc/svc.c > > @@ -1629,7 +1629,7 @@ const char *svc_proc_name(const struct svc_rqst *rqstp) > > return rqstp->rq_procinfo->pc_name; > > return "unknown"; > > } > > - > > +EXPORT_SYMBOL_GPL(svc_proc_name); > > > > /** > > * svc_encode_result_payload - mark a range of bytes as a result payload > > Other than the nits above, this is looking good! > -- > Jeff Layton <jlayton@xxxxxxxxxx>
Attachment:
signature.asc
Description: PGP signature