[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1416752468-1626-6-git-send-email-pieter@boesman.nl>
Date: Sun, 23 Nov 2014 15:20:49 +0100
From: Pieter Smith <pieter@...sman.nl>
To: pieter@...sman.nl
Cc: Josh Triplett <josh@...htriplett.org>,
Alexander Duyck <alexander.h.duyck@...el.com>,
Alexander Viro <viro@...iv.linux.org.uk>,
Alexei Starovoitov <ast@...mgrid.com>,
Andrew Morton <akpm@...ux-foundation.org>,
Bertrand Jacquin <beber@...eeweb.net>,
Catalina Mocanu <catalina.mocanu@...il.com>,
Daniel Borkmann <dborkman@...hat.com>,
"David S. Miller" <davem@...emloft.net>,
Eric Dumazet <edumazet@...gle.com>,
"Eric W. Biederman" <ebiederm@...ssion.com>,
Fabian Frederick <fabf@...net.be>,
fuse-devel@...ts.sourceforge.net (open list:FUSE: FILESYSTEM...),
Geert Uytterhoeven <geert@...ux-m68k.org>,
Hugh Dickins <hughd@...gle.com>,
Iulia Manda <iulia.manda21@...il.com>,
Jan Beulich <JBeulich@...e.com>,
"J. Bruce Fields" <bfields@...ldses.org>,
Jeff Layton <jlayton@...chiereds.net>,
linux-api@...r.kernel.org (open list:ABI/API),
linux-fsdevel@...r.kernel.org,
linux-kernel@...r.kernel.org (open list),
"Luis R. Rodriguez" <mcgrof@...e.com>,
Matt Turner <mattst88@...il.com>, Mel Gorman <mgorman@...e.de>,
"Michael S. Tsirkin" <mst@...hat.com>,
Miklos Szeredi <miklos@...redi.hu>,
netdev@...r.kernel.org (open list:NETWORKING [GENERAL]),
Oleg Nesterov <oleg@...hat.com>,
Paul Durrant <Paul.Durrant@...rix.com>,
"Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>,
Peter Foley <pefoley2@...oley.com>,
Thomas Graf <tgraf@...g.ch>, Tom Herbert <therbert@...gle.com>,
Willem de Bruijn <willemb@...gle.com>,
Xiao Guangrong <xiaoguangrong@...ux.vnet.ibm.com>,
蔡正龙 <zhenglong.cai@...c.com.cn>
Subject: [PATCH 5/6] net/core: support compiling out splice
To implement splice support, net/core makes use of nosteal_pipe_buf_ops. This
struct is exported by fs/splice. The goal of the larger patch set is to
completely compile out fs/splice, so uses of the exported struct need to be
compiled out along with fs/splice.
This patch therefore compiles out splice support in net/core when
CONFIG_SYSCALL_SPLICE is undefined. The compiled out function skb_splice_bits
is transparently mocked out with a static inline. The greater patch set removes
userspace splice support so it cannot be called anyway.
Signed-off-by: Pieter Smith <pieter@...sman.nl>
---
include/linux/skbuff.h | 9 +++++++++
net/core/skbuff.c | 9 ++++++---
2 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index a59d934..54a50c1 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -2640,9 +2640,18 @@ int skb_copy_bits(const struct sk_buff *skb, int offset, void *to, int len);
int skb_store_bits(struct sk_buff *skb, int offset, const void *from, int len);
__wsum skb_copy_and_csum_bits(const struct sk_buff *skb, int offset, u8 *to,
int len, __wsum csum);
+#ifdef CONFIG_SYSCALL_SPLICE
int skb_splice_bits(struct sk_buff *skb, unsigned int offset,
struct pipe_inode_info *pipe, unsigned int len,
unsigned int flags);
+#else
+static inline int skb_splice_bits(struct sk_buff *skb, unsigned int offset,
+ struct pipe_inode_info *pipe, unsigned int len,
+ unsigned int flags)
+{
+ return -EPERM;
+}
+#endif
void skb_copy_and_csum_dev(const struct sk_buff *skb, u8 *to);
unsigned int skb_zerocopy_headlen(const struct sk_buff *from);
int skb_zerocopy(struct sk_buff *to, struct sk_buff *from,
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index 61059a0..74fad8a 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -1781,9 +1781,9 @@ static bool __splice_segment(struct page *page, unsigned int poff,
* Map linear and fragment data from the skb to spd. It reports true if the
* pipe is full or if we already spliced the requested length.
*/
-static bool __skb_splice_bits(struct sk_buff *skb, struct pipe_inode_info *pipe,
- unsigned int *offset, unsigned int *len,
- struct splice_pipe_desc *spd, struct sock *sk)
+static bool __maybe_unused __skb_splice_bits(struct sk_buff *skb, struct pipe_inode_info *pipe,
+ unsigned int *offset, unsigned int *len,
+ struct splice_pipe_desc *spd, struct sock *sk)
{
int seg;
@@ -1821,6 +1821,7 @@ static bool __skb_splice_bits(struct sk_buff *skb, struct pipe_inode_info *pipe,
* the frag list, if such a thing exists. We'd probably need to recurse to
* handle that cleanly.
*/
+#ifdef CONFIG_SYSCALL_SPLICE
int skb_splice_bits(struct sk_buff *skb, unsigned int offset,
struct pipe_inode_info *pipe, unsigned int tlen,
unsigned int flags)
@@ -1876,6 +1877,8 @@ done:
return ret;
}
+#endif /* #ifdef CONFIG_SYSCALL_SPLICE */
+
/**
* skb_store_bits - store bits from kernel buffer to skb
--
2.1.0
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists