summaryrefslogtreecommitdiffstats
path: root/lib/libkvm/kvm_file2.c
diff options
context:
space:
mode:
authorbluhm <bluhm@openbsd.org>2014-11-03 17:20:46 +0000
committerbluhm <bluhm@openbsd.org>2014-11-03 17:20:46 +0000
commit68d360c0a8adac53b80c76cdbdbd5ecbd7eda6c2 (patch)
treeb3308e7d2d32f2f2d31826b271033ee2611ceebe /lib/libkvm/kvm_file2.c
parentminor cleanup of zlib code. DSO is gone. ok jsing. (diff)
downloadwireguard-openbsd-68d360c0a8adac53b80c76cdbdbd5ecbd7eda6c2.tar.xz
wireguard-openbsd-68d360c0a8adac53b80c76cdbdbd5ecbd7eda6c2.zip
Put the socket splicing fields into a seperate struct sosplice that
gets only allocated when needed. This way struct socket shrinks from 472 to 392 bytes on amd64. When splicing gets active, another 88 bytes are allocated for struct sosplice. OK dlg@
Diffstat (limited to 'lib/libkvm/kvm_file2.c')
-rw-r--r--lib/libkvm/kvm_file2.c20
1 files changed, 14 insertions, 6 deletions
diff --git a/lib/libkvm/kvm_file2.c b/lib/libkvm/kvm_file2.c
index 46f41df347e..fc328525b82 100644
--- a/lib/libkvm/kvm_file2.c
+++ b/lib/libkvm/kvm_file2.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: kvm_file2.c,v 1.38 2014/10/25 03:18:58 lteo Exp $ */
+/* $OpenBSD: kvm_file2.c,v 1.39 2014/11/03 17:20:46 bluhm Exp $ */
/*
* Copyright (c) 2009 Todd C. Miller <Todd.Miller@courtesan.com>
@@ -542,6 +542,7 @@ fill_file(kvm_t *kd, struct kinfo_file *kf, struct file *fp, u_long fpaddr,
case DTYPE_SOCKET: {
struct socket sock;
+ struct sosplice ssp;
struct protosw protosw;
struct domain domain;
@@ -565,11 +566,18 @@ fill_file(kvm_t *kd, struct kinfo_file *kf, struct file *fp, u_long fpaddr,
kf->so_family = domain.dom_family;
kf->so_rcv_cc = sock.so_rcv.sb_cc;
kf->so_snd_cc = sock.so_snd.sb_cc;
- if (sock.so_splice) {
- kf->so_splice = PTRTOINT64(sock.so_splice);
- kf->so_splicelen = sock.so_splicelen;
- } else if (sock.so_spliceback)
- kf->so_splicelen = -1;
+ if (sock.so_sp) {
+ if (KREAD(kd, (u_long)sock.so_sp, &ssp)) {
+ _kvm_err(kd, kd->program, "can't read splice");
+ return (-1);
+ }
+ if (ssp.ssp_socket) {
+ kf->so_splice = PTRTOINT64(ssp.ssp_socket);
+ kf->so_splicelen = ssp.ssp_len;
+ } else if (ssp.ssp_soback) {
+ kf->so_splicelen = -1;
+ }
+ }
if (!sock.so_pcb)
break;
switch (kf->so_family) {