aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/block/drbd/drbd_actlog.c4
-rw-r--r--drivers/block/drbd/drbd_bitmap.c4
-rw-r--r--drivers/block/drbd/drbd_int.h9
-rw-r--r--drivers/block/drbd/drbd_receiver.c4
-rw-r--r--drivers/block/drbd/drbd_req.c6
-rw-r--r--drivers/block/drbd/drbd_wrappers.h2
6 files changed, 14 insertions, 15 deletions
diff --git a/drivers/block/drbd/drbd_actlog.c b/drivers/block/drbd/drbd_actlog.c
index 4a1b199f4ae7..2e8a95ce79b1 100644
--- a/drivers/block/drbd/drbd_actlog.c
+++ b/drivers/block/drbd/drbd_actlog.c
@@ -92,7 +92,7 @@ static int _drbd_md_sync_page_io(struct drbd_conf *mdev,
92 bio->bi_end_io = drbd_md_io_complete; 92 bio->bi_end_io = drbd_md_io_complete;
93 bio->bi_rw = rw; 93 bio->bi_rw = rw;
94 94
95 if (FAULT_ACTIVE(mdev, (rw & WRITE) ? DRBD_FAULT_MD_WR : DRBD_FAULT_MD_RD)) 95 if (drbd_insert_fault(mdev, (rw & WRITE) ? DRBD_FAULT_MD_WR : DRBD_FAULT_MD_RD))
96 bio_endio(bio, -EIO); 96 bio_endio(bio, -EIO);
97 else 97 else
98 submit_bio(rw, bio); 98 submit_bio(rw, bio);
@@ -685,7 +685,7 @@ void drbd_al_to_on_disk_bm(struct drbd_conf *mdev)
685 for (i = 0; i < nr_elements; i++) { 685 for (i = 0; i < nr_elements; i++) {
686 if (bios[i] == NULL) 686 if (bios[i] == NULL)
687 break; 687 break;
688 if (FAULT_ACTIVE(mdev, DRBD_FAULT_MD_WR)) { 688 if (drbd_insert_fault(mdev, DRBD_FAULT_MD_WR)) {
689 bios[i]->bi_rw = WRITE; 689 bios[i]->bi_rw = WRITE;
690 bio_endio(bios[i], -EIO); 690 bio_endio(bios[i], -EIO);
691 } else { 691 } else {
diff --git a/drivers/block/drbd/drbd_bitmap.c b/drivers/block/drbd/drbd_bitmap.c
index 0645ca829a94..5dafbabe9617 100644
--- a/drivers/block/drbd/drbd_bitmap.c
+++ b/drivers/block/drbd/drbd_bitmap.c
@@ -502,7 +502,7 @@ int drbd_bm_resize(struct drbd_conf *mdev, sector_t capacity, int set_new_bits)
502 D_ASSERT(b->bm_pages != NULL); 502 D_ASSERT(b->bm_pages != NULL);
503 npages = b->bm_pages; 503 npages = b->bm_pages;
504 } else { 504 } else {
505 if (FAULT_ACTIVE(mdev, DRBD_FAULT_BM_ALLOC)) 505 if (drbd_insert_fault(mdev, DRBD_FAULT_BM_ALLOC))
506 npages = NULL; 506 npages = NULL;
507 else 507 else
508 npages = bm_realloc_pages(b, want); 508 npages = bm_realloc_pages(b, want);
@@ -768,7 +768,7 @@ static void bm_page_io_async(struct drbd_conf *mdev, struct drbd_bitmap *b, int
768 bio->bi_private = b; 768 bio->bi_private = b;
769 bio->bi_end_io = bm_async_io_complete; 769 bio->bi_end_io = bm_async_io_complete;
770 770
771 if (FAULT_ACTIVE(mdev, (rw & WRITE) ? DRBD_FAULT_MD_WR : DRBD_FAULT_MD_RD)) { 771 if (drbd_insert_fault(mdev, (rw & WRITE) ? DRBD_FAULT_MD_WR : DRBD_FAULT_MD_RD)) {
772 bio->bi_rw |= rw; 772 bio->bi_rw |= rw;
773 bio_endio(bio, -EIO); 773 bio_endio(bio, -EIO);
774 } else { 774 } else {
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
index 7514cf7a958c..c81710a42111 100644
--- a/drivers/block/drbd/drbd_int.h
+++ b/drivers/block/drbd/drbd_int.h
@@ -137,20 +137,19 @@ enum {
137 DRBD_FAULT_MAX, 137 DRBD_FAULT_MAX,
138}; 138};
139 139
140#ifdef CONFIG_DRBD_FAULT_INJECTION
141extern unsigned int 140extern unsigned int
142_drbd_insert_fault(struct drbd_conf *mdev, unsigned int type); 141_drbd_insert_fault(struct drbd_conf *mdev, unsigned int type);
142
143static inline int 143static inline int
144drbd_insert_fault(struct drbd_conf *mdev, unsigned int type) { 144drbd_insert_fault(struct drbd_conf *mdev, unsigned int type) {
145#ifdef CONFIG_DRBD_FAULT_INJECTION
145 return fault_rate && 146 return fault_rate &&
146 (enable_faults & (1<<type)) && 147 (enable_faults & (1<<type)) &&
147 _drbd_insert_fault(mdev, type); 148 _drbd_insert_fault(mdev, type);
148}
149#define FAULT_ACTIVE(_m, _t) (drbd_insert_fault((_m), (_t)))
150
151#else 149#else
152#define FAULT_ACTIVE(_m, _t) (0) 150 return 0;
153#endif 151#endif
152}
154 153
155/* integer division, round _UP_ to the next integer */ 154/* integer division, round _UP_ to the next integer */
156#define div_ceil(A, B) ((A)/(B) + ((A)%(B) ? 1 : 0)) 155#define div_ceil(A, B) ((A)/(B) + ((A)%(B) ? 1 : 0))
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c
index 55fee1a6c647..d34d093278c7 100644
--- a/drivers/block/drbd/drbd_receiver.c
+++ b/drivers/block/drbd/drbd_receiver.c
@@ -319,7 +319,7 @@ struct drbd_epoch_entry *drbd_alloc_ee(struct drbd_conf *mdev,
319 struct page *page; 319 struct page *page;
320 unsigned nr_pages = (data_size + PAGE_SIZE -1) >> PAGE_SHIFT; 320 unsigned nr_pages = (data_size + PAGE_SIZE -1) >> PAGE_SHIFT;
321 321
322 if (FAULT_ACTIVE(mdev, DRBD_FAULT_AL_EE)) 322 if (drbd_insert_fault(mdev, DRBD_FAULT_AL_EE))
323 return NULL; 323 return NULL;
324 324
325 e = mempool_alloc(drbd_ee_mempool, gfp_mask & ~__GFP_HIGHMEM); 325 e = mempool_alloc(drbd_ee_mempool, gfp_mask & ~__GFP_HIGHMEM);
@@ -1264,7 +1264,7 @@ read_in_block(struct drbd_conf *mdev, u64 id, sector_t sector, int data_size) __
1264 unsigned len = min_t(int, ds, PAGE_SIZE); 1264 unsigned len = min_t(int, ds, PAGE_SIZE);
1265 data = kmap(page); 1265 data = kmap(page);
1266 rr = drbd_recv(mdev, data, len); 1266 rr = drbd_recv(mdev, data, len);
1267 if (FAULT_ACTIVE(mdev, DRBD_FAULT_RECEIVE)) { 1267 if (drbd_insert_fault(mdev, DRBD_FAULT_RECEIVE)) {
1268 dev_err(DEV, "Fault injection: Corrupting data on receive\n"); 1268 dev_err(DEV, "Fault injection: Corrupting data on receive\n");
1269 data[0] = data[0] ^ (unsigned long)-1; 1269 data[0] = data[0] ^ (unsigned long)-1;
1270 } 1270 }
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c
index 079213d93490..53e7cc506456 100644
--- a/drivers/block/drbd/drbd_req.c
+++ b/drivers/block/drbd/drbd_req.c
@@ -1020,9 +1020,9 @@ allocate_barrier:
1020 * stable storage, and this is a WRITE, we may not even submit 1020 * stable storage, and this is a WRITE, we may not even submit
1021 * this bio. */ 1021 * this bio. */
1022 if (get_ldev(mdev)) { 1022 if (get_ldev(mdev)) {
1023 if (FAULT_ACTIVE(mdev, rw == WRITE ? DRBD_FAULT_DT_WR 1023 if (drbd_insert_fault(mdev, rw == WRITE ? DRBD_FAULT_DT_WR
1024 : rw == READ ? DRBD_FAULT_DT_RD 1024 : rw == READ ? DRBD_FAULT_DT_RD
1025 : DRBD_FAULT_DT_RA)) 1025 : DRBD_FAULT_DT_RA))
1026 bio_endio(req->private_bio, -EIO); 1026 bio_endio(req->private_bio, -EIO);
1027 else 1027 else
1028 generic_make_request(req->private_bio); 1028 generic_make_request(req->private_bio);
diff --git a/drivers/block/drbd/drbd_wrappers.h b/drivers/block/drbd/drbd_wrappers.h
index 53586fa5ae1b..151f1a37478f 100644
--- a/drivers/block/drbd/drbd_wrappers.h
+++ b/drivers/block/drbd/drbd_wrappers.h
@@ -39,7 +39,7 @@ static inline void drbd_generic_make_request(struct drbd_conf *mdev,
39 return; 39 return;
40 } 40 }
41 41
42 if (FAULT_ACTIVE(mdev, fault_type)) 42 if (drbd_insert_fault(mdev, fault_type))
43 bio_endio(bio, -EIO); 43 bio_endio(bio, -EIO);
44 else 44 else
45 generic_make_request(bio); 45 generic_make_request(bio);