[PATCH 2/2] fs: Support compiling out sendfile

Subsystems: abi/api, filesystems (vfs and infrastructure), the rest

STALE4330d

6 messages, 4 authors, 2014-10-21 · open the first message on its own page

[PATCH 2/2] fs: Support compiling out sendfile

From: Pieter Smith <hidden>
Date: 2014-10-20 21:48:37

Many embedded systems will not need this syscall, and omitting it
saves space.  Add a new EXPERT config option CONFIG_SENDFILE_SYSCALL
(default y) to support compiling it out.

bloat-o-meter:
add/remove: 0/4 grow/shrink: 5/0 up/down: 23/-751 (-728)
function                                     old     new   delta
sys_pwritev                                  115     122      +7
sys_preadv                                   115     122      +7
fdput_pos                                     29      36      +7
sys_pwrite64                                 115     116      +1
sys_pread64                                  115     116      +1
fdput                                         11       -     -11
sys_sendfile                                 122       -    -122
sys_sendfile64                               126       -    -126
do_sendfile                                  492       -    -492

Signed-off-by: Pieter Smith <redacted>
---
 fs/Makefile     |  3 ++-
 init/Kconfig    | 10 ++++++++++
 kernel/sys_ni.c |  4 ++++
 3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/fs/Makefile b/fs/Makefile
index 1e3423f..1bbfea7 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -5,7 +5,7 @@
 # Rewritten to use lists instead of if-statements.
 # 
 
-obj-y :=	open.o read_write.o sendfile.o file_table.o super.o \
+obj-y :=	open.o read_write.o file_table.o super.o \
 		char_dev.o stat.o exec.o pipe.o namei.o fcntl.o \
 		ioctl.o readdir.o select.o dcache.o inode.o \
 		attr.o bad_inode.o file.o filesystems.o namespace.o \
@@ -38,6 +38,7 @@ obj-$(CONFIG_COMPAT_BINFMT_ELF)	+= compat_binfmt_elf.o
 obj-$(CONFIG_BINFMT_ELF_FDPIC)	+= binfmt_elf_fdpic.o
 obj-$(CONFIG_BINFMT_SOM)	+= binfmt_som.o
 obj-$(CONFIG_BINFMT_FLAT)	+= binfmt_flat.o
+obj-$(CONFIG_SENDFILE_SYSCALL)	+= sendfile.o
 
 obj-$(CONFIG_FS_MBCACHE)	+= mbcache.o
 obj-$(CONFIG_FS_POSIX_ACL)	+= posix_acl.o
diff --git a/init/Kconfig b/init/Kconfig
index 782a65b..df6785c 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1547,6 +1547,16 @@ config ADVISE_SYSCALLS
 	  applications use these syscalls, you can disable this option to save
 	  space.
 
+config SENDFILE_SYSCALL
+	bool "Enable sendfile syscall" if EXPERT
+	default y
+	help
+	  This option enables the sendfile syscall, used by applications to copy
+	  data between file descriptors. Because sendfile performs the copying
+	  within the kernel, it is more efficient than the combination of read
+	  and write.  If building an embedded system where no applications use
+	  the sendfile syscall, you can disable this option to save space.
+
 config PCI_QUIRKS
 	default y
 	bool "Enable PCI quirk workarounds" if EXPERT
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
index d4709d4..b068de7 100644
--- a/kernel/sys_ni.c
+++ b/kernel/sys_ni.c
@@ -159,6 +159,10 @@ cond_syscall(sys_uselib);
 cond_syscall(sys_fadvise64);
 cond_syscall(sys_fadvise64_64);
 cond_syscall(sys_madvise);
+cond_syscall(sys_sendfile);
+cond_syscall(sys_sendfile64);
+cond_syscall(compat_sys_sendfile);
+cond_syscall(compat_sys_sendfile64);
 
 /* arch-specific weak syscall entries */
 cond_syscall(sys_pciconfig_read);
-- 
1.9.1

Re: [PATCH 2/2] fs: Support compiling out sendfile

From: josh@joshtriplett.org
Date: 2014-10-20 22:24:31

On Mon, Oct 20, 2014 at 11:48:37PM +0200, Pieter Smith wrote:
Many embedded systems will not need this syscall, and omitting it
saves space.  Add a new EXPERT config option CONFIG_SENDFILE_SYSCALL
(default y) to support compiling it out.
Nice work, thanks!

If there are no objections, and nobody has a tree they'd rather carry
this through, I'll take the series through the tiny tree when it's ready
to merge.
bloat-o-meter:
add/remove: 0/4 grow/shrink: 5/0 up/down: 23/-751 (-728)
function                                     old     new   delta
sys_pwritev                                  115     122      +7
sys_preadv                                   115     122      +7
fdput_pos                                     29      36      +7
sys_pwrite64                                 115     116      +1
sys_pread64                                  115     116      +1
fdput                                         11       -     -11
sys_sendfile                                 122       -    -122
sys_sendfile64                               126       -    -126
do_sendfile                                  492       -    -492
Interesting inlining decisions by GCC here.  Got a bloat-o-meter for the
two-patch series, by any chance?  (Also, is this with tinyconfig?  In
particular, with OPTIMIZE_INLINING and OPTIMIZE_FOR_SIZE?)  I'm
wondering if moving sendfile to a separate file made GCC put fdput
out-of-line, and compiling it out reversed that again.
Signed-off-by: Pieter Smith <redacted>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
quoted hunk
---
 fs/Makefile     |  3 ++-
 init/Kconfig    | 10 ++++++++++
 kernel/sys_ni.c |  4 ++++
 3 files changed, 16 insertions(+), 1 deletion(-)
diff --git a/fs/Makefile b/fs/Makefile
index 1e3423f..1bbfea7 100644
--- a/fs/Makefile
+++ b/fs/Makefile
@@ -5,7 +5,7 @@
 # Rewritten to use lists instead of if-statements.
 # 
 
-obj-y :=	open.o read_write.o sendfile.o file_table.o super.o \
+obj-y :=	open.o read_write.o file_table.o super.o \
 		char_dev.o stat.o exec.o pipe.o namei.o fcntl.o \
 		ioctl.o readdir.o select.o dcache.o inode.o \
 		attr.o bad_inode.o file.o filesystems.o namespace.o \
@@ -38,6 +38,7 @@ obj-$(CONFIG_COMPAT_BINFMT_ELF)	+= compat_binfmt_elf.o
 obj-$(CONFIG_BINFMT_ELF_FDPIC)	+= binfmt_elf_fdpic.o
 obj-$(CONFIG_BINFMT_SOM)	+= binfmt_som.o
 obj-$(CONFIG_BINFMT_FLAT)	+= binfmt_flat.o
+obj-$(CONFIG_SENDFILE_SYSCALL)	+= sendfile.o
 
 obj-$(CONFIG_FS_MBCACHE)	+= mbcache.o
 obj-$(CONFIG_FS_POSIX_ACL)	+= posix_acl.o
diff --git a/init/Kconfig b/init/Kconfig
index 782a65b..df6785c 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -1547,6 +1547,16 @@ config ADVISE_SYSCALLS
 	  applications use these syscalls, you can disable this option to save
 	  space.
 
+config SENDFILE_SYSCALL
+	bool "Enable sendfile syscall" if EXPERT
+	default y
+	help
+	  This option enables the sendfile syscall, used by applications to copy
+	  data between file descriptors. Because sendfile performs the copying
+	  within the kernel, it is more efficient than the combination of read
+	  and write.  If building an embedded system where no applications use
+	  the sendfile syscall, you can disable this option to save space.
+
I'm thinking of adding a submenu to group config FOO_SYSCALL options. :)
I'll probably push that as part of the 3.19 merge window, as a patch on
top of all of the individual tinification options.
quoted hunk
 config PCI_QUIRKS
 	default y
 	bool "Enable PCI quirk workarounds" if EXPERT
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
index d4709d4..b068de7 100644
--- a/kernel/sys_ni.c
+++ b/kernel/sys_ni.c
@@ -159,6 +159,10 @@ cond_syscall(sys_uselib);
 cond_syscall(sys_fadvise64);
 cond_syscall(sys_fadvise64_64);
 cond_syscall(sys_madvise);
+cond_syscall(sys_sendfile);
+cond_syscall(sys_sendfile64);
+cond_syscall(compat_sys_sendfile);
+cond_syscall(compat_sys_sendfile64);
 
 /* arch-specific weak syscall entries */
 cond_syscall(sys_pciconfig_read);
-- 
1.9.1

Re: [PATCH 2/2] fs: Support compiling out sendfile

From: Christoph Hellwig <hidden>
Date: 2014-10-21 07:51:54

On Mon, Oct 20, 2014 at 03:24:22PM -0700, josh-iaAMLnmF4UmaiuxdJuQwMA@public.gmane.org wrote:
On Mon, Oct 20, 2014 at 11:48:37PM +0200, Pieter Smith wrote:
quoted
Many embedded systems will not need this syscall, and omitting it
saves space.  Add a new EXPERT config option CONFIG_SENDFILE_SYSCALL
(default y) to support compiling it out.
Nice work, thanks!

If there are no objections, and nobody has a tree they'd rather carry
this through, I'll take the series through the tiny tree when it's ready
to merge.
I think it's rather pointless - there is very little sendfile code,
so you'd rather want to disable splice.

Re: [PATCH 2/2] fs: Support compiling out sendfile

From: Josh Triplett <josh@joshtriplett.org>
Date: 2014-10-21 09:04:22

On Tue, Oct 21, 2014 at 12:51:54AM -0700, Christoph Hellwig wrote:
On Mon, Oct 20, 2014 at 03:24:22PM -0700, josh@joshtriplett.org wrote:
quoted
On Mon, Oct 20, 2014 at 11:48:37PM +0200, Pieter Smith wrote:
quoted
Many embedded systems will not need this syscall, and omitting it
saves space.  Add a new EXPERT config option CONFIG_SENDFILE_SYSCALL
(default y) to support compiling it out.
Nice work, thanks!

If there are no objections, and nobody has a tree they'd rather carry
this through, I'll take the series through the tiny tree when it's ready
to merge.
I think it's rather pointless - there is very little sendfile code,
so you'd rather want to disable splice.
That's the plan, but since sendfile depends on some of the splice bits,
sendfile needs to be optional as well; SENDFILE_SYSCALL will then select
SPLICE_SYSCALLS.

- Josh Triplett

Re: [PATCH 2/2] fs: Support compiling out sendfile

From: Christoph Hellwig <hch@infradead.org>
Date: 2014-10-21 09:13:56

On Tue, Oct 21, 2014 at 02:04:22AM -0700, Josh Triplett wrote:
That's the plan, but since sendfile depends on some of the splice bits,
sendfile needs to be optional as well; SENDFILE_SYSCALL will then select
SPLICE_SYSCALLS.
Just include sendfile with the splice syscalls - we don't really need a
config option for every obscure syscall.

Re: [PATCH 2/2] fs: Support compiling out sendfile

From: Josh Triplett <josh@joshtriplett.org>
Date: 2014-10-21 09:51:03

On Tue, Oct 21, 2014 at 02:13:56AM -0700, Christoph Hellwig wrote:
On Tue, Oct 21, 2014 at 02:04:22AM -0700, Josh Triplett wrote:
quoted
That's the plan, but since sendfile depends on some of the splice bits,
sendfile needs to be optional as well; SENDFILE_SYSCALL will then select
SPLICE_SYSCALLS.
Just include sendfile with the splice syscalls - we don't really need a
config option for every obscure syscall.
No objection here.  Pieter, since you're planning to remove splice
anyway, can you just fold the two together under the same Kconfig
option?  That should simplify the patch series, since you won't need to
split the two.

- Josh Triplett
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help