- 11 4月, 2006 4 次提交
-
-
由 Jens Axboe 提交于
Also corrects a few comments. Patch mainly from Ingo, changes by me. Signed-off-by: NIngo Molnar <mingo@elte.hu> Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
- Kill the local variables that cache ->nrbufs, they just take up space. - Only set do_wakeup for a real pipe. This is a big win for direct splicing. - Kill i_mutex lock around ->f_pos update, regular io paths don't do this either. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
Using find_get_page() is a lot faster than find_or_create_page(). This gets splice a lot closer to sendfile() for fd -> socket transfers. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
It's more efficient for sendfile() emulation. Basically we cache an internal private pipe and just use that as the intermediate area for pages. Direct splicing is not available from sys_splice(), it is only meant to be used for sendfile() emulation. Additional patch from Ingo Molnar to avoid the PIPE_BUFFERS loop at exit for the normal fast path. Signed-off-by: NJens Axboe <axboe@suse.de>
-
- 10 4月, 2006 8 次提交
-
-
由 Ingo Molnar 提交于
add optional input and output offsets to sys_splice(), for seekable file descriptors: asmlinkage long sys_splice(int fd_in, loff_t __user *off_in, int fd_out, loff_t __user *off_out, size_t len, unsigned int flags); semantics are straightforward: f_pos will be updated with the offset provided by user-space, before the splice transfer is about to begin. Providing a NULL offset pointer means the existing f_pos will be used (and updated in situ). Providing an offset for a pipe results in -ESPIPE. Providing an invalid offset pointer results in -EFAULT. Signed-off-by: NIngo Molnar <mingo@elte.hu> Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Ingo Molnar 提交于
separate out the 'internal pipe object' abstraction, and make it usable to splice. This cleans up and fixes several aspects of the internal splice APIs and the pipe code: - pipes: the allocation and freeing of pipe_inode_info is now more symmetric and more streamlined with existing kernel practices. - splice: small micro-optimization: less pointer dereferencing in splice methods Signed-off-by: NIngo Molnar <mingo@elte.hu> Update XFS for the ->splice_read/->splice_write changes. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
We don't want to call into the read-ahead logic unless we are at the start of a page, _or_ we have multiple pages to read. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
We don't really need to lock down the pages, just make sure they are uptodate. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
The whole shadow/pages logic got overly complex, and this simpler approach is actually faster in testing. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
__wake_up_common() is pretty heavy in the kernel profiles, this brings it down to a more acceptable level. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Dave Jones 提交于
We can get to out: with a NULL page, which we probably don't want to be calling page_cache_release() on. Signed-off-by: NDave Jones <davej@redhat.com> Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
We should do that, since we do the LRU manipulation ourselves now. Suggested by Nick Piggin. Signed-off-by: NJens Axboe <axboe@suse.de>
-
- 03 4月, 2006 8 次提交
-
-
由 Jens Axboe 提交于
Originally from Nick Piggin, just adapted to the newer branch. You can't check PageLRU without holding zone->lru_lock. The page release code can get away with it only because the page refcount is 0 at that point. Also, you can't reliably remove pages from the LRU unless the refcount is 0. Ever. Signed-off-by: NNick Piggin <nickpiggin@yahoo.com.au> Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
Thanks to Andrew for the good explanation of why this is so. akpm writes: If a page is under writeback and we remove it from pagecache, it's still going to get written to disk. But the VFS no longer knows about that page, nor that this page is about to modify disk blocks. So there might be scenarios in which those blocks-which-are-about-to-be-written-to get reused for something else. When writeback completes, it'll scribble on those blocks. This won't happen in ext2/ext3-style filesystems in normal mode because the page has buffers and try_to_release_page() will fail. But ext2 in nobh mode doesn't attach buffers at all - it just sticks the page in a BIO, finds some new blocks, points the BIO at those blocks and lets it rip. While that write IO's in flight, someone could truncate the file. Truncate won't block on the writeout because the page isn't in pagecache any more. So truncate will the free the blocks from the file under the page's feet. Then something else can reallocate those blocks. Then write data to them. Now, the original write completes, corrupting the filesystem. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
Forgot that one, thanks Jeff. Also move the other EXPORT_SYMBOL to right below the functions. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
This lets userspace indicate whether more data will be coming in a subsequent splice call. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
Hopefully this will make Andrew a little more happy. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
By cleaning up the writeback logic (killing write_one_page() and the manual set_page_dirty()), we can get rid of ->stolen inside the pipe_buffer and just keep it local in pipe_to_file(). This also adds dirty page balancing logic and O_SYNC handling. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Jens Axboe 提交于
Clear the entire range, and don't increment pidx or we keep filling the same position again and again. Thanks to KAMEZAWA Hiroyuki. Signed-off-by: NJens Axboe <axboe@suse.de>
-
由 Linus Torvalds 提交于
It doesn't make the splice itself necessarily nonblocking (because the actual file descriptors that are spliced from/to may block unless they have the O_NONBLOCK flag set), but it makes the splice pipe operations nonblocking. Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
-
- 31 3月, 2006 3 次提交
-
-
由 Jeff Garzik 提交于
Woe be unto he who builds their filesystems as modules. Signed-off-by: NJeff Garzik <jeff@garzik.org> [ Obscure quote from the infamous geek bible? ] Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
-
由 Jens Axboe 提交于
This enables the caller to migrate pages from one address space page cache to another. In buzz word marketing, you can do zero-copy file copies! Signed-off-by: NJens Axboe <axboe@suse.de> Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
-
由 Jens Axboe 提交于
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: NJens Axboe <axboe@suse.de> Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
-