raid1.h
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:2k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. #ifndef _RAID1_H
  2. #define _RAID1_H
  3. #include <linux/raid/md.h>
  4. struct mirror_info {
  5. int number;
  6. int raid_disk;
  7. kdev_t dev;
  8. int sect_limit;
  9. int head_position;
  10. /*
  11.  * State bits:
  12.  */
  13. int operational;
  14. int write_only;
  15. int spare;
  16. int used_slot;
  17. };
  18. struct raid1_private_data {
  19. mddev_t *mddev;
  20. struct mirror_info mirrors[MD_SB_DISKS];
  21. int nr_disks;
  22. int raid_disks;
  23. int working_disks;
  24. int last_used;
  25. unsigned long next_sect;
  26. int sect_count;
  27. mdk_thread_t *thread, *resync_thread;
  28. int resync_mirrors;
  29. struct mirror_info *spare;
  30. md_spinlock_t device_lock;
  31. /* buffer pool */
  32. /* buffer_heads that we have pre-allocated have b_pprev -> &freebh
  33.  * and are linked into a stack using b_next
  34.  * raid1_bh that are pre-allocated have R1BH_PreAlloc set.
  35.  * All these variable are protected by device_lock
  36.  */
  37. struct buffer_head *freebh;
  38. int freebh_cnt; /* how many are on the list */
  39. int freebh_blocked;
  40. struct raid1_bh *freer1;
  41. int freer1_blocked;
  42. int freer1_cnt;
  43. struct raid1_bh *freebuf;  /* each bh_req has a page allocated */
  44. md_wait_queue_head_t wait_buffer;
  45. /* for use when syncing mirrors: */
  46. unsigned long start_active, start_ready,
  47. start_pending, start_future;
  48. int cnt_done, cnt_active, cnt_ready,
  49. cnt_pending, cnt_future;
  50. int phase;
  51. int window;
  52. md_wait_queue_head_t wait_done;
  53. md_wait_queue_head_t wait_ready;
  54. md_spinlock_t segment_lock;
  55. };
  56. typedef struct raid1_private_data raid1_conf_t;
  57. /*
  58.  * this is the only point in the RAID code where we violate
  59.  * C type safety. mddev->private is an 'opaque' pointer.
  60.  */
  61. #define mddev_to_conf(mddev) ((raid1_conf_t *) mddev->private)
  62. /*
  63.  * this is our 'private' 'collective' RAID1 buffer head.
  64.  * it contains information about what kind of IO operations were started
  65.  * for this RAID1 operation, and about their status:
  66.  */
  67. struct raid1_bh {
  68. atomic_t remaining; /* 'have we finished' count,
  69.     * used from IRQ handlers
  70.     */
  71. int cmd;
  72. unsigned long state;
  73. mddev_t *mddev;
  74. struct buffer_head *master_bh;
  75. struct buffer_head *mirror_bh_list;
  76. struct buffer_head bh_req;
  77. struct raid1_bh *next_r1; /* next for retry or in free list */
  78. };
  79. /* bits for raid1_bh.state */
  80. #define R1BH_Uptodate 1
  81. #define R1BH_SyncPhase 2
  82. #define R1BH_PreAlloc 3 /* this was pre-allocated, add to free list */
  83. #endif