From mboxrd@z Thu Jan 1 00:00:00 1970 From: Pieter Smith Subject: [PATCH v5 5/7] net/core: support compiling out splice Date: Tue, 25 Nov 2014 08:19:40 +0100 Message-ID: <1416899996-21315-6-git-send-email-pieter@boesman.nl> References: <1416899996-21315-1-git-send-email-pieter@boesman.nl> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Cc: "Michael S. Tsirkin" , Trond Myklebust , Bertrand Jacquin , Oleg Nesterov , "J. Bruce Fields" , Eric Dumazet , Willem de Bruijn , =?UTF-8?q?=E8=94=A1=E6=AD=A3=E9=BE=99?= , Jeff Layton , Tom Herbert , Alexei Starovoitov , Miklos Szeredi , Peter Foley , Hugh Dickins , Xiao Guangrong , Geert Uytterhoeven , Mel Gorman , Matt Turner , "Paul E. McKenney" , Alexander Duyck , "open list:FUSE: FILESYSTEM..." In-Reply-To: <1416899996-21315-1-git-send-email-pieter-qeJ+1H9vRZbz+pZb47iToQ@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: fuse-devel-bounces-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org List-Id: netdev.vger.kernel.org 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 --- include/linux/skbuff.h | 10 ++++++++++ net/core/skbuff.c | 11 +++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index a59d934..5cd636b 100644 --- a/include/linux/skbuff.h +++ b/include/linux/skbuff.h @@ -2640,9 +2640,19 @@ 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..bb426d9 100644 --- a/net/core/skbuff.c +++ b/net/core/skbuff.c @@ -1678,7 +1678,8 @@ EXPORT_SYMBOL(skb_copy_bits); * Callback from splice_to_pipe(), if we need to release some pages * at the end of the spd in case we error'ed out in filling the pipe. */ -static void sock_spd_release(struct splice_pipe_desc *spd, unsigned int i) +static void __maybe_unused sock_spd_release(struct splice_pipe_desc *spd, + unsigned int i) { put_page(spd->pages[i]); } @@ -1781,9 +1782,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 +1822,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 +1878,7 @@ done: return ret; } +#endif /* CONFIG_SYSCALL_SPLICE */ /** * skb_store_bits - store bits from kernel buffer to skb -- 2.1.0 ------------------------------------------------------------------------------ Download BIRT iHub F-Type - The Free Enterprise-Grade BIRT Server from Actuate! Instantly Supercharge Your Business Reports and Dashboards with Interactivity, Sharing, Native Excel Exports, App Integration & more Get technology previously reserved for billion-dollar corporations, FREE http://pubads.g.doubleclick.net/gampad/clk?id=157005751&iu=/4140/ostg.clktrk