2008-07-08 19:53:07

by Francis Moreau

[permalink] [raw]
Subject: Trying to use splice from a driver

Hello,

I'm trying to implement splice ops in a driver, specially the
splice_read method.

Basically the driver receives data and splice them to a pipe in order to
finally move the data to a file.

Before receiving the data, the driver allocates a free page by calling
alloc_page(). Then it fills it with the data received by the device and
then stores the page ref in the splice_pipe_desc structure. Once the
structure is initialised the driver calls splice_to_pipe.

Now the question is what am I supposed to use for pipe_buf_operations in
the splice_pipe_desc structure ?

I'm tempted to use 'user_page_pipe_buf_ops' but I'm not sure. Specially
for the release method, which points to page_cache_pipe_buf_release(),
since the allocated page (the os allocated by the driver) are not coming
from the page cache.

The same is actually true for vmsplice() where the pages are coming from
the user mem space (not from the page cache), so I'm probably missing
something...

Could aynbody enlight me ?

thanks,
--
Francis