Message ID | 20190418140219.28010-1-tung.q.nguyen@dektech.com.au |
---|---|
State | Accepted |
Delegated to: | David Miller |
Headers | show |
Series | [tipc-discussion,net-next,v1] tipc: introduce new socket option TIPC_SOCK_RECVQ_USED | expand |
From: Tung Nguyen <tung.q.nguyen@dektech.com.au> Date: Thu, 18 Apr 2019 21:02:19 +0700 > When using TIPC_SOCK_RECVQ_DEPTH for getsockopt(), it returns the > number of buffers in receive socket buffer which is not so helpful > for user space applications. > > This commit introduces the new option TIPC_SOCK_RECVQ_USED which > returns the current allocated bytes of the receive socket buffer. > This helps user space applications dimension its buffer usage to > avoid buffer overload issue. > > Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> TIPC folks, please review.
> -----Original Message----- > From: netdev-owner@vger.kernel.org <netdev-owner@vger.kernel.org> > On Behalf Of David Miller > Sent: 19-Apr-19 17:41 > To: Tung Quang Nguyen <tung.q.nguyen@dektech.com.au> > Cc: netdev@vger.kernel.org; tipc-discussion@lists.sourceforge.net > Subject: Re: [tipc-discussion][net-next v1] tipc: introduce new socket option > TIPC_SOCK_RECVQ_USED > > From: Tung Nguyen <tung.q.nguyen@dektech.com.au> > Date: Thu, 18 Apr 2019 21:02:19 +0700 > > > When using TIPC_SOCK_RECVQ_DEPTH for getsockopt(), it returns the > > number of buffers in receive socket buffer which is not so helpful for > > user space applications. > > > > This commit introduces the new option TIPC_SOCK_RECVQ_USED which > > returns the current allocated bytes of the receive socket buffer. > > This helps user space applications dimension its buffer usage to avoid > > buffer overload issue. > > > > Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> > > TIPC folks, please review. Acked-by: Jon Maloy <jon.maloy@ericsson.com> It would of course be nicer if we could recycle TIPC_SOCK_RECV_QUEUE_DEPTH for this purpose, but that would mean altering the current ABI and incur a (probably very low) risk of breaking existing application. I am not particularly happy with this, but do we have users who claim it would be useful for them. ///jon
From: Jon Maloy <jon.maloy@ericsson.com> Date: Fri, 19 Apr 2019 21:51:31 +0000 > > >> -----Original Message----- >> From: netdev-owner@vger.kernel.org <netdev-owner@vger.kernel.org> >> On Behalf Of David Miller >> Sent: 19-Apr-19 17:41 >> To: Tung Quang Nguyen <tung.q.nguyen@dektech.com.au> >> Cc: netdev@vger.kernel.org; tipc-discussion@lists.sourceforge.net >> Subject: Re: [tipc-discussion][net-next v1] tipc: introduce new socket option >> TIPC_SOCK_RECVQ_USED >> >> From: Tung Nguyen <tung.q.nguyen@dektech.com.au> >> Date: Thu, 18 Apr 2019 21:02:19 +0700 >> >> > When using TIPC_SOCK_RECVQ_DEPTH for getsockopt(), it returns the >> > number of buffers in receive socket buffer which is not so helpful for >> > user space applications. >> > >> > This commit introduces the new option TIPC_SOCK_RECVQ_USED which >> > returns the current allocated bytes of the receive socket buffer. >> > This helps user space applications dimension its buffer usage to avoid >> > buffer overload issue. >> > >> > Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> >> >> TIPC folks, please review. > > Acked-by: Jon Maloy <jon.maloy@ericsson.com> Applied, thanks for reviewing. > It would of course be nicer if we could recycle > TIPC_SOCK_RECV_QUEUE_DEPTH for this purpose, but that would mean > altering the current ABI and incur a (probably very low) risk of > breaking existing application. I am not particularly happy with > this, but do we have users who claim it would be useful for them. Better safe than sorry when it comes to user facing ABIs.
diff --git a/include/uapi/linux/tipc.h b/include/uapi/linux/tipc.h index 6b2fd4d9655f..7df026ea6aff 100644 --- a/include/uapi/linux/tipc.h +++ b/include/uapi/linux/tipc.h @@ -190,6 +190,7 @@ struct sockaddr_tipc { #define TIPC_MCAST_REPLICAST 134 /* Default: TIPC selects. No arg */ #define TIPC_GROUP_JOIN 135 /* Takes struct tipc_group_req* */ #define TIPC_GROUP_LEAVE 136 /* No argument */ +#define TIPC_SOCK_RECVQ_USED 137 /* Default: none (read only) */ /* * Flag values diff --git a/net/tipc/socket.c b/net/tipc/socket.c index 8ac8ddf1e324..1385207a301f 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c @@ -3070,6 +3070,9 @@ static int tipc_getsockopt(struct socket *sock, int lvl, int opt, case TIPC_SOCK_RECVQ_DEPTH: value = skb_queue_len(&sk->sk_receive_queue); break; + case TIPC_SOCK_RECVQ_USED: + value = sk_rmem_alloc_get(sk); + break; case TIPC_GROUP_JOIN: seq.type = 0; if (tsk->group)
When using TIPC_SOCK_RECVQ_DEPTH for getsockopt(), it returns the number of buffers in receive socket buffer which is not so helpful for user space applications. This commit introduces the new option TIPC_SOCK_RECVQ_USED which returns the current allocated bytes of the receive socket buffer. This helps user space applications dimension its buffer usage to avoid buffer overload issue. Signed-off-by: Tung Nguyen <tung.q.nguyen@dektech.com.au> --- include/uapi/linux/tipc.h | 1 + net/tipc/socket.c | 3 +++ 2 files changed, 4 insertions(+)