diff options
author | Philipp Reisner <philipp.reisner@linbit.com> | 2011-07-05 09:38:59 -0400 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2012-11-08 10:57:50 -0500 |
commit | cdfda633d235028e9b27381dedb65416409e8729 (patch) | |
tree | c2b07a9b0f1bfb2bb04dd118df15a53ff2592ade /drivers/block/drbd/drbd_int.h | |
parent | 2fcb8f307f6014de9e771799d9ec0f050802c0ac (diff) |
drbd: detach from frozen backing device
* drbd-8.3:
documentation: Documented detach's --force and disk's --disk-timeout
drbd: Implemented the disk-timeout option
drbd: Force flag for the detach operation
drbd: Allow new IOs while the local disk in in FAILED state
drbd: Bitmap IO functions can not return prematurely if the disk breaks
drbd: Added a kref to bm_aio_ctx
drbd: Hold a reference to ldev while doing meta-data IO
drbd: Keep a reference to the bio until the completion handler finished
drbd: Implemented wait_until_done_or_disk_failure()
drbd: Replaced md_io_mutex by an atomic: md_io_in_use
drbd: moved md_io into mdev
drbd: Immediately allow completion of IOs, that wait for IO completions on a failed disk
drbd: Keep a reference to barrier acked requests
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_int.h')
-rw-r--r-- | drivers/block/drbd/drbd_int.h | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h index 6035784f0de..4e582058a7c 100644 --- a/drivers/block/drbd/drbd_int.h +++ b/drivers/block/drbd/drbd_int.h | |||
@@ -780,8 +780,7 @@ struct drbd_backing_dev { | |||
780 | }; | 780 | }; |
781 | 781 | ||
782 | struct drbd_md_io { | 782 | struct drbd_md_io { |
783 | struct drbd_conf *mdev; | 783 | unsigned int done; |
784 | struct completion event; | ||
785 | int error; | 784 | int error; |
786 | }; | 785 | }; |
787 | 786 | ||
@@ -852,6 +851,7 @@ struct drbd_tconn { /* is a resource from the config file */ | |||
852 | struct drbd_tl_epoch *newest_tle; | 851 | struct drbd_tl_epoch *newest_tle; |
853 | struct drbd_tl_epoch *oldest_tle; | 852 | struct drbd_tl_epoch *oldest_tle; |
854 | struct list_head out_of_sequence_requests; | 853 | struct list_head out_of_sequence_requests; |
854 | struct list_head barrier_acked_requests; | ||
855 | 855 | ||
856 | struct crypto_hash *cram_hmac_tfm; | 856 | struct crypto_hash *cram_hmac_tfm; |
857 | struct crypto_hash *integrity_tfm; /* checksums we compute, updates protected by tconn->data->mutex */ | 857 | struct crypto_hash *integrity_tfm; /* checksums we compute, updates protected by tconn->data->mutex */ |
@@ -978,7 +978,8 @@ struct drbd_conf { | |||
978 | atomic_t pp_in_use_by_net; /* sendpage()d, still referenced by tcp */ | 978 | atomic_t pp_in_use_by_net; /* sendpage()d, still referenced by tcp */ |
979 | wait_queue_head_t ee_wait; | 979 | wait_queue_head_t ee_wait; |
980 | struct page *md_io_page; /* one page buffer for md_io */ | 980 | struct page *md_io_page; /* one page buffer for md_io */ |
981 | struct mutex md_io_mutex; /* protects the md_io_buffer */ | 981 | struct drbd_md_io md_io; |
982 | atomic_t md_io_in_use; /* protects the md_io, md_io_page and md_io_tmpp */ | ||
982 | spinlock_t al_lock; | 983 | spinlock_t al_lock; |
983 | wait_queue_head_t al_wait; | 984 | wait_queue_head_t al_wait; |
984 | struct lru_cache *act_log; /* activity log */ | 985 | struct lru_cache *act_log; /* activity log */ |
@@ -1424,9 +1425,12 @@ extern void resume_next_sg(struct drbd_conf *mdev); | |||
1424 | extern void suspend_other_sg(struct drbd_conf *mdev); | 1425 | extern void suspend_other_sg(struct drbd_conf *mdev); |
1425 | extern int drbd_resync_finished(struct drbd_conf *mdev); | 1426 | extern int drbd_resync_finished(struct drbd_conf *mdev); |
1426 | /* maybe rather drbd_main.c ? */ | 1427 | /* maybe rather drbd_main.c ? */ |
1428 | extern void *drbd_md_get_buffer(struct drbd_conf *mdev); | ||
1429 | extern void drbd_md_put_buffer(struct drbd_conf *mdev); | ||
1427 | extern int drbd_md_sync_page_io(struct drbd_conf *mdev, | 1430 | extern int drbd_md_sync_page_io(struct drbd_conf *mdev, |
1428 | struct drbd_backing_dev *bdev, sector_t sector, int rw); | 1431 | struct drbd_backing_dev *bdev, sector_t sector, int rw); |
1429 | extern void drbd_ov_out_of_sync_found(struct drbd_conf *, sector_t, int); | 1432 | extern void drbd_ov_out_of_sync_found(struct drbd_conf *, sector_t, int); |
1433 | extern void wait_until_done_or_disk_failure(struct drbd_conf *mdev, unsigned int *done); | ||
1430 | extern void drbd_rs_controller_reset(struct drbd_conf *mdev); | 1434 | extern void drbd_rs_controller_reset(struct drbd_conf *mdev); |
1431 | 1435 | ||
1432 | static inline void ov_out_of_sync_print(struct drbd_conf *mdev) | 1436 | static inline void ov_out_of_sync_print(struct drbd_conf *mdev) |
@@ -2151,12 +2155,12 @@ static inline int drbd_state_is_stable(struct drbd_conf *mdev) | |||
2151 | case D_OUTDATED: | 2155 | case D_OUTDATED: |
2152 | case D_CONSISTENT: | 2156 | case D_CONSISTENT: |
2153 | case D_UP_TO_DATE: | 2157 | case D_UP_TO_DATE: |
2158 | case D_FAILED: | ||
2154 | /* disk state is stable as well. */ | 2159 | /* disk state is stable as well. */ |
2155 | break; | 2160 | break; |
2156 | 2161 | ||
2157 | /* no new io accepted during transitional states */ | 2162 | /* no new io accepted during transitional states */ |
2158 | case D_ATTACHING: | 2163 | case D_ATTACHING: |
2159 | case D_FAILED: | ||
2160 | case D_NEGOTIATING: | 2164 | case D_NEGOTIATING: |
2161 | case D_UNKNOWN: | 2165 | case D_UNKNOWN: |
2162 | case D_MASK: | 2166 | case D_MASK: |