fuse: support splice() reading from fuse device
authorMiklos Szeredi <mszeredi@suse.cz>
Tue, 25 May 2010 13:06:07 +0000 (15:06 +0200)
committerMiklos Szeredi <mszeredi@suse.cz>
Tue, 25 May 2010 13:06:07 +0000 (15:06 +0200)
commitc3021629a0d820247ee12b6c5192a1d5380e21c6
treeeceb75197a9871e99b0b696af8047357686e4223
parentce534fb052928ce556639d7ecf01cbf4e01321e1
fuse: support splice() reading from fuse device

Allow userspace filesystem implementation to use splice() to read from
the fuse device.

The userspace filesystem can now transfer data coming from a WRITE
request to an arbitrary file descriptor (regular file, block device or
socket) without having to go through a userspace buffer.

The semantics of using splice() to read messages are:

 1)  with a single splice() call move the whole message from the fuse
     device to a temporary pipe
 2)  read the header from the pipe and determine the message type
 3a) if message is a WRITE then splice data from pipe to destination
 3b) else read rest of message to userspace buffer

Signed-off-by: Miklos Szeredi <mszeredi@suse.cz>
fs/fuse/dev.c