Blame view

drivers/md/raid10.h 3.04 KB
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
1
2
  #ifndef _RAID10_H
  #define _RAID10_H
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
3
4
5
6
7
8
9
10
11
12
13
14
15
  typedef struct mirror_info mirror_info_t;
  
  struct mirror_info {
  	mdk_rdev_t	*rdev;
  	sector_t	head_position;
  };
  
  typedef struct r10bio_s r10bio_t;
  
  struct r10_private_data_s {
  	mddev_t			*mddev;
  	mirror_info_t		*mirrors;
  	int			raid_disks;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
16
17
18
19
20
21
22
  	spinlock_t		device_lock;
  
  	/* geometry */
  	int			near_copies;  /* number of copies layed out raid0 style */
  	int 			far_copies;   /* number of copies layed out
  					       * at large strides across drives
  					       */
c93983bf5   NeilBrown   [PATCH] md: suppo...
23
24
25
  	int			far_offset;   /* far_copies are offset by 1 stripe
  					       * instead of many
  					       */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
26
27
28
29
  	int			copies;	      /* near_copies * far_copies.
  					       * must be <= raid_disks
  					       */
  	sector_t		stride;	      /* distance between far copies.
c93983bf5   NeilBrown   [PATCH] md: suppo...
30
31
32
  					       * This is size / far_copies unless
  					       * far_offset, in which case it is
  					       * 1 stripe.
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
33
  					       */
dab8b2924   Trela, Maciej   md: Add support f...
34
  	sector_t		dev_sectors;  /* temp copy of mddev->dev_sectors */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
35
36
37
38
  	int chunk_shift; /* shift from chunks to sectors */
  	sector_t chunk_mask;
  
  	struct list_head	retry_list;
6cce3b23f   NeilBrown   [PATCH] md: write...
39
40
  	/* queue pending writes and submit them on unplug */
  	struct bio_list		pending_bio_list;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
41
42
43
  
  	spinlock_t		resync_lock;
  	int nr_pending;
0a27ec96b   NeilBrown   [PATCH] md: impro...
44
  	int nr_waiting;
4443ae10c   NeilBrown   [PATCH] md: auto-...
45
  	int nr_queued;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
46
47
  	int barrier;
  	sector_t		next_resync;
6cce3b23f   NeilBrown   [PATCH] md: write...
48
49
50
51
  	int			fullsync;  /* set to 1 if a full sync is needed,
  					    * (fresh device added).
  					    * Cleared when a sync completes.
  					    */
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
52

0a27ec96b   NeilBrown   [PATCH] md: impro...
53
  	wait_queue_head_t	wait_barrier;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
54
55
56
  
  	mempool_t *r10bio_pool;
  	mempool_t *r10buf_pool;
4443ae10c   NeilBrown   [PATCH] md: auto-...
57
  	struct page		*tmppage;
dab8b2924   Trela, Maciej   md: Add support f...
58
59
60
61
62
  
  	/* When taking over an array from a different personality, we store
  	 * the new thread here until we fully activate the array.
  	 */
  	struct mdk_thread_s	*thread;
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
63
64
65
66
67
  };
  
  typedef struct r10_private_data_s conf_t;
  
  /*
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
   * this is our 'private' RAID10 bio.
   *
   * it contains information about what kind of IO operations were started
   * for this RAID10 operation, and about their status:
   */
  
  struct r10bio_s {
  	atomic_t		remaining; /* 'have we finished' count,
  					    * used from IRQ handlers
  					    */
  	sector_t		sector;	/* virtual sector number */
  	int			sectors;
  	unsigned long		state;
  	mddev_t			*mddev;
  	/*
  	 * original bio going to /dev/mdx
  	 */
  	struct bio		*master_bio;
  	/*
  	 * if the IO is in READ direction, then this is where we read
  	 */
  	int			read_slot;
  
  	struct list_head	retry_list;
  	/*
  	 * if the IO is in WRITE direction, then multiple bios are used,
  	 * one for each copy.
  	 * When resyncing we also use one for each copy.
  	 * When reconstructing, we use 2 bios, one for read, one for write.
  	 * We choose the number when they are allocated.
  	 */
  	struct {
  		struct bio		*bio;
  		sector_t addr;
  		int devnum;
  	} devs[0];
  };
0eb3ff12a   NeilBrown   [PATCH] md: raid1...
105
106
107
108
109
110
  /* when we get a read error on a read-only array, we redirect to another
   * device without failing the first device, or trying to over-write to
   * correct the read error.  To keep track of bad blocks on a per-bio
   * level, we store IO_BLOCKED in the appropriate 'bios' pointer
   */
  #define IO_BLOCKED ((struct bio*)1)
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
111
112
113
114
  /* bits for r10bio.state */
  #define	R10BIO_Uptodate	0
  #define	R10BIO_IsSync	1
  #define	R10BIO_IsRecover 2
6cce3b23f   NeilBrown   [PATCH] md: write...
115
  #define	R10BIO_Degraded 3
1da177e4c   Linus Torvalds   Linux-2.6.12-rc2
116
  #endif