Commit 042ef6aa authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge branch 'af_unix-introduce-so_inq-scm_inq'

Kuniyuki Iwashima says:

====================
af_unix: Introduce SO_INQ & SCM_INQ.

We have an application that uses almost the same code for TCP and
AF_UNIX (SOCK_STREAM).

The application uses TCP_INQ for TCP, but AF_UNIX doesn't have it
and requires an extra syscall, ioctl(SIOCINQ) or getsockopt(SO_MEMINFO)
as an alternative.

Also, ioctl(SIOCINQ) for AF_UNIX SOCK_STREAM is more expensive because
it needs to iterate all skb in the receive queue.

This series adds a cached field for SIOCINQ to speed it up and introduce
SO_INQ, the generic version of TCP_INQ to get the queue length as cmsg in
each recvmsg().
====================

Link: https://patch.msgid.link/20250702223606.1054680-1-kuniyu@google.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents d18e43dd e0f60ba0
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -152,6 +152,9 @@

#define SO_PASSRIGHTS		83

#define SO_INQ			84
#define SCM_INQ			SO_INQ

#if !defined(__KERNEL__)

#if __BITS_PER_LONG == 64
+3 −0
Original line number Diff line number Diff line
@@ -163,6 +163,9 @@

#define SO_PASSRIGHTS		83

#define SO_INQ			84
#define SCM_INQ			SO_INQ

#if !defined(__KERNEL__)

#if __BITS_PER_LONG == 64
+3 −0
Original line number Diff line number Diff line
@@ -144,6 +144,9 @@

#define SO_PASSRIGHTS		0x4051

#define SO_INQ			0x4052
#define SCM_INQ			SO_INQ

#if !defined(__KERNEL__)

#if __BITS_PER_LONG == 64
+3 −0
Original line number Diff line number Diff line
@@ -145,6 +145,9 @@

#define SO_PASSRIGHTS            0x005c

#define SO_INQ                   0x005d
#define SCM_INQ                  SO_INQ

#if !defined(__KERNEL__)


+2 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ struct unix_sock {
#define peer_wait		peer_wq.wait
	wait_queue_entry_t	peer_wake;
	struct scm_stat		scm_stat;
	int			inq_len;
	bool			recvmsg_inq;
#if IS_ENABLED(CONFIG_AF_UNIX_OOB)
	struct sk_buff		*oob_skb;
#endif
Loading