diff options
Diffstat (limited to 'drivers/md/md.h')
-rw-r--r-- | drivers/md/md.h | 51 |
1 files changed, 39 insertions, 12 deletions
diff --git a/drivers/md/md.h b/drivers/md/md.h index f184b69ef337..8e4c75c00d46 100644 --- a/drivers/md/md.h +++ b/drivers/md/md.h | |||
@@ -97,6 +97,9 @@ struct mdk_rdev_s | |||
97 | atomic_t read_errors; /* number of consecutive read errors that | 97 | atomic_t read_errors; /* number of consecutive read errors that |
98 | * we have tried to ignore. | 98 | * we have tried to ignore. |
99 | */ | 99 | */ |
100 | struct timespec last_read_error; /* monotonic time since our | ||
101 | * last read error | ||
102 | */ | ||
100 | atomic_t corrected_errors; /* number of corrected read errors, | 103 | atomic_t corrected_errors; /* number of corrected read errors, |
101 | * for reporting to userspace and storing | 104 | * for reporting to userspace and storing |
102 | * in superblock. | 105 | * in superblock. |
@@ -280,17 +283,38 @@ struct mddev_s | |||
280 | unsigned int max_write_behind; /* 0 = sync */ | 283 | unsigned int max_write_behind; /* 0 = sync */ |
281 | 284 | ||
282 | struct bitmap *bitmap; /* the bitmap for the device */ | 285 | struct bitmap *bitmap; /* the bitmap for the device */ |
283 | struct file *bitmap_file; /* the bitmap file */ | 286 | struct { |
284 | long bitmap_offset; /* offset from superblock of | 287 | struct file *file; /* the bitmap file */ |
285 | * start of bitmap. May be | 288 | loff_t offset; /* offset from superblock of |
286 | * negative, but not '0' | 289 | * start of bitmap. May be |
287 | */ | 290 | * negative, but not '0' |
288 | long default_bitmap_offset; /* this is the offset to use when | 291 | * For external metadata, offset |
289 | * hot-adding a bitmap. It should | 292 | * from start of device. |
290 | * eventually be settable by sysfs. | 293 | */ |
291 | */ | 294 | loff_t default_offset; /* this is the offset to use when |
292 | 295 | * hot-adding a bitmap. It should | |
296 | * eventually be settable by sysfs. | ||
297 | */ | ||
298 | struct mutex mutex; | ||
299 | unsigned long chunksize; | ||
300 | unsigned long daemon_sleep; /* how many seconds between updates? */ | ||
301 | unsigned long max_write_behind; /* write-behind mode */ | ||
302 | int external; | ||
303 | } bitmap_info; | ||
304 | |||
305 | atomic_t max_corr_read_errors; /* max read retries */ | ||
293 | struct list_head all_mddevs; | 306 | struct list_head all_mddevs; |
307 | |||
308 | /* Generic barrier handling. | ||
309 | * If there is a pending barrier request, all other | ||
310 | * writes are blocked while the devices are flushed. | ||
311 | * The last to finish a flush schedules a worker to | ||
312 | * submit the barrier request (without the barrier flag), | ||
313 | * then submit more flush requests. | ||
314 | */ | ||
315 | struct bio *barrier; | ||
316 | atomic_t flush_pending; | ||
317 | struct work_struct barrier_work; | ||
294 | }; | 318 | }; |
295 | 319 | ||
296 | 320 | ||
@@ -353,7 +377,7 @@ struct md_sysfs_entry { | |||
353 | ssize_t (*show)(mddev_t *, char *); | 377 | ssize_t (*show)(mddev_t *, char *); |
354 | ssize_t (*store)(mddev_t *, const char *, size_t); | 378 | ssize_t (*store)(mddev_t *, const char *, size_t); |
355 | }; | 379 | }; |
356 | 380 | extern struct attribute_group md_bitmap_group; | |
357 | 381 | ||
358 | static inline char * mdname (mddev_t * mddev) | 382 | static inline char * mdname (mddev_t * mddev) |
359 | { | 383 | { |
@@ -431,6 +455,7 @@ extern void md_done_sync(mddev_t *mddev, int blocks, int ok); | |||
431 | extern void md_error(mddev_t *mddev, mdk_rdev_t *rdev); | 455 | extern void md_error(mddev_t *mddev, mdk_rdev_t *rdev); |
432 | 456 | ||
433 | extern int mddev_congested(mddev_t *mddev, int bits); | 457 | extern int mddev_congested(mddev_t *mddev, int bits); |
458 | extern void md_barrier_request(mddev_t *mddev, struct bio *bio); | ||
434 | extern void md_super_write(mddev_t *mddev, mdk_rdev_t *rdev, | 459 | extern void md_super_write(mddev_t *mddev, mdk_rdev_t *rdev, |
435 | sector_t sector, int size, struct page *page); | 460 | sector_t sector, int size, struct page *page); |
436 | extern void md_super_wait(mddev_t *mddev); | 461 | extern void md_super_wait(mddev_t *mddev); |
@@ -443,6 +468,8 @@ extern void md_wait_for_blocked_rdev(mdk_rdev_t *rdev, mddev_t *mddev); | |||
443 | extern void md_set_array_sectors(mddev_t *mddev, sector_t array_sectors); | 468 | extern void md_set_array_sectors(mddev_t *mddev, sector_t array_sectors); |
444 | extern int md_check_no_bitmap(mddev_t *mddev); | 469 | extern int md_check_no_bitmap(mddev_t *mddev); |
445 | extern int md_integrity_register(mddev_t *mddev); | 470 | extern int md_integrity_register(mddev_t *mddev); |
446 | void md_integrity_add_rdev(mdk_rdev_t *rdev, mddev_t *mddev); | 471 | extern void md_integrity_add_rdev(mdk_rdev_t *rdev, mddev_t *mddev); |
472 | extern int strict_strtoul_scaled(const char *cp, unsigned long *res, int scale); | ||
473 | extern void restore_bitmap_write_access(struct file *file); | ||
447 | 474 | ||
448 | #endif /* _MD_MD_H */ | 475 | #endif /* _MD_MD_H */ |