Re: [PATCH][RFC] splice support
From: Jens Axboe
Date: Wed Mar 29 2006 - 08:25:57 EST
On Wed, Mar 29 2006, Jeff Garzik wrote:
> Jens Axboe wrote:
>
> >index 509ccec..23e2c7c 100644
> >--- a/fs/ext2/file.c
> >+++ b/fs/ext2/file.c
> >@@ -53,6 +53,8 @@ const struct file_operations ext2_file_o
> > .readv = generic_file_readv,
> > .writev = generic_file_writev,
> > .sendfile = generic_file_sendfile,
> >+ .splice_read = generic_file_splice_read,
> >+ .splice_write = generic_file_splice_write,
> > };
> >
> > #ifdef CONFIG_EXT2_FS_XIP
> >diff --git a/fs/ext3/file.c b/fs/ext3/file.c
> >index 783a796..1efefb6 100644
> >--- a/fs/ext3/file.c
> >+++ b/fs/ext3/file.c
> >@@ -119,6 +119,8 @@ const struct file_operations ext3_file_o
> > .release = ext3_release_file,
> > .fsync = ext3_sync_file,
> > .sendfile = generic_file_sendfile,
> >+ .splice_read = generic_file_splice_read,
> >+ .splice_write = generic_file_splice_write,
>
> >+static long do_splice_from(struct inode *pipe, struct file *out, size_t
> >len,
> >+ unsigned long flags)
> >+{
> >+ if (out->f_op && out->f_op->splice_write)
> >+ return out->f_op->splice_write(pipe, out, len, flags);
>
> 1) What are the consequences of doing
>
> if (f_op->splice_write)
> f_op->splice_write(...);
> else
> generic_file_splice_write(...);
>
> to cause sys_splice() to default to supported?
It should probably work, the fs guys should know more about that. Any fs
that ->prepare_write(), ->commit_write() works for can use
generic_file_splice_write(). I prefer to keep it sane for now, mason
tells me that eg xfs might need special care.
> 2) Do you really have to test f_op itself for NULL? Is that a stealth
> closed-file check or something? I would be surprised if f_op was ever
> really NULL.
Probably not, paranoia.
After posting I fixed another bug, essentially making the 'more' flag to
sendpage() be correct. Should improve throughput a little.
--
Jens Axboe
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/