diff options
author | 2014-11-03 17:20:46 +0000 | |
---|---|---|
committer | 2014-11-03 17:20:46 +0000 | |
commit | 68d360c0a8adac53b80c76cdbdbd5ecbd7eda6c2 (patch) | |
tree | b3308e7d2d32f2f2d31826b271033ee2611ceebe /lib/libkvm/kvm_file2.c | |
parent | minor cleanup of zlib code. DSO is gone. ok jsing. (diff) | |
download | wireguard-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.c | 20 |
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) { |