splice: fix kmaps in default_file_splice_write()
authorMiklos Szeredi <mszeredi@suse.cz>
Tue, 19 May 2009 09:37:46 +0000 (11:37 +0200)
committerJens Axboe <jens.axboe@oracle.com>
Tue, 19 May 2009 09:37:46 +0000 (11:37 +0200)
commitb2858d7d1639c04ca3c54988d76c5f7300b76f1c
tree87bd9ecead14418c44320e2944a0178af64af9ea
parent4fc981ef9e7c0953d5c4896ce088b19c50cb018f
splice: fix kmaps in default_file_splice_write()

Unfortunately multiple kmap() within a single thread are deadlockable,
so writing out multiple buffers with writev() isn't possible.

Change the implementation so that it does a separate write() for each
buffer.  This actually simplifies the code a lot since the
splice_from_pipe() helper can be used.

This limitation is caused by HIGHMEM pages, and so only affects a
subset of architectures and configurations.  In the future it may be
worth to implement default_file_splice_write() in a more efficient way
on configs that allow it.

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
Signed-off-by: Jens Axboe <jens.axboe@oracle.com>
fs/splice.c