Blame view

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