From: Josh Triplett <josh@joshtriplett.org>
To: Pieter Smith <pieter@boesman.nl>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>,
Jeff Layton <jlayton@poochiereds.net>,
"J. Bruce Fields" <bfields@fieldses.org>,
Andrew Morton <akpm@linux-foundation.org>,
Xiao Guangrong <xiaoguangrong@linux.vnet.ibm.com>,
linux-fsdevel@vger.kernel.org,
open list <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 6/6] fs/splice: full support for compiling out splice
Date: Sat, 22 Nov 2014 13:53:17 -0800 [thread overview]
Message-ID: <20141122215317.GD23711@thin> (raw)
In-Reply-To: <1416690001-20817-7-git-send-email-pieter@boesman.nl>
On Sat, Nov 22, 2014 at 10:00:01PM +0100, Pieter Smith wrote:
> Entirely compile out splice translation unit when the system is configured
> without splice family of syscalls (i.e. CONFIG_SYSCALL_SPLICE is undefined).
>
> add/remove: 0/25 grow/shrink: 0/5 up/down: 0/-4845 (-4845)
Very nice!
- Josh Triplett
> function old new delta
> pipe_to_null 4 - -4
> generic_pipe_buf_nosteal 6 - -6
> spd_release_page 10 - -10
> PageUptodate 22 11 -11
> lock_page 36 24 -12
> page_cache_pipe_buf_release 16 - -16
> splice_write_null 24 4 -20
> page_cache_pipe_buf_ops 20 - -20
> nosteal_pipe_buf_ops 20 - -20
> default_pipe_buf_ops 20 - -20
> generic_splice_sendpage 24 - -24
> splice_shrink_spd 27 - -27
> direct_splice_actor 47 - -47
> default_file_splice_write 49 - -49
> wakeup_pipe_writers 54 - -54
> write_pipe_buf 71 - -71
> page_cache_pipe_buf_confirm 80 - -80
> splice_grow_spd 87 - -87
> splice_from_pipe 93 - -93
> splice_from_pipe_next 106 - -106
> pipe_to_sendpage 109 - -109
> page_cache_pipe_buf_steal 114 - -114
> generic_file_splice_read 131 8 -123
> do_splice_direct 148 - -148
> __splice_from_pipe 246 - -246
> splice_direct_to_actor 416 - -416
> splice_to_pipe 417 - -417
> default_file_splice_read 688 - -688
> iter_file_splice_write 702 4 -698
> __generic_file_splice_read 1109 - -1109
>
> Signed-off-by: Pieter Smith <pieter@boesman.nl>
> ---
> fs/Makefile | 3 ++-
> fs/splice.c | 2 --
> include/linux/fs.h | 26 ++++++++++++++++++++++++++
> include/linux/splice.h | 43 +++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 71 insertions(+), 3 deletions(-)
>
> diff --git a/fs/Makefile b/fs/Makefile
> index fb7646e..9395622 100644
> --- a/fs/Makefile
> +++ b/fs/Makefile
> @@ -10,7 +10,7 @@ obj-y := open.o read_write.o file_table.o super.o \
> ioctl.o readdir.o select.o dcache.o inode.o \
> attr.o bad_inode.o file.o filesystems.o namespace.o \
> seq_file.o xattr.o libfs.o fs-writeback.o \
> - pnode.o splice.o sync.o utimes.o \
> + pnode.o sync.o utimes.o \
> stack.o fs_struct.o statfs.o fs_pin.o
>
> ifeq ($(CONFIG_BLOCK),y)
> @@ -22,6 +22,7 @@ endif
> obj-$(CONFIG_PROC_FS) += proc_namespace.o
>
> obj-$(CONFIG_FSNOTIFY) += notify/
> +obj-$(CONFIG_SYSCALL_SPLICE) += splice.o
> obj-$(CONFIG_EPOLL) += eventpoll.o
> obj-$(CONFIG_ANON_INODES) += anon_inodes.o
> obj-$(CONFIG_SIGNALFD) += signalfd.o
> diff --git a/fs/splice.c b/fs/splice.c
> index 7c4c695..44b201b 100644
> --- a/fs/splice.c
> +++ b/fs/splice.c
> @@ -1316,7 +1316,6 @@ long do_splice_direct(struct file *in, loff_t *ppos, struct file *out,
> return ret;
> }
>
> -#ifdef CONFIG_SYSCALL_SPLICE
> static int splice_pipe_to_pipe(struct pipe_inode_info *ipipe,
> struct pipe_inode_info *opipe,
> size_t len, unsigned int flags);
> @@ -2201,5 +2200,4 @@ COMPAT_SYSCALL_DEFINE4(sendfile64, int, out_fd, int, in_fd,
> return do_sendfile(out_fd, in_fd, NULL, count, 0);
> }
> #endif
> -#endif
>
> diff --git a/include/linux/fs.h b/include/linux/fs.h
> index 04c0975..9b3054e 100644
> --- a/include/linux/fs.h
> +++ b/include/linux/fs.h
> @@ -2449,6 +2449,7 @@ extern void block_sync_page(struct page *page);
> #define __splice_p(x) NULL
> #endif
>
> +#ifdef CONFIG_SYSCALL_SPLICE
> /* fs/splice.c */
> extern ssize_t generic_file_splice_read(struct file *, loff_t *,
> struct pipe_inode_info *, size_t, unsigned int);
> @@ -2458,6 +2459,31 @@ extern ssize_t iter_file_splice_write(struct pipe_inode_info *,
> struct file *, loff_t *, size_t, unsigned int);
> extern ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
> struct file *out, loff_t *, size_t len, unsigned int flags);
> +#else
> +static inline ssize_t generic_file_splice_read(struct file *in, loff_t *ppos,
> + struct pipe_inode_info *pipe, size_t len, unsigned int flags)
> +{
> + return -EPERM;
> +}
> +
> +static inline ssize_t default_file_splice_read(struct file *in, loff_t *ppos,
> + struct pipe_inode_info *pipe, size_t len, unsigned int flags)
> +{
> + return -EPERM;
> +}
> +
> +static inline ssize_t iter_file_splice_write(struct pipe_inode_info *pipe,
> + struct file *out, loff_t *ppos, size_t len, unsigned int flags)
> +{
> + return -EPERM;
> +}
> +
> +static inline ssize_t generic_splice_sendpage(struct pipe_inode_info *pipe,
> + struct file *out, loff_t *ppos, size_t len, unsigned int flags)
> +{
> + return -EPERM;
> +}
> +#endif
>
> extern void
> file_ra_state_init(struct file_ra_state *ra, struct address_space *mapping);
> diff --git a/include/linux/splice.h b/include/linux/splice.h
> index da2751d..50ca77f 100644
> --- a/include/linux/splice.h
> +++ b/include/linux/splice.h
> @@ -65,6 +65,7 @@ typedef int (splice_actor)(struct pipe_inode_info *, struct pipe_buffer *,
> typedef int (splice_direct_actor)(struct pipe_inode_info *,
> struct splice_desc *);
>
> +#ifdef CONFIG_SYSCALL_SPLICE
> extern ssize_t splice_from_pipe(struct pipe_inode_info *, struct file *,
> loff_t *, size_t, unsigned int,
> splice_actor *);
> @@ -74,13 +75,55 @@ extern ssize_t splice_to_pipe(struct pipe_inode_info *,
> struct splice_pipe_desc *);
> extern ssize_t splice_direct_to_actor(struct file *, struct splice_desc *,
> splice_direct_actor *);
> +#else /* #ifdef CONFIG_SYSCALL_SPLICE */
> +static inline ssize_t splice_from_pipe(struct pipe_inode_info *pipe, struct file *out,
> + loff_t *ppos, size_t len, unsigned int flags,
> + splice_actor *actor)
> +{
> + return -EPERM;
> +}
> +
> +static inline ssize_t __splice_from_pipe(struct pipe_inode_info *pipe, struct splice_desc *sd,
> + splice_actor *actor)
> +{
> + return -EPERM;
> +}
> +
> +static inline ssize_t splice_to_pipe(struct pipe_inode_info *pipe,
> + struct splice_pipe_desc *spd)
> +{
> + return -EPERM;
> +}
> +
> +static inline ssize_t splice_direct_to_actor(struct file *in, struct splice_desc *sd,
> + splice_direct_actor *actor)
> +{
> + return -EPERM;
> +}
> +#endif /* #ifdef CONFIG_SYSCALL_SPLICE */
>
> /*
> * for dynamic pipe sizing
> */
> +#ifdef CONFIG_SYSCALL_SPLICE
> extern int splice_grow_spd(const struct pipe_inode_info *, struct splice_pipe_desc *);
> extern void splice_shrink_spd(struct splice_pipe_desc *);
> extern void spd_release_page(struct splice_pipe_desc *, unsigned int);
> +#else /* #ifdef CONFIG_SYSCALL_SPLICE */
> +static inline int splice_grow_spd(const struct pipe_inode_info *pipe, struct splice_pipe_desc *spd)
> +{
> + return -EPERM;
> +}
> +
> +static inline void splice_shrink_spd(struct splice_pipe_desc *spd)
> +{
> +}
> +
> +static inline void spd_release_page(struct splice_pipe_desc *spd, unsigned int i)
> +{
> +}
> +#endif /* #ifdef CONFIG_SYSCALL_SPLICE */
>
> extern const struct pipe_buf_operations page_cache_pipe_buf_ops;
> +
> #endif
> --
> 1.9.1
>
next prev parent reply other threads:[~2014-11-22 21:53 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <1416690001-20817-1-git-send-email-pieter@boesman.nl>
2014-11-22 20:59 ` [PATCH 1/6] fs: move sendfile syscall into fs/splice Pieter Smith
2014-11-22 20:59 ` [PATCH 2/6] fs: moved kernel_write to fs/read_write Pieter Smith
[not found] ` <1416690001-20817-1-git-send-email-pieter-qeJ+1H9vRZbz+pZb47iToQ@public.gmane.org>
2014-11-22 20:59 ` [PATCH 3/6] fs/splice: support compiling out splice-family syscalls Pieter Smith
2014-11-22 20:59 ` Pieter Smith
2014-11-22 20:59 ` Pieter Smith
[not found] ` <1416690001-20817-4-git-send-email-pieter-qeJ+1H9vRZbz+pZb47iToQ@public.gmane.org>
2014-11-22 21:50 ` Josh Triplett
2014-11-22 21:50 ` Josh Triplett
2014-11-22 20:59 ` [PATCH 4/6] fs/fuse: support compiling out splice Pieter Smith
2014-11-22 20:59 ` Pieter Smith
2014-11-22 21:44 ` Josh Triplett
2014-11-22 21:00 ` [PATCH 5/6] net/core: " Pieter Smith
2014-11-22 21:48 ` Josh Triplett
[not found] ` <CAPho-_+GV+2sVVxGsPSjvE3heEoGa4chbqrmnxLAr_p7RU=TDQ@mail.gmail.com>
2014-11-22 23:07 ` Josh Triplett
2014-11-22 21:00 ` [PATCH 6/6] fs/splice: full support for " Pieter Smith
2014-11-22 21:53 ` Josh Triplett [this message]
2014-11-23 14:20 [PATCH 0/6] kernel tinification: optionally compile out splice family of syscalls (splice, vmsplice, tee and sendfile) Pieter Smith
[not found] ` <1416752468-1626-1-git-send-email-pieter-qeJ+1H9vRZbz+pZb47iToQ@public.gmane.org>
2014-11-23 14:20 ` [PATCH 6/6] fs/splice: full support for compiling out splice Pieter Smith
2014-11-23 14:20 ` Pieter Smith
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20141122215317.GD23711@thin \
--to=josh@joshtriplett.org \
--cc=akpm@linux-foundation.org \
--cc=bfields@fieldses.org \
--cc=jlayton@poochiereds.net \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pieter@boesman.nl \
--cc=viro@zeniv.linux.org.uk \
--cc=xiaoguangrong@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.