From: Ami Perlmutter Date: Wed, 9 May 2007 09:16:08 +0000 (+0300) Subject: IB/sdp: print queued rx and tx status to proc_fs implement SIOCOUTQ ioctl X-Git-Tag: v4.1.12-92~264^2~5^2~351 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=5cbd2d90b3890ed93381bea332f57015f64f5eba;p=users%2Fjedix%2Flinux-maple.git IB/sdp: print queued rx and tx status to proc_fs implement SIOCOUTQ ioctl Signed-off-by: Ami Perlmutter --- diff --git a/drivers/infiniband/ulp/sdp/sdp.h b/drivers/infiniband/ulp/sdp/sdp.h index 70354151cecdc..7cfc9faebaca7 100644 --- a/drivers/infiniband/ulp/sdp/sdp.h +++ b/drivers/infiniband/ulp/sdp/sdp.h @@ -106,6 +106,7 @@ struct sdp_sock { u32 rcv_nxt; int write_seq; + int snd_una; int pushed_seq; int xmit_size_goal; int nonagle; diff --git a/drivers/infiniband/ulp/sdp/sdp_bcopy.c b/drivers/infiniband/ulp/sdp/sdp_bcopy.c index e5004b25c7717..62206482a61be 100644 --- a/drivers/infiniband/ulp/sdp/sdp_bcopy.c +++ b/drivers/infiniband/ulp/sdp/sdp_bcopy.c @@ -164,6 +164,7 @@ struct sk_buff *sdp_send_completion(struct sdp_sock *ssk, int mseq) DMA_TO_DEVICE); } + ssk->snd_una += TCP_SKB_CB(skb)->end_seq; ++ssk->tx_tail; return skb; } diff --git a/drivers/infiniband/ulp/sdp/sdp_main.c b/drivers/infiniband/ulp/sdp/sdp_main.c index 7773c15bf906c..321ba92c4b212 100644 --- a/drivers/infiniband/ulp/sdp/sdp_main.c +++ b/drivers/infiniband/ulp/sdp/sdp_main.c @@ -699,6 +699,15 @@ static int sdp_ioctl(struct sock *sk, int cmd, unsigned long arg) case SIOCATMARK: answ = ssk->urg_data && ssk->urg_seq == ssk->copied_seq; break; + case SIOCOUTQ: + if (sk->sk_state == TCP_LISTEN) + return -EINVAL; + + if ((1 << sk->sk_state) & (TCPF_SYN_SENT | TCPF_SYN_RECV)) + answ = 0; + else + answ = ssk->write_seq - ssk->snd_una; + break; default: return -ENOIOCTLCMD; } @@ -1763,10 +1772,12 @@ static int sdp_seq_show(struct seq_file *seq, void *v) unsigned long inode; __u16 destp; __u16 srcp; + __u32 rx_queue, tx_queue; if (v == SEQ_START_TOKEN) { seq_printf(seq, "%-*s\n", TMPSZ - 1, - " sl local_address rem_address uid inode"); + " sl local_address rem_address uid inode" + " rx_queue tx_queue"); goto out; } @@ -1778,8 +1789,12 @@ static int sdp_seq_show(struct seq_file *seq, void *v) srcp = ntohs(inet_sk(sk)->sport); uid = sock_i_uid(sk); inode = sock_i_ino(sk); + rx_queue = sdp_sk(sk)->rcv_nxt - sdp_sk(sk)->copied_seq; + tx_queue = sdp_sk(sk)->write_seq - sdp_sk(sk)->snd_una; - sprintf(tmpbuf, "%4d: %08X:%04X %08X:%04X %5d %lu", st->num, src, srcp, dest, destp, uid, inode); + sprintf(tmpbuf, "%4d: %08X:%04X %08X:%04X %5d %lu %08X:%08X", + st->num, src, srcp, dest, destp, uid, inode, + rx_queue, tx_queue); seq_printf(seq, "%-*s\n", TMPSZ - 1, tmpbuf);