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-bio-record.h
Go to the documentation of this file.
1
/*
2
* Copyright (C) 2004-2005 Red Hat, Inc. All rights reserved.
3
*
4
* This file is released under the GPL.
5
*/
6
7
#ifndef DM_BIO_RECORD_H
8
#define DM_BIO_RECORD_H
9
10
#include <
linux/bio.h
>
11
12
/*
13
* There are lots of mutable fields in the bio struct that get
14
* changed by the lower levels of the block layer. Some targets,
15
* such as multipath, may wish to resubmit a bio on error. The
16
* functions in this file help the target record and restore the
17
* original bio state.
18
*/
19
20
struct
dm_bio_vec_details
{
21
#if PAGE_SIZE < 65536
22
__u16
bv_len
;
23
__u16
bv_offset
;
24
#else
25
unsigned
bv_len
;
26
unsigned
bv_offset
;
27
#endif
28
};
29
30
struct
dm_bio_details
{
31
sector_t
bi_sector
;
32
struct
block_device
*
bi_bdev
;
33
unsigned
int
bi_size
;
34
unsigned
short
bi_idx
;
35
unsigned
long
bi_flags
;
36
struct
dm_bio_vec_details
bi_io_vec
[BIO_MAX_PAGES];
37
};
38
39
static
inline
void
dm_bio_record(
struct
dm_bio_details
*bd,
struct
bio *bio)
40
{
41
unsigned
i
;
42
43
bd->
bi_sector
= bio->bi_sector;
44
bd->
bi_bdev
= bio->bi_bdev;
45
bd->
bi_size
= bio->bi_size;
46
bd->
bi_idx
= bio->bi_idx;
47
bd->
bi_flags
= bio->bi_flags;
48
49
for
(i = 0; i < bio->bi_vcnt; i++) {
50
bd->
bi_io_vec
[
i
].bv_len = bio->bi_io_vec[
i
].bv_len;
51
bd->
bi_io_vec
[
i
].bv_offset = bio->bi_io_vec[
i
].bv_offset;
52
}
53
}
54
55
static
inline
void
dm_bio_restore(
struct
dm_bio_details
*bd,
struct
bio *bio)
56
{
57
unsigned
i
;
58
59
bio->bi_sector = bd->
bi_sector
;
60
bio->bi_bdev = bd->
bi_bdev
;
61
bio->bi_size = bd->
bi_size
;
62
bio->bi_idx = bd->
bi_idx
;
63
bio->bi_flags = bd->
bi_flags
;
64
65
for
(i = 0; i < bio->bi_vcnt; i++) {
66
bio->bi_io_vec[
i
].bv_len = bd->
bi_io_vec
[
i
].bv_len;
67
bio->bi_io_vec[
i
].bv_offset = bd->
bi_io_vec
[
i
].bv_offset;
68
}
69
}
70
71
#endif
Generated on Thu Jan 10 2013 13:43:36 for Linux Kernel by
1.8.2