aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd/drbd_int.h
diff options
context:
space:
mode:
authorPhilipp Reisner <philipp.reisner@linbit.com>2011-07-05 09:38:59 -0400
committerPhilipp Reisner <philipp.reisner@linbit.com>2012-11-08 10:57:50 -0500
commitcdfda633d235028e9b27381dedb65416409e8729 (patch)
treec2b07a9b0f1bfb2bb04dd118df15a53ff2592ade /drivers/block/drbd/drbd_int.h
parent2fcb8f307f6014de9e771799d9ec0f050802c0ac (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.h12
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
782struct drbd_md_io { 782struct 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);
1424extern void suspend_other_sg(struct drbd_conf *mdev); 1425extern void suspend_other_sg(struct drbd_conf *mdev);
1425extern int drbd_resync_finished(struct drbd_conf *mdev); 1426extern int drbd_resync_finished(struct drbd_conf *mdev);
1426/* maybe rather drbd_main.c ? */ 1427/* maybe rather drbd_main.c ? */
1428extern void *drbd_md_get_buffer(struct drbd_conf *mdev);
1429extern void drbd_md_put_buffer(struct drbd_conf *mdev);
1427extern int drbd_md_sync_page_io(struct drbd_conf *mdev, 1430extern 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);
1429extern void drbd_ov_out_of_sync_found(struct drbd_conf *, sector_t, int); 1432extern void drbd_ov_out_of_sync_found(struct drbd_conf *, sector_t, int);
1433extern void wait_until_done_or_disk_failure(struct drbd_conf *mdev, unsigned int *done);
1430extern void drbd_rs_controller_reset(struct drbd_conf *mdev); 1434extern void drbd_rs_controller_reset(struct drbd_conf *mdev);
1431 1435
1432static inline void ov_out_of_sync_print(struct drbd_conf *mdev) 1436static 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: