Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
splice.h
Go to the documentation of this file.
1
/*
2
* Function declerations and data structures related to the splice
3
* implementation.
4
*
5
* Copyright (C) 2007 Jens Axboe <
[email protected]
>
6
*
7
*/
8
#ifndef SPLICE_H
9
#define SPLICE_H
10
11
#include <
linux/pipe_fs_i.h
>
12
13
/*
14
* Flags passed in from splice/tee/vmsplice
15
*/
16
#define SPLICE_F_MOVE (0x01)
/* move pages instead of copying */
17
#define SPLICE_F_NONBLOCK (0x02)
/* don't block on the pipe splicing (but */
18
/* we may still block on the fd we splice */
19
/* from/to, of course */
20
#define SPLICE_F_MORE (0x04)
/* expect more data */
21
#define SPLICE_F_GIFT (0x08)
/* pages passed in are a gift */
22
23
/*
24
* Passed to the actors
25
*/
26
struct
splice_desc
{
27
unsigned
int
len
,
total_len
;
/* current and remaining length */
28
unsigned
int
flags
;
/* splice flags */
29
/*
30
* actor() private data
31
*/
32
union
{
33
void
__user
*
userptr
;
/* memory to write to */
34
struct
file
*
file
;
/* file to read/write */
35
void
*
data
;
/* cookie */
36
}
u
;
37
loff_t
pos
;
/* file position */
38
size_t
num_spliced
;
/* number of bytes already spliced */
39
bool
need_wakeup
;
/* need to wake up writer */
40
};
41
42
struct
partial_page
{
43
unsigned
int
offset
;
44
unsigned
int
len
;
45
unsigned
long
private
;
46
};
47
48
/*
49
* Passed to splice_to_pipe
50
*/
51
struct
splice_pipe_desc
{
52
struct
page
**
pages
;
/* page map */
53
struct
partial_page
*
partial
;
/* pages[] may not be contig */
54
int
nr_pages
;
/* number of populated pages in map */
55
unsigned
int
nr_pages_max
;
/* pages[] & partial[] arrays size */
56
unsigned
int
flags
;
/* splice flags */
57
const
struct
pipe_buf_operations
*
ops
;
/* ops associated with output pipe */
58
void
(*
spd_release
)(
struct
splice_pipe_desc
*,
unsigned
int
);
59
};
60
61
typedef
int
(
splice_actor
)(
struct
pipe_inode_info
*,
struct
pipe_buffer
*,
62
struct
splice_desc
*);
63
typedef
int
(
splice_direct_actor
)(
struct
pipe_inode_info
*,
64
struct
splice_desc
*);
65
66
extern
ssize_t
splice_from_pipe
(
struct
pipe_inode_info
*,
struct
file
*,
67
loff_t *,
size_t
,
unsigned
int
,
68
splice_actor
*);
69
extern
ssize_t
__splice_from_pipe
(
struct
pipe_inode_info
*,
70
struct
splice_desc
*,
splice_actor
*);
71
extern
int
splice_from_pipe_feed
(
struct
pipe_inode_info
*,
struct
splice_desc
*,
72
splice_actor
*);
73
extern
int
splice_from_pipe_next
(
struct
pipe_inode_info
*,
74
struct
splice_desc
*);
75
extern
void
splice_from_pipe_begin
(
struct
splice_desc
*);
76
extern
void
splice_from_pipe_end
(
struct
pipe_inode_info
*,
77
struct
splice_desc
*);
78
extern
int
pipe_to_file
(
struct
pipe_inode_info
*,
struct
pipe_buffer
*,
79
struct
splice_desc
*);
80
81
extern
ssize_t
splice_to_pipe
(
struct
pipe_inode_info
*,
82
struct
splice_pipe_desc
*);
83
extern
ssize_t
splice_direct_to_actor
(
struct
file
*,
struct
splice_desc
*,
84
splice_direct_actor
*);
85
86
/*
87
* for dynamic pipe sizing
88
*/
89
extern
int
splice_grow_spd
(
const
struct
pipe_inode_info
*,
struct
splice_pipe_desc
*);
90
extern
void
splice_shrink_spd
(
struct
splice_pipe_desc
*);
91
extern
void
spd_release_page
(
struct
splice_pipe_desc
*,
unsigned
int
);
92
93
extern
const
struct
pipe_buf_operations
page_cache_pipe_buf_ops
;
94
#endif
Generated on Thu Jan 10 2013 14:52:37 for Linux Kernel by
1.8.2