mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 06:32:08 +00:00
[PATCH] Introduce sys_splice() system call
This adds support for the sys_splice system call. Using a pipe as a transport, it can connect to files or sockets (latter as output only). From the splice.c comments: "splice": joining two ropes together by interweaving their strands. This is the "extended pipe" functionality, where a pipe is used as an arbitrary in-memory buffer. Think of a pipe as a small kernel buffer that you can use to transfer data from one end to the other. The traditional unix read/write is extended with a "splice()" operation that transfers data buffers to or from a pipe buffer. Named by Larry McVoy, original implementation from Linus, extended by Jens to support splicing to files and fixing the initial implementation bugs. Signed-off-by: Jens Axboe <axboe@suse.de> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
5d4fe2c1ce
commit
5274f052e7
15 changed files with 669 additions and 11 deletions
|
@ -119,6 +119,9 @@ static ssize_t sock_writev(struct file *file, const struct iovec *vector,
|
|||
static ssize_t sock_sendpage(struct file *file, struct page *page,
|
||||
int offset, size_t size, loff_t *ppos, int more);
|
||||
|
||||
extern ssize_t generic_splice_sendpage(struct inode *inode, struct file *out,
|
||||
size_t len, unsigned int flags);
|
||||
|
||||
|
||||
/*
|
||||
* Socket files have a set of 'special' operations as well as the generic file ones. These don't appear
|
||||
|
@ -141,7 +144,8 @@ static struct file_operations socket_file_ops = {
|
|||
.fasync = sock_fasync,
|
||||
.readv = sock_readv,
|
||||
.writev = sock_writev,
|
||||
.sendpage = sock_sendpage
|
||||
.sendpage = sock_sendpage,
|
||||
.splice_write = generic_splice_sendpage,
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue