diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/raid/bitmap.h | 2 | ||||
| -rw-r--r-- | include/linux/raid/md.h | 15 | ||||
| -rw-r--r-- | include/linux/raid/md_k.h | 4 | ||||
| -rw-r--r-- | include/linux/raid/md_p.h | 7 |
4 files changed, 26 insertions, 2 deletions
diff --git a/include/linux/raid/bitmap.h b/include/linux/raid/bitmap.h index cfe60cfc8f3d..e24b74b11150 100644 --- a/include/linux/raid/bitmap.h +++ b/include/linux/raid/bitmap.h | |||
| @@ -217,6 +217,7 @@ struct bitmap { | |||
| 217 | /* bitmap spinlock */ | 217 | /* bitmap spinlock */ |
| 218 | spinlock_t lock; | 218 | spinlock_t lock; |
| 219 | 219 | ||
| 220 | long offset; /* offset from superblock if file is NULL */ | ||
| 220 | struct file *file; /* backing disk file */ | 221 | struct file *file; /* backing disk file */ |
| 221 | struct page *sb_page; /* cached copy of the bitmap file superblock */ | 222 | struct page *sb_page; /* cached copy of the bitmap file superblock */ |
| 222 | struct page **filemap; /* list of cache pages for the file */ | 223 | struct page **filemap; /* list of cache pages for the file */ |
| @@ -255,6 +256,7 @@ void bitmap_print_sb(struct bitmap *bitmap); | |||
| 255 | int bitmap_update_sb(struct bitmap *bitmap); | 256 | int bitmap_update_sb(struct bitmap *bitmap); |
| 256 | 257 | ||
| 257 | int bitmap_setallbits(struct bitmap *bitmap); | 258 | int bitmap_setallbits(struct bitmap *bitmap); |
| 259 | void bitmap_write_all(struct bitmap *bitmap); | ||
| 258 | 260 | ||
| 259 | /* these are exported */ | 261 | /* these are exported */ |
| 260 | int bitmap_startwrite(struct bitmap *bitmap, sector_t offset, unsigned long sectors); | 262 | int bitmap_startwrite(struct bitmap *bitmap, sector_t offset, unsigned long sectors); |
diff --git a/include/linux/raid/md.h b/include/linux/raid/md.h index 75f41d8faed2..ffa316ce4dc8 100644 --- a/include/linux/raid/md.h +++ b/include/linux/raid/md.h | |||
| @@ -60,7 +60,14 @@ | |||
| 60 | */ | 60 | */ |
| 61 | #define MD_MAJOR_VERSION 0 | 61 | #define MD_MAJOR_VERSION 0 |
| 62 | #define MD_MINOR_VERSION 90 | 62 | #define MD_MINOR_VERSION 90 |
| 63 | #define MD_PATCHLEVEL_VERSION 1 | 63 | /* |
| 64 | * MD_PATCHLEVEL_VERSION indicates kernel functionality. | ||
| 65 | * >=1 means different superblock formats are selectable using SET_ARRAY_INFO | ||
| 66 | * and major_version/minor_version accordingly | ||
| 67 | * >=2 means that Internal bitmaps are supported by setting MD_SB_BITMAP_PRESENT | ||
| 68 | * in the super status byte | ||
| 69 | */ | ||
| 70 | #define MD_PATCHLEVEL_VERSION 2 | ||
| 64 | 71 | ||
| 65 | extern int register_md_personality (int p_num, mdk_personality_t *p); | 72 | extern int register_md_personality (int p_num, mdk_personality_t *p); |
| 66 | extern int unregister_md_personality (int p_num); | 73 | extern int unregister_md_personality (int p_num); |
| @@ -78,6 +85,12 @@ extern void md_unplug_mddev(mddev_t *mddev); | |||
| 78 | 85 | ||
| 79 | extern void md_print_devices (void); | 86 | extern void md_print_devices (void); |
| 80 | 87 | ||
| 88 | extern void md_super_write(mddev_t *mddev, mdk_rdev_t *rdev, | ||
| 89 | sector_t sector, int size, struct page *page); | ||
| 90 | extern int sync_page_io(struct block_device *bdev, sector_t sector, int size, | ||
| 91 | struct page *page, int rw); | ||
| 92 | |||
| 93 | |||
| 81 | #define MD_BUG(x...) { printk("md: bug in file %s, line %d\n", __FILE__, __LINE__); md_print_devices(); } | 94 | #define MD_BUG(x...) { printk("md: bug in file %s, line %d\n", __FILE__, __LINE__); md_print_devices(); } |
| 82 | 95 | ||
| 83 | #endif | 96 | #endif |
diff --git a/include/linux/raid/md_k.h b/include/linux/raid/md_k.h index 3e977025cf43..a3725b57fb7d 100644 --- a/include/linux/raid/md_k.h +++ b/include/linux/raid/md_k.h | |||
| @@ -273,6 +273,10 @@ struct mddev_s | |||
| 273 | 273 | ||
| 274 | struct bitmap *bitmap; /* the bitmap for the device */ | 274 | struct bitmap *bitmap; /* the bitmap for the device */ |
| 275 | struct file *bitmap_file; /* the bitmap file */ | 275 | struct file *bitmap_file; /* the bitmap file */ |
| 276 | long bitmap_offset; /* offset from superblock of | ||
| 277 | * start of bitmap. May be | ||
| 278 | * negative, but not '0' | ||
| 279 | */ | ||
| 276 | 280 | ||
| 277 | struct list_head all_mddevs; | 281 | struct list_head all_mddevs; |
| 278 | }; | 282 | }; |
diff --git a/include/linux/raid/md_p.h b/include/linux/raid/md_p.h index 8ba95d67329f..8e592a25a8b5 100644 --- a/include/linux/raid/md_p.h +++ b/include/linux/raid/md_p.h | |||
| @@ -96,6 +96,7 @@ typedef struct mdp_device_descriptor_s { | |||
| 96 | #define MD_SB_CLEAN 0 | 96 | #define MD_SB_CLEAN 0 |
| 97 | #define MD_SB_ERRORS 1 | 97 | #define MD_SB_ERRORS 1 |
| 98 | 98 | ||
| 99 | #define MD_SB_BITMAP_PRESENT 8 /* bitmap may be present nearby */ | ||
| 99 | typedef struct mdp_superblock_s { | 100 | typedef struct mdp_superblock_s { |
| 100 | /* | 101 | /* |
| 101 | * Constant generic information | 102 | * Constant generic information |
| @@ -184,7 +185,7 @@ struct mdp_superblock_1 { | |||
| 184 | /* constant array information - 128 bytes */ | 185 | /* constant array information - 128 bytes */ |
| 185 | __u32 magic; /* MD_SB_MAGIC: 0xa92b4efc - little endian */ | 186 | __u32 magic; /* MD_SB_MAGIC: 0xa92b4efc - little endian */ |
| 186 | __u32 major_version; /* 1 */ | 187 | __u32 major_version; /* 1 */ |
| 187 | __u32 feature_map; /* 0 for now */ | 188 | __u32 feature_map; /* bit 0 set if 'bitmap_offset' is meaningful */ |
| 188 | __u32 pad0; /* always set to 0 when writing */ | 189 | __u32 pad0; /* always set to 0 when writing */ |
| 189 | 190 | ||
| 190 | __u8 set_uuid[16]; /* user-space generated. */ | 191 | __u8 set_uuid[16]; /* user-space generated. */ |
| @@ -197,6 +198,10 @@ struct mdp_superblock_1 { | |||
| 197 | 198 | ||
| 198 | __u32 chunksize; /* in 512byte sectors */ | 199 | __u32 chunksize; /* in 512byte sectors */ |
| 199 | __u32 raid_disks; | 200 | __u32 raid_disks; |
| 201 | __u32 bitmap_offset; /* sectors after start of superblock that bitmap starts | ||
| 202 | * NOTE: signed, so bitmap can be before superblock | ||
| 203 | * only meaningful of feature_map[0] is set. | ||
| 204 | */ | ||
| 200 | __u8 pad1[128-96]; /* set to 0 when written */ | 205 | __u8 pad1[128-96]; /* set to 0 when written */ |
| 201 | 206 | ||
| 202 | /* constant this-device information - 64 bytes */ | 207 | /* constant this-device information - 64 bytes */ |
