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
drivers
md
dm-bufio.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2009-2011 Red Hat, Inc.
3
*
4
* Author: Mikulas Patocka <
[email protected]
>
5
*
6
* This file is released under the GPL.
7
*/
8
9
#ifndef DM_BUFIO_H
10
#define DM_BUFIO_H
11
12
#include <
linux/blkdev.h
>
13
#include <linux/types.h>
14
15
/*----------------------------------------------------------------*/
16
17
struct
dm_bufio_client
;
18
struct
dm_buffer
;
19
20
/*
21
* Create a buffered IO cache on a given device
22
*/
23
struct
dm_bufio_client
*
24
dm_bufio_client_create
(
struct
block_device
*
bdev
,
unsigned
block_size
,
25
unsigned
reserved_buffers
,
unsigned
aux_size
,
26
void
(*
alloc_callback
)(
struct
dm_buffer
*),
27
void
(*
write_callback
)(
struct
dm_buffer
*));
28
29
/*
30
* Release a buffered IO cache.
31
*/
32
void
dm_bufio_client_destroy
(
struct
dm_bufio_client
*
c
);
33
34
/*
35
* WARNING: to avoid deadlocks, these conditions are observed:
36
*
37
* - At most one thread can hold at most "reserved_buffers" simultaneously.
38
* - Each other threads can hold at most one buffer.
39
* - Threads which call only dm_bufio_get can hold unlimited number of
40
* buffers.
41
*/
42
43
/*
44
* Read a given block from disk. Returns pointer to data. Returns a
45
* pointer to dm_buffer that can be used to release the buffer or to make
46
* it dirty.
47
*/
48
void
*
dm_bufio_read
(
struct
dm_bufio_client
*
c
,
sector_t
block
,
49
struct
dm_buffer
**bp);
50
51
/*
52
* Like dm_bufio_read, but return buffer from cache, don't read
53
* it. If the buffer is not in the cache, return NULL.
54
*/
55
void
*
dm_bufio_get
(
struct
dm_bufio_client
*
c
,
sector_t
block
,
56
struct
dm_buffer
**bp);
57
58
/*
59
* Like dm_bufio_read, but don't read anything from the disk. It is
60
* expected that the caller initializes the buffer and marks it dirty.
61
*/
62
void
*
dm_bufio_new
(
struct
dm_bufio_client
*
c
,
sector_t
block
,
63
struct
dm_buffer
**bp);
64
65
/*
66
* Prefetch the specified blocks to the cache.
67
* The function starts to read the blocks and returns without waiting for
68
* I/O to finish.
69
*/
70
void
dm_bufio_prefetch
(
struct
dm_bufio_client
*
c
,
71
sector_t
block
,
unsigned
n_blocks
);
72
73
/*
74
* Release a reference obtained with dm_bufio_{read,get,new}. The data
75
* pointer and dm_buffer pointer is no longer valid after this call.
76
*/
77
void
dm_bufio_release
(
struct
dm_buffer
*
b
);
78
79
/*
80
* Mark a buffer dirty. It should be called after the buffer is modified.
81
*
82
* In case of memory pressure, the buffer may be written after
83
* dm_bufio_mark_buffer_dirty, but before dm_bufio_write_dirty_buffers. So
84
* dm_bufio_write_dirty_buffers guarantees that the buffer is on-disk but
85
* the actual writing may occur earlier.
86
*/
87
void
dm_bufio_mark_buffer_dirty
(
struct
dm_buffer
*
b
);
88
89
/*
90
* Initiate writing of dirty buffers, without waiting for completion.
91
*/
92
void
dm_bufio_write_dirty_buffers_async
(
struct
dm_bufio_client
*
c
);
93
94
/*
95
* Write all dirty buffers. Guarantees that all dirty buffers created prior
96
* to this call are on disk when this call exits.
97
*/
98
int
dm_bufio_write_dirty_buffers
(
struct
dm_bufio_client
*
c
);
99
100
/*
101
* Send an empty write barrier to the device to flush hardware disk cache.
102
*/
103
int
dm_bufio_issue_flush
(
struct
dm_bufio_client
*
c
);
104
105
/*
106
* Like dm_bufio_release but also move the buffer to the new
107
* block. dm_bufio_write_dirty_buffers is needed to commit the new block.
108
*/
109
void
dm_bufio_release_move
(
struct
dm_buffer
*
b
,
sector_t
new_block
);
110
111
unsigned
dm_bufio_get_block_size
(
struct
dm_bufio_client
*
c
);
112
sector_t
dm_bufio_get_device_size
(
struct
dm_bufio_client
*
c
);
113
sector_t
dm_bufio_get_block_number
(
struct
dm_buffer
*
b
);
114
void
*
dm_bufio_get_block_data
(
struct
dm_buffer
*
b
);
115
void
*
dm_bufio_get_aux_data
(
struct
dm_buffer
*
b
);
116
struct
dm_bufio_client
*
dm_bufio_get_client
(
struct
dm_buffer
*
b
);
117
118
/*----------------------------------------------------------------*/
119
120
#endif
Generated on Thu Jan 10 2013 13:43:37 for Linux Kernel by
1.8.2