xref: /linux/drivers/block/drbd/drbd_worker.c (revision 24280d1d28328778c47094fe288a7dee83138da1)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3    drbd_worker.c
4 
5    This file is part of DRBD by Philipp Reisner and Lars Ellenberg.
6 
7    Copyright (C) 2001-2008, LINBIT Information Technologies GmbH.
8    Copyright (C) 1999-2008, Philipp Reisner <philipp.reisner@linbit.com>.
9    Copyright (C) 2002-2008, Lars Ellenberg <lars.ellenberg@linbit.com>.
10 
11 
12 */
13 
14 #include <linux/module.h>
15 #include <linux/drbd.h>
16 #include <linux/sched/signal.h>
17 #include <linux/wait.h>
18 #include <linux/mm.h>
19 #include <linux/memcontrol.h>
20 #include <linux/mm_inline.h>
21 #include <linux/slab.h>
22 #include <linux/random.h>
23 #include <linux/string.h>
24 #include <linux/scatterlist.h>
25 #include <linux/part_stat.h>
26 
27 #include "drbd_int.h"
28 #include "drbd_protocol.h"
29 #include "drbd_req.h"
30 
31 static int make_ov_request(struct drbd_peer_device *, int);
32 static int make_resync_request(struct drbd_peer_device *, int);
33 
34 /* endio handlers:
35  *   drbd_md_endio (defined here)
36  *   drbd_request_endio (defined here)
37  *   drbd_peer_request_endio (defined here)
38  *   drbd_bm_endio (defined in drbd_bitmap.c)
39  *
40  * For all these callbacks, note the following:
41  * The callbacks will be called in irq context by the IDE drivers,
42  * and in Softirqs/Tasklets/BH context by the SCSI drivers.
43  * Try to get the locking right :)
44  *
45  */
46 
47 /* used for synchronous meta data and bitmap IO
48  * submitted by drbd_md_sync_page_io()
49  */
50 void drbd_md_endio(struct bio *bio)
51 {
52 	struct drbd_device *device;
53 
54 	device = bio->bi_private;
55 	device->md_io.error = blk_status_to_errno(bio->bi_status);
56 
57 	/* special case: drbd_md_read() during drbd_adm_attach() */
58 	if (device->ldev)
59 		put_ldev(device);
60 	bio_put(bio);
61 
62 	/* We grabbed an extra reference in _drbd_md_sync_page_io() to be able
63 	 * to timeout on the lower level device, and eventually detach from it.
64 	 * If this io completion runs after that timeout expired, this
65 	 * drbd_md_put_buffer() may allow us to finally try and re-attach.
66 	 * During normal operation, this only puts that extra reference
67 	 * down to 1 again.
68 	 * Make sure we first drop the reference, and only then signal
69 	 * completion, or we may (in drbd_al_read_log()) cycle so fast into the
70 	 * next drbd_md_sync_page_io(), that we trigger the
71 	 * ASSERT(atomic_read(&device->md_io_in_use) == 1) there.
72 	 */
73 	drbd_md_put_buffer(device);
74 	device->md_io.done = 1;
75 	wake_up(&device->misc_wait);
76 }
77 
78 /* reads on behalf of the partner,
79  * "submitted" by the receiver
80  */
81 static void drbd_endio_read_sec_final(struct drbd_peer_request *peer_req) __releases(local)
82 {
83 	unsigned long flags = 0;
84 	struct drbd_peer_device *peer_device = peer_req->peer_device;
85 	struct drbd_device *device = peer_device->device;
86 
87 	spin_lock_irqsave(&device->resource->req_lock, flags);
88 	device->read_cnt += peer_req->i.size >> 9;
89 	list_del(&peer_req->w.list);
90 	if (list_empty(&device->read_ee))
91 		wake_up(&device->ee_wait);
92 	if (test_bit(__EE_WAS_ERROR, &peer_req->flags))
93 		__drbd_chk_io_error(device, DRBD_READ_ERROR);
94 	spin_unlock_irqrestore(&device->resource->req_lock, flags);
95 
96 	drbd_queue_work(&peer_device->connection->sender_work, &peer_req->w);
97 	put_ldev(device);
98 }
99 
100 /* writes on behalf of the partner, or resync writes,
101  * "submitted" by the receiver, final stage.  */
102 void drbd_endio_write_sec_final(struct drbd_peer_request *peer_req) __releases(local)
103 {
104 	unsigned long flags = 0;
105 	struct drbd_peer_device *peer_device = peer_req->peer_device;
106 	struct drbd_device *device = peer_device->device;
107 	struct drbd_connection *connection = peer_device->connection;
108 	struct drbd_interval i;
109 	int do_wake;
110 	u64 block_id;
111 	int do_al_complete_io;
112 
113 	/* after we moved peer_req to done_ee,
114 	 * we may no longer access it,
115 	 * it may be freed/reused already!
116 	 * (as soon as we release the req_lock) */
117 	i = peer_req->i;
118 	do_al_complete_io = peer_req->flags & EE_CALL_AL_COMPLETE_IO;
119 	block_id = peer_req->block_id;
120 	peer_req->flags &= ~EE_CALL_AL_COMPLETE_IO;
121 
122 	if (peer_req->flags & EE_WAS_ERROR) {
123 		/* In protocol != C, we usually do not send write acks.
124 		 * In case of a write error, send the neg ack anyways. */
125 		if (!__test_and_set_bit(__EE_SEND_WRITE_ACK, &peer_req->flags))
126 			inc_unacked(device);
127 		drbd_set_out_of_sync(peer_device, peer_req->i.sector, peer_req->i.size);
128 	}
129 
130 	spin_lock_irqsave(&device->resource->req_lock, flags);
131 	device->writ_cnt += peer_req->i.size >> 9;
132 	list_move_tail(&peer_req->w.list, &device->done_ee);
133 
134 	/*
135 	 * Do not remove from the write_requests tree here: we did not send the
136 	 * Ack yet and did not wake possibly waiting conflicting requests.
137 	 * Removed from the tree from "drbd_process_done_ee" within the
138 	 * appropriate dw.cb (e_end_block/e_end_resync_block) or from
139 	 * _drbd_clear_done_ee.
140 	 */
141 
142 	do_wake = list_empty(block_id == ID_SYNCER ? &device->sync_ee : &device->active_ee);
143 
144 	/* FIXME do we want to detach for failed REQ_OP_DISCARD?
145 	 * ((peer_req->flags & (EE_WAS_ERROR|EE_TRIM)) == EE_WAS_ERROR) */
146 	if (peer_req->flags & EE_WAS_ERROR)
147 		__drbd_chk_io_error(device, DRBD_WRITE_ERROR);
148 
149 	if (connection->cstate >= C_WF_REPORT_PARAMS) {
150 		kref_get(&device->kref); /* put is in drbd_send_acks_wf() */
151 		if (!queue_work(connection->ack_sender, &peer_device->send_acks_work))
152 			kref_put(&device->kref, drbd_destroy_device);
153 	}
154 	spin_unlock_irqrestore(&device->resource->req_lock, flags);
155 
156 	if (block_id == ID_SYNCER)
157 		drbd_rs_complete_io(device, i.sector);
158 
159 	if (do_wake)
160 		wake_up(&device->ee_wait);
161 
162 	if (do_al_complete_io)
163 		drbd_al_complete_io(device, &i);
164 
165 	put_ldev(device);
166 }
167 
168 /* writes on behalf of the partner, or resync writes,
169  * "submitted" by the receiver.
170  */
171 void drbd_peer_request_endio(struct bio *bio)
172 {
173 	struct drbd_peer_request *peer_req = bio->bi_private;
174 	struct drbd_device *device = peer_req->peer_device->device;
175 	bool is_write = bio_data_dir(bio) == WRITE;
176 	bool is_discard = bio_op(bio) == REQ_OP_WRITE_ZEROES ||
177 			  bio_op(bio) == REQ_OP_DISCARD;
178 
179 	if (bio->bi_status && drbd_ratelimit())
180 		drbd_warn(device, "%s: error=%d s=%llus\n",
181 				is_write ? (is_discard ? "discard" : "write")
182 					: "read", bio->bi_status,
183 				(unsigned long long)peer_req->i.sector);
184 
185 	if (bio->bi_status)
186 		set_bit(__EE_WAS_ERROR, &peer_req->flags);
187 
188 	bio_put(bio); /* no need for the bio anymore */
189 	if (atomic_dec_and_test(&peer_req->pending_bios)) {
190 		if (is_write)
191 			drbd_endio_write_sec_final(peer_req);
192 		else
193 			drbd_endio_read_sec_final(peer_req);
194 	}
195 }
196 
197 static void
198 drbd_panic_after_delayed_completion_of_aborted_request(struct drbd_device *device)
199 {
200 	panic("drbd%u %s/%u potential random memory corruption caused by delayed completion of aborted local request\n",
201 		device->minor, device->resource->name, device->vnr);
202 }
203 
204 /* read, readA or write requests on R_PRIMARY coming from drbd_make_request
205  */
206 void drbd_request_endio(struct bio *bio)
207 {
208 	unsigned long flags;
209 	struct drbd_request *req = bio->bi_private;
210 	struct drbd_device *device = req->device;
211 	struct bio_and_error m;
212 	enum drbd_req_event what;
213 
214 	/* If this request was aborted locally before,
215 	 * but now was completed "successfully",
216 	 * chances are that this caused arbitrary data corruption.
217 	 *
218 	 * "aborting" requests, or force-detaching the disk, is intended for
219 	 * completely blocked/hung local backing devices which do no longer
220 	 * complete requests at all, not even do error completions.  In this
221 	 * situation, usually a hard-reset and failover is the only way out.
222 	 *
223 	 * By "aborting", basically faking a local error-completion,
224 	 * we allow for a more graceful swichover by cleanly migrating services.
225 	 * Still the affected node has to be rebooted "soon".
226 	 *
227 	 * By completing these requests, we allow the upper layers to re-use
228 	 * the associated data pages.
229 	 *
230 	 * If later the local backing device "recovers", and now DMAs some data
231 	 * from disk into the original request pages, in the best case it will
232 	 * just put random data into unused pages; but typically it will corrupt
233 	 * meanwhile completely unrelated data, causing all sorts of damage.
234 	 *
235 	 * Which means delayed successful completion,
236 	 * especially for READ requests,
237 	 * is a reason to panic().
238 	 *
239 	 * We assume that a delayed *error* completion is OK,
240 	 * though we still will complain noisily about it.
241 	 */
242 	if (unlikely(req->rq_state & RQ_LOCAL_ABORTED)) {
243 		if (drbd_ratelimit())
244 			drbd_emerg(device, "delayed completion of aborted local request; disk-timeout may be too aggressive\n");
245 
246 		if (!bio->bi_status)
247 			drbd_panic_after_delayed_completion_of_aborted_request(device);
248 	}
249 
250 	/* to avoid recursion in __req_mod */
251 	if (unlikely(bio->bi_status)) {
252 		switch (bio_op(bio)) {
253 		case REQ_OP_WRITE_ZEROES:
254 		case REQ_OP_DISCARD:
255 			if (bio->bi_status == BLK_STS_NOTSUPP)
256 				what = DISCARD_COMPLETED_NOTSUPP;
257 			else
258 				what = DISCARD_COMPLETED_WITH_ERROR;
259 			break;
260 		case REQ_OP_READ:
261 			if (bio->bi_opf & REQ_RAHEAD)
262 				what = READ_AHEAD_COMPLETED_WITH_ERROR;
263 			else
264 				what = READ_COMPLETED_WITH_ERROR;
265 			break;
266 		default:
267 			what = WRITE_COMPLETED_WITH_ERROR;
268 			break;
269 		}
270 	} else {
271 		what = COMPLETED_OK;
272 	}
273 
274 	req->private_bio = ERR_PTR(blk_status_to_errno(bio->bi_status));
275 	bio_put(bio);
276 
277 	/* not req_mod(), we need irqsave here! */
278 	spin_lock_irqsave(&device->resource->req_lock, flags);
279 	__req_mod(req, what, NULL, &m);
280 	spin_unlock_irqrestore(&device->resource->req_lock, flags);
281 	put_ldev(device);
282 
283 	if (m.bio)
284 		complete_master_bio(device, &m);
285 }
286 
287 void drbd_csum_ee(struct crypto_shash *tfm, struct drbd_peer_request *peer_req, void *digest)
288 {
289 	SHASH_DESC_ON_STACK(desc, tfm);
290 	struct page *page = peer_req->pages;
291 	struct page *tmp;
292 	unsigned len;
293 	void *src;
294 
295 	desc->tfm = tfm;
296 
297 	crypto_shash_init(desc);
298 
299 	src = kmap_atomic(page);
300 	while ((tmp = page_chain_next(page))) {
301 		/* all but the last page will be fully used */
302 		crypto_shash_update(desc, src, PAGE_SIZE);
303 		kunmap_atomic(src);
304 		page = tmp;
305 		src = kmap_atomic(page);
306 	}
307 	/* and now the last, possibly only partially used page */
308 	len = peer_req->i.size & (PAGE_SIZE - 1);
309 	crypto_shash_update(desc, src, len ?: PAGE_SIZE);
310 	kunmap_atomic(src);
311 
312 	crypto_shash_final(desc, digest);
313 	shash_desc_zero(desc);
314 }
315 
316 void drbd_csum_bio(struct crypto_shash *tfm, struct bio *bio, void *digest)
317 {
318 	SHASH_DESC_ON_STACK(desc, tfm);
319 	struct bio_vec bvec;
320 	struct bvec_iter iter;
321 
322 	desc->tfm = tfm;
323 
324 	crypto_shash_init(desc);
325 
326 	bio_for_each_segment(bvec, bio, iter) {
327 		u8 *src;
328 
329 		src = bvec_kmap_local(&bvec);
330 		crypto_shash_update(desc, src, bvec.bv_len);
331 		kunmap_local(src);
332 	}
333 	crypto_shash_final(desc, digest);
334 	shash_desc_zero(desc);
335 }
336 
337 /* MAYBE merge common code with w_e_end_ov_req */
338 static int w_e_send_csum(struct drbd_work *w, int cancel)
339 {
340 	struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w);
341 	struct drbd_peer_device *peer_device = peer_req->peer_device;
342 	struct drbd_device *device = peer_device->device;
343 	int digest_size;
344 	void *digest;
345 	int err = 0;
346 
347 	if (unlikely(cancel))
348 		goto out;
349 
350 	if (unlikely((peer_req->flags & EE_WAS_ERROR) != 0))
351 		goto out;
352 
353 	digest_size = crypto_shash_digestsize(peer_device->connection->csums_tfm);
354 	digest = kmalloc(digest_size, GFP_NOIO);
355 	if (digest) {
356 		sector_t sector = peer_req->i.sector;
357 		unsigned int size = peer_req->i.size;
358 		drbd_csum_ee(peer_device->connection->csums_tfm, peer_req, digest);
359 		/* Free peer_req and pages before send.
360 		 * In case we block on congestion, we could otherwise run into
361 		 * some distributed deadlock, if the other side blocks on
362 		 * congestion as well, because our receiver blocks in
363 		 * drbd_alloc_pages due to pp_in_use > max_buffers. */
364 		drbd_free_peer_req(device, peer_req);
365 		peer_req = NULL;
366 		inc_rs_pending(peer_device);
367 		err = drbd_send_drequest_csum(peer_device, sector, size,
368 					      digest, digest_size,
369 					      P_CSUM_RS_REQUEST);
370 		kfree(digest);
371 	} else {
372 		drbd_err(device, "kmalloc() of digest failed.\n");
373 		err = -ENOMEM;
374 	}
375 
376 out:
377 	if (peer_req)
378 		drbd_free_peer_req(device, peer_req);
379 
380 	if (unlikely(err))
381 		drbd_err(device, "drbd_send_drequest(..., csum) failed\n");
382 	return err;
383 }
384 
385 #define GFP_TRY	(__GFP_HIGHMEM | __GFP_NOWARN)
386 
387 static int read_for_csum(struct drbd_peer_device *peer_device, sector_t sector, int size)
388 {
389 	struct drbd_device *device = peer_device->device;
390 	struct drbd_peer_request *peer_req;
391 
392 	if (!get_ldev(device))
393 		return -EIO;
394 
395 	/* GFP_TRY, because if there is no memory available right now, this may
396 	 * be rescheduled for later. It is "only" background resync, after all. */
397 	peer_req = drbd_alloc_peer_req(peer_device, ID_SYNCER /* unused */, sector,
398 				       size, size, GFP_TRY);
399 	if (!peer_req)
400 		goto defer;
401 
402 	peer_req->w.cb = w_e_send_csum;
403 	peer_req->opf = REQ_OP_READ;
404 	spin_lock_irq(&device->resource->req_lock);
405 	list_add_tail(&peer_req->w.list, &device->read_ee);
406 	spin_unlock_irq(&device->resource->req_lock);
407 
408 	atomic_add(size >> 9, &device->rs_sect_ev);
409 	if (drbd_submit_peer_request(peer_req) == 0)
410 		return 0;
411 
412 	/* If it failed because of ENOMEM, retry should help.  If it failed
413 	 * because bio_add_page failed (probably broken lower level driver),
414 	 * retry may or may not help.
415 	 * If it does not, you may need to force disconnect. */
416 	spin_lock_irq(&device->resource->req_lock);
417 	list_del(&peer_req->w.list);
418 	spin_unlock_irq(&device->resource->req_lock);
419 
420 	drbd_free_peer_req(device, peer_req);
421 defer:
422 	put_ldev(device);
423 	return -EAGAIN;
424 }
425 
426 int w_resync_timer(struct drbd_work *w, int cancel)
427 {
428 	struct drbd_device *device =
429 		container_of(w, struct drbd_device, resync_work);
430 
431 	switch (device->state.conn) {
432 	case C_VERIFY_S:
433 		make_ov_request(first_peer_device(device), cancel);
434 		break;
435 	case C_SYNC_TARGET:
436 		make_resync_request(first_peer_device(device), cancel);
437 		break;
438 	}
439 
440 	return 0;
441 }
442 
443 void resync_timer_fn(struct timer_list *t)
444 {
445 	struct drbd_device *device = timer_container_of(device, t,
446 							resync_timer);
447 
448 	drbd_queue_work_if_unqueued(
449 		&first_peer_device(device)->connection->sender_work,
450 		&device->resync_work);
451 }
452 
453 static void fifo_set(struct fifo_buffer *fb, int value)
454 {
455 	int i;
456 
457 	for (i = 0; i < fb->size; i++)
458 		fb->values[i] = value;
459 }
460 
461 static int fifo_push(struct fifo_buffer *fb, int value)
462 {
463 	int ov;
464 
465 	ov = fb->values[fb->head_index];
466 	fb->values[fb->head_index++] = value;
467 
468 	if (fb->head_index >= fb->size)
469 		fb->head_index = 0;
470 
471 	return ov;
472 }
473 
474 static void fifo_add_val(struct fifo_buffer *fb, int value)
475 {
476 	int i;
477 
478 	for (i = 0; i < fb->size; i++)
479 		fb->values[i] += value;
480 }
481 
482 struct fifo_buffer *fifo_alloc(unsigned int fifo_size)
483 {
484 	struct fifo_buffer *fb;
485 
486 	fb = kzalloc_flex(*fb, values, fifo_size, GFP_NOIO);
487 	if (!fb)
488 		return NULL;
489 
490 	fb->head_index = 0;
491 	fb->size = fifo_size;
492 	fb->total = 0;
493 
494 	return fb;
495 }
496 
497 static int drbd_rs_controller(struct drbd_peer_device *peer_device, unsigned int sect_in)
498 {
499 	struct drbd_device *device = peer_device->device;
500 	struct disk_conf *dc;
501 	unsigned int want;     /* The number of sectors we want in-flight */
502 	int req_sect; /* Number of sectors to request in this turn */
503 	int correction; /* Number of sectors more we need in-flight */
504 	int cps; /* correction per invocation of drbd_rs_controller() */
505 	int steps; /* Number of time steps to plan ahead */
506 	int curr_corr;
507 	int max_sect;
508 	struct fifo_buffer *plan;
509 
510 	dc = rcu_dereference(device->ldev->disk_conf);
511 	plan = rcu_dereference(device->rs_plan_s);
512 
513 	steps = plan->size; /* (dc->c_plan_ahead * 10 * SLEEP_TIME) / HZ; */
514 
515 	if (device->rs_in_flight + sect_in == 0) { /* At start of resync */
516 		want = ((dc->resync_rate * 2 * SLEEP_TIME) / HZ) * steps;
517 	} else { /* normal path */
518 		want = dc->c_fill_target ? dc->c_fill_target :
519 			sect_in * dc->c_delay_target * HZ / (SLEEP_TIME * 10);
520 	}
521 
522 	correction = want - device->rs_in_flight - plan->total;
523 
524 	/* Plan ahead */
525 	cps = correction / steps;
526 	fifo_add_val(plan, cps);
527 	plan->total += cps * steps;
528 
529 	/* What we do in this step */
530 	curr_corr = fifo_push(plan, 0);
531 	plan->total -= curr_corr;
532 
533 	req_sect = sect_in + curr_corr;
534 	if (req_sect < 0)
535 		req_sect = 0;
536 
537 	max_sect = (dc->c_max_rate * 2 * SLEEP_TIME) / HZ;
538 	if (req_sect > max_sect)
539 		req_sect = max_sect;
540 
541 	/*
542 	drbd_warn(device, "si=%u if=%d wa=%u co=%d st=%d cps=%d pl=%d cc=%d rs=%d\n",
543 		 sect_in, device->rs_in_flight, want, correction,
544 		 steps, cps, device->rs_planed, curr_corr, req_sect);
545 	*/
546 
547 	return req_sect;
548 }
549 
550 static int drbd_rs_number_requests(struct drbd_peer_device *peer_device)
551 {
552 	struct drbd_device *device = peer_device->device;
553 	unsigned int sect_in;  /* Number of sectors that came in since the last turn */
554 	int number, mxb;
555 
556 	sect_in = atomic_xchg(&device->rs_sect_in, 0);
557 	device->rs_in_flight -= sect_in;
558 
559 	rcu_read_lock();
560 	mxb = drbd_get_max_buffers(device) / 2;
561 	if (rcu_dereference(device->rs_plan_s)->size) {
562 		number = drbd_rs_controller(peer_device, sect_in) >> (BM_BLOCK_SHIFT - 9);
563 		device->c_sync_rate = number * HZ * (BM_BLOCK_SIZE / 1024) / SLEEP_TIME;
564 	} else {
565 		device->c_sync_rate = rcu_dereference(device->ldev->disk_conf)->resync_rate;
566 		number = SLEEP_TIME * device->c_sync_rate  / ((BM_BLOCK_SIZE / 1024) * HZ);
567 	}
568 	rcu_read_unlock();
569 
570 	/* Don't have more than "max-buffers"/2 in-flight.
571 	 * Otherwise we may cause the remote site to stall on drbd_alloc_pages(),
572 	 * potentially causing a distributed deadlock on congestion during
573 	 * online-verify or (checksum-based) resync, if max-buffers,
574 	 * socket buffer sizes and resync rate settings are mis-configured. */
575 
576 	/* note that "number" is in units of "BM_BLOCK_SIZE" (which is 4k),
577 	 * mxb (as used here, and in drbd_alloc_pages on the peer) is
578 	 * "number of pages" (typically also 4k),
579 	 * but "rs_in_flight" is in "sectors" (512 Byte). */
580 	if (mxb - device->rs_in_flight/8 < number)
581 		number = mxb - device->rs_in_flight/8;
582 
583 	return number;
584 }
585 
586 static int make_resync_request(struct drbd_peer_device *const peer_device, int cancel)
587 {
588 	struct drbd_device *const device = peer_device->device;
589 	struct drbd_connection *const connection = peer_device ? peer_device->connection : NULL;
590 	unsigned long bit;
591 	sector_t sector;
592 	const sector_t capacity = get_capacity(device->vdisk);
593 	int max_bio_size;
594 	int number, rollback_i, size;
595 	int align, requeue = 0;
596 	int i = 0;
597 	int discard_granularity = 0;
598 
599 	if (unlikely(cancel))
600 		return 0;
601 
602 	if (device->rs_total == 0) {
603 		/* empty resync? */
604 		drbd_resync_finished(peer_device);
605 		return 0;
606 	}
607 
608 	if (!get_ldev(device)) {
609 		/* Since we only need to access device->rsync a
610 		   get_ldev_if_state(device,D_FAILED) would be sufficient, but
611 		   to continue resync with a broken disk makes no sense at
612 		   all */
613 		drbd_err(device, "Disk broke down during resync!\n");
614 		return 0;
615 	}
616 
617 	if (connection->agreed_features & DRBD_FF_THIN_RESYNC) {
618 		rcu_read_lock();
619 		discard_granularity = rcu_dereference(device->ldev->disk_conf)->rs_discard_granularity;
620 		rcu_read_unlock();
621 	}
622 
623 	max_bio_size = queue_max_hw_sectors(device->rq_queue) << 9;
624 	number = drbd_rs_number_requests(peer_device);
625 	if (number <= 0)
626 		goto requeue;
627 
628 	for (i = 0; i < number; i++) {
629 		/* Stop generating RS requests when half of the send buffer is filled,
630 		 * but notify TCP that we'd like to have more space. */
631 		mutex_lock(&connection->data.mutex);
632 		if (connection->data.socket) {
633 			struct sock *sk = connection->data.socket->sk;
634 			int queued = sk->sk_wmem_queued;
635 			int sndbuf = sk->sk_sndbuf;
636 			if (queued > sndbuf / 2) {
637 				requeue = 1;
638 				sk_set_nospace(sk);
639 			}
640 		} else
641 			requeue = 1;
642 		mutex_unlock(&connection->data.mutex);
643 		if (requeue)
644 			goto requeue;
645 
646 next_sector:
647 		size = BM_BLOCK_SIZE;
648 		bit  = drbd_bm_find_next(device, device->bm_resync_fo);
649 
650 		if (bit == DRBD_END_OF_BITMAP) {
651 			device->bm_resync_fo = drbd_bm_bits(device);
652 			put_ldev(device);
653 			return 0;
654 		}
655 
656 		sector = BM_BIT_TO_SECT(bit);
657 
658 		if (drbd_try_rs_begin_io(peer_device, sector)) {
659 			device->bm_resync_fo = bit;
660 			goto requeue;
661 		}
662 		device->bm_resync_fo = bit + 1;
663 
664 		if (unlikely(drbd_bm_test_bit(device, bit) == 0)) {
665 			drbd_rs_complete_io(device, sector);
666 			goto next_sector;
667 		}
668 
669 #if DRBD_MAX_BIO_SIZE > BM_BLOCK_SIZE
670 		/* try to find some adjacent bits.
671 		 * we stop if we have already the maximum req size.
672 		 *
673 		 * Additionally always align bigger requests, in order to
674 		 * be prepared for all stripe sizes of software RAIDs.
675 		 */
676 		align = 1;
677 		rollback_i = i;
678 		while (i < number) {
679 			if (size + BM_BLOCK_SIZE > max_bio_size)
680 				break;
681 
682 			/* Be always aligned */
683 			if (sector & ((1<<(align+3))-1))
684 				break;
685 
686 			if (discard_granularity && size == discard_granularity)
687 				break;
688 
689 			/* do not cross extent boundaries */
690 			if (((bit+1) & BM_BLOCKS_PER_BM_EXT_MASK) == 0)
691 				break;
692 			/* now, is it actually dirty, after all?
693 			 * caution, drbd_bm_test_bit is tri-state for some
694 			 * obscure reason; ( b == 0 ) would get the out-of-band
695 			 * only accidentally right because of the "oddly sized"
696 			 * adjustment below */
697 			if (drbd_bm_test_bit(device, bit+1) != 1)
698 				break;
699 			bit++;
700 			size += BM_BLOCK_SIZE;
701 			if ((BM_BLOCK_SIZE << align) <= size)
702 				align++;
703 			i++;
704 		}
705 		/* if we merged some,
706 		 * reset the offset to start the next drbd_bm_find_next from */
707 		if (size > BM_BLOCK_SIZE)
708 			device->bm_resync_fo = bit + 1;
709 #endif
710 
711 		/* adjust very last sectors, in case we are oddly sized */
712 		if (sector + (size>>9) > capacity)
713 			size = (capacity-sector)<<9;
714 
715 		if (device->use_csums) {
716 			switch (read_for_csum(peer_device, sector, size)) {
717 			case -EIO: /* Disk failure */
718 				put_ldev(device);
719 				return -EIO;
720 			case -EAGAIN: /* allocation failed, or ldev busy */
721 				drbd_rs_complete_io(device, sector);
722 				device->bm_resync_fo = BM_SECT_TO_BIT(sector);
723 				i = rollback_i;
724 				goto requeue;
725 			case 0:
726 				/* everything ok */
727 				break;
728 			default:
729 				BUG();
730 			}
731 		} else {
732 			int err;
733 
734 			inc_rs_pending(peer_device);
735 			err = drbd_send_drequest(peer_device,
736 						 size == discard_granularity ? P_RS_THIN_REQ : P_RS_DATA_REQUEST,
737 						 sector, size, ID_SYNCER);
738 			if (err) {
739 				drbd_err(device, "drbd_send_drequest() failed, aborting...\n");
740 				dec_rs_pending(peer_device);
741 				put_ldev(device);
742 				return err;
743 			}
744 		}
745 	}
746 
747 	if (device->bm_resync_fo >= drbd_bm_bits(device)) {
748 		/* last syncer _request_ was sent,
749 		 * but the P_RS_DATA_REPLY not yet received.  sync will end (and
750 		 * next sync group will resume), as soon as we receive the last
751 		 * resync data block, and the last bit is cleared.
752 		 * until then resync "work" is "inactive" ...
753 		 */
754 		put_ldev(device);
755 		return 0;
756 	}
757 
758  requeue:
759 	device->rs_in_flight += (i << (BM_BLOCK_SHIFT - 9));
760 	mod_timer(&device->resync_timer, jiffies + SLEEP_TIME);
761 	put_ldev(device);
762 	return 0;
763 }
764 
765 static int make_ov_request(struct drbd_peer_device *peer_device, int cancel)
766 {
767 	struct drbd_device *device = peer_device->device;
768 	int number, i, size;
769 	sector_t sector;
770 	const sector_t capacity = get_capacity(device->vdisk);
771 	bool stop_sector_reached = false;
772 
773 	if (unlikely(cancel))
774 		return 1;
775 
776 	number = drbd_rs_number_requests(peer_device);
777 
778 	sector = device->ov_position;
779 	for (i = 0; i < number; i++) {
780 		if (sector >= capacity)
781 			return 1;
782 
783 		/* We check for "finished" only in the reply path:
784 		 * w_e_end_ov_reply().
785 		 * We need to send at least one request out. */
786 		stop_sector_reached = i > 0
787 			&& verify_can_do_stop_sector(device)
788 			&& sector >= device->ov_stop_sector;
789 		if (stop_sector_reached)
790 			break;
791 
792 		size = BM_BLOCK_SIZE;
793 
794 		if (drbd_try_rs_begin_io(peer_device, sector)) {
795 			device->ov_position = sector;
796 			goto requeue;
797 		}
798 
799 		if (sector + (size>>9) > capacity)
800 			size = (capacity-sector)<<9;
801 
802 		inc_rs_pending(peer_device);
803 		if (drbd_send_ov_request(first_peer_device(device), sector, size)) {
804 			dec_rs_pending(peer_device);
805 			return 0;
806 		}
807 		sector += BM_SECT_PER_BIT;
808 	}
809 	device->ov_position = sector;
810 
811  requeue:
812 	device->rs_in_flight += (i << (BM_BLOCK_SHIFT - 9));
813 	if (i == 0 || !stop_sector_reached)
814 		mod_timer(&device->resync_timer, jiffies + SLEEP_TIME);
815 	return 1;
816 }
817 
818 int w_ov_finished(struct drbd_work *w, int cancel)
819 {
820 	struct drbd_device_work *dw =
821 		container_of(w, struct drbd_device_work, w);
822 	struct drbd_device *device = dw->device;
823 	kfree(dw);
824 	ov_out_of_sync_print(first_peer_device(device));
825 	drbd_resync_finished(first_peer_device(device));
826 
827 	return 0;
828 }
829 
830 static int w_resync_finished(struct drbd_work *w, int cancel)
831 {
832 	struct drbd_device_work *dw =
833 		container_of(w, struct drbd_device_work, w);
834 	struct drbd_device *device = dw->device;
835 	kfree(dw);
836 
837 	drbd_resync_finished(first_peer_device(device));
838 
839 	return 0;
840 }
841 
842 static void ping_peer(struct drbd_device *device)
843 {
844 	struct drbd_connection *connection = first_peer_device(device)->connection;
845 
846 	clear_bit(GOT_PING_ACK, &connection->flags);
847 	request_ping(connection);
848 	wait_event(connection->ping_wait,
849 		   test_bit(GOT_PING_ACK, &connection->flags) || device->state.conn < C_CONNECTED);
850 }
851 
852 int drbd_resync_finished(struct drbd_peer_device *peer_device)
853 {
854 	struct drbd_device *device = peer_device->device;
855 	struct drbd_connection *connection = peer_device->connection;
856 	unsigned long db, dt, dbdt;
857 	unsigned long n_oos;
858 	union drbd_state os, ns;
859 	struct drbd_device_work *dw;
860 	char *khelper_cmd = NULL;
861 	int verify_done = 0;
862 
863 	/* Remove all elements from the resync LRU. Since future actions
864 	 * might set bits in the (main) bitmap, then the entries in the
865 	 * resync LRU would be wrong. */
866 	if (drbd_rs_del_all(device)) {
867 		/* In case this is not possible now, most probably because
868 		 * there are P_RS_DATA_REPLY Packets lingering on the worker's
869 		 * queue (or even the read operations for those packets
870 		 * is not finished by now).   Retry in 100ms. */
871 
872 		schedule_timeout_interruptible(HZ / 10);
873 		dw = kmalloc_obj(struct drbd_device_work, GFP_ATOMIC);
874 		if (dw) {
875 			dw->w.cb = w_resync_finished;
876 			dw->device = device;
877 			drbd_queue_work(&connection->sender_work, &dw->w);
878 			return 1;
879 		}
880 		drbd_err(device, "Warn failed to drbd_rs_del_all() and to kmalloc(dw).\n");
881 	}
882 
883 	dt = (jiffies - device->rs_start - device->rs_paused) / HZ;
884 	if (dt <= 0)
885 		dt = 1;
886 
887 	db = device->rs_total;
888 	/* adjust for verify start and stop sectors, respective reached position */
889 	if (device->state.conn == C_VERIFY_S || device->state.conn == C_VERIFY_T)
890 		db -= device->ov_left;
891 
892 	dbdt = Bit2KB(db/dt);
893 	device->rs_paused /= HZ;
894 
895 	if (!get_ldev(device))
896 		goto out;
897 
898 	ping_peer(device);
899 
900 	spin_lock_irq(&device->resource->req_lock);
901 	os = drbd_read_state(device);
902 
903 	verify_done = (os.conn == C_VERIFY_S || os.conn == C_VERIFY_T);
904 
905 	/* This protects us against multiple calls (that can happen in the presence
906 	   of application IO), and against connectivity loss just before we arrive here. */
907 	if (os.conn <= C_CONNECTED)
908 		goto out_unlock;
909 
910 	ns = os;
911 	ns.conn = C_CONNECTED;
912 
913 	drbd_info(device, "%s done (total %lu sec; paused %lu sec; %lu K/sec)\n",
914 	     verify_done ? "Online verify" : "Resync",
915 	     dt + device->rs_paused, device->rs_paused, dbdt);
916 
917 	n_oos = drbd_bm_total_weight(device);
918 
919 	if (os.conn == C_VERIFY_S || os.conn == C_VERIFY_T) {
920 		if (n_oos) {
921 			drbd_alert(device, "Online verify found %lu %dk block out of sync!\n",
922 			      n_oos, Bit2KB(1));
923 			khelper_cmd = "out-of-sync";
924 		}
925 	} else {
926 		D_ASSERT(device, (n_oos - device->rs_failed) == 0);
927 
928 		if (os.conn == C_SYNC_TARGET || os.conn == C_PAUSED_SYNC_T)
929 			khelper_cmd = "after-resync-target";
930 
931 		if (device->use_csums && device->rs_total) {
932 			const unsigned long s = device->rs_same_csum;
933 			const unsigned long t = device->rs_total;
934 			const int ratio =
935 				(t == 0)     ? 0 :
936 			(t < 100000) ? ((s*100)/t) : (s/(t/100));
937 			drbd_info(device, "%u %% had equal checksums, eliminated: %luK; "
938 			     "transferred %luK total %luK\n",
939 			     ratio,
940 			     Bit2KB(device->rs_same_csum),
941 			     Bit2KB(device->rs_total - device->rs_same_csum),
942 			     Bit2KB(device->rs_total));
943 		}
944 	}
945 
946 	if (device->rs_failed) {
947 		drbd_info(device, "            %lu failed blocks\n", device->rs_failed);
948 
949 		if (os.conn == C_SYNC_TARGET || os.conn == C_PAUSED_SYNC_T) {
950 			ns.disk = D_INCONSISTENT;
951 			ns.pdsk = D_UP_TO_DATE;
952 		} else {
953 			ns.disk = D_UP_TO_DATE;
954 			ns.pdsk = D_INCONSISTENT;
955 		}
956 	} else {
957 		ns.disk = D_UP_TO_DATE;
958 		ns.pdsk = D_UP_TO_DATE;
959 
960 		if (os.conn == C_SYNC_TARGET || os.conn == C_PAUSED_SYNC_T) {
961 			if (device->p_uuid) {
962 				int i;
963 				for (i = UI_BITMAP ; i <= UI_HISTORY_END ; i++)
964 					_drbd_uuid_set(device, i, device->p_uuid[i]);
965 				drbd_uuid_set(device, UI_BITMAP, device->ldev->md.uuid[UI_CURRENT]);
966 				_drbd_uuid_set(device, UI_CURRENT, device->p_uuid[UI_CURRENT]);
967 			} else {
968 				drbd_err(device, "device->p_uuid is NULL! BUG\n");
969 			}
970 		}
971 
972 		if (!(os.conn == C_VERIFY_S || os.conn == C_VERIFY_T)) {
973 			/* for verify runs, we don't update uuids here,
974 			 * so there would be nothing to report. */
975 			drbd_uuid_set_bm(device, 0UL);
976 			drbd_print_uuids(device, "updated UUIDs");
977 			if (device->p_uuid) {
978 				/* Now the two UUID sets are equal, update what we
979 				 * know of the peer. */
980 				int i;
981 				for (i = UI_CURRENT ; i <= UI_HISTORY_END ; i++)
982 					device->p_uuid[i] = device->ldev->md.uuid[i];
983 			}
984 		}
985 	}
986 
987 	_drbd_set_state(device, ns, CS_VERBOSE, NULL);
988 out_unlock:
989 	spin_unlock_irq(&device->resource->req_lock);
990 
991 	/* If we have been sync source, and have an effective fencing-policy,
992 	 * once *all* volumes are back in sync, call "unfence". */
993 	if (os.conn == C_SYNC_SOURCE) {
994 		enum drbd_disk_state disk_state = D_MASK;
995 		enum drbd_disk_state pdsk_state = D_MASK;
996 		enum drbd_fencing_p fp = FP_DONT_CARE;
997 
998 		rcu_read_lock();
999 		fp = rcu_dereference(device->ldev->disk_conf)->fencing;
1000 		if (fp != FP_DONT_CARE) {
1001 			struct drbd_peer_device *peer_device;
1002 			int vnr;
1003 			idr_for_each_entry(&connection->peer_devices, peer_device, vnr) {
1004 				struct drbd_device *device = peer_device->device;
1005 				disk_state = min_t(enum drbd_disk_state, disk_state, device->state.disk);
1006 				pdsk_state = min_t(enum drbd_disk_state, pdsk_state, device->state.pdsk);
1007 			}
1008 		}
1009 		rcu_read_unlock();
1010 		if (disk_state == D_UP_TO_DATE && pdsk_state == D_UP_TO_DATE)
1011 			conn_khelper(connection, "unfence-peer");
1012 	}
1013 
1014 	put_ldev(device);
1015 out:
1016 	device->rs_total  = 0;
1017 	device->rs_failed = 0;
1018 	device->rs_paused = 0;
1019 
1020 	/* reset start sector, if we reached end of device */
1021 	if (verify_done && device->ov_left == 0)
1022 		device->ov_start_sector = 0;
1023 
1024 	drbd_md_sync(device);
1025 
1026 	if (khelper_cmd)
1027 		drbd_khelper(device, khelper_cmd);
1028 
1029 	return 1;
1030 }
1031 
1032 /**
1033  * w_e_end_data_req() - Worker callback, to send a P_DATA_REPLY packet in response to a P_DATA_REQUEST
1034  * @w:		work object.
1035  * @cancel:	The connection will be closed anyways
1036  */
1037 int w_e_end_data_req(struct drbd_work *w, int cancel)
1038 {
1039 	struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w);
1040 	struct drbd_peer_device *peer_device = peer_req->peer_device;
1041 	struct drbd_device *device = peer_device->device;
1042 	int err;
1043 
1044 	if (unlikely(cancel)) {
1045 		err = 0;
1046 		goto out;
1047 	}
1048 
1049 	if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) {
1050 		err = drbd_send_block(peer_device, P_DATA_REPLY, peer_req);
1051 	} else {
1052 		if (drbd_ratelimit())
1053 			drbd_err(device, "Sending NegDReply. sector=%llus.\n",
1054 			    (unsigned long long)peer_req->i.sector);
1055 
1056 		err = drbd_send_ack(peer_device, P_NEG_DREPLY, peer_req);
1057 	}
1058 
1059 	if (unlikely(err))
1060 		drbd_err(device, "drbd_send_block() failed\n");
1061 out:
1062 	dec_unacked(device);
1063 	drbd_free_peer_req(device, peer_req);
1064 
1065 	return err;
1066 }
1067 
1068 static bool all_zero(struct drbd_peer_request *peer_req)
1069 {
1070 	struct page *page = peer_req->pages;
1071 	unsigned int len = peer_req->i.size;
1072 
1073 	page_chain_for_each(page) {
1074 		unsigned int l = min_t(unsigned int, len, PAGE_SIZE);
1075 		unsigned int i, words = l / sizeof(long);
1076 		unsigned long *d;
1077 
1078 		d = kmap_atomic(page);
1079 		for (i = 0; i < words; i++) {
1080 			if (d[i]) {
1081 				kunmap_atomic(d);
1082 				return false;
1083 			}
1084 		}
1085 		kunmap_atomic(d);
1086 		len -= l;
1087 	}
1088 
1089 	return true;
1090 }
1091 
1092 /**
1093  * w_e_end_rsdata_req() - Worker callback to send a P_RS_DATA_REPLY packet in response to a P_RS_DATA_REQUEST
1094  * @w:		work object.
1095  * @cancel:	The connection will be closed anyways
1096  */
1097 int w_e_end_rsdata_req(struct drbd_work *w, int cancel)
1098 {
1099 	struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w);
1100 	struct drbd_peer_device *peer_device = peer_req->peer_device;
1101 	struct drbd_device *device = peer_device->device;
1102 	int err;
1103 
1104 	if (unlikely(cancel)) {
1105 		err = 0;
1106 		goto out;
1107 	}
1108 
1109 	if (get_ldev_if_state(device, D_FAILED)) {
1110 		drbd_rs_complete_io(device, peer_req->i.sector);
1111 		put_ldev(device);
1112 	}
1113 
1114 	if (device->state.conn == C_AHEAD) {
1115 		err = drbd_send_ack(peer_device, P_RS_CANCEL, peer_req);
1116 	} else if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) {
1117 		if (likely(device->state.pdsk >= D_INCONSISTENT)) {
1118 			inc_rs_pending(peer_device);
1119 			if (peer_req->flags & EE_RS_THIN_REQ && all_zero(peer_req))
1120 				err = drbd_send_rs_deallocated(peer_device, peer_req);
1121 			else
1122 				err = drbd_send_block(peer_device, P_RS_DATA_REPLY, peer_req);
1123 		} else {
1124 			if (drbd_ratelimit())
1125 				drbd_err(device, "Not sending RSDataReply, "
1126 				    "partner DISKLESS!\n");
1127 			err = 0;
1128 		}
1129 	} else {
1130 		if (drbd_ratelimit())
1131 			drbd_err(device, "Sending NegRSDReply. sector %llus.\n",
1132 			    (unsigned long long)peer_req->i.sector);
1133 
1134 		err = drbd_send_ack(peer_device, P_NEG_RS_DREPLY, peer_req);
1135 
1136 		/* update resync data with failure */
1137 		drbd_rs_failed_io(peer_device, peer_req->i.sector, peer_req->i.size);
1138 	}
1139 	if (unlikely(err))
1140 		drbd_err(device, "drbd_send_block() failed\n");
1141 out:
1142 	dec_unacked(device);
1143 	drbd_free_peer_req(device, peer_req);
1144 
1145 	return err;
1146 }
1147 
1148 int w_e_end_csum_rs_req(struct drbd_work *w, int cancel)
1149 {
1150 	struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w);
1151 	struct drbd_peer_device *peer_device = peer_req->peer_device;
1152 	struct drbd_device *device = peer_device->device;
1153 	struct digest_info *di;
1154 	int digest_size;
1155 	void *digest = NULL;
1156 	int err, eq = 0;
1157 
1158 	if (unlikely(cancel)) {
1159 		err = 0;
1160 		goto out;
1161 	}
1162 
1163 	if (get_ldev(device)) {
1164 		drbd_rs_complete_io(device, peer_req->i.sector);
1165 		put_ldev(device);
1166 	}
1167 
1168 	di = peer_req->digest;
1169 
1170 	if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) {
1171 		/* quick hack to try to avoid a race against reconfiguration.
1172 		 * a real fix would be much more involved,
1173 		 * introducing more locking mechanisms */
1174 		if (peer_device->connection->csums_tfm) {
1175 			digest_size = crypto_shash_digestsize(peer_device->connection->csums_tfm);
1176 			D_ASSERT(device, digest_size == di->digest_size);
1177 			digest = kmalloc(digest_size, GFP_NOIO);
1178 		}
1179 		if (digest) {
1180 			drbd_csum_ee(peer_device->connection->csums_tfm, peer_req, digest);
1181 			eq = !memcmp(digest, di->digest, digest_size);
1182 			kfree(digest);
1183 		}
1184 
1185 		if (eq) {
1186 			drbd_set_in_sync(peer_device, peer_req->i.sector, peer_req->i.size);
1187 			/* rs_same_csums unit is BM_BLOCK_SIZE */
1188 			device->rs_same_csum += peer_req->i.size >> BM_BLOCK_SHIFT;
1189 			err = drbd_send_ack(peer_device, P_RS_IS_IN_SYNC, peer_req);
1190 		} else {
1191 			inc_rs_pending(peer_device);
1192 			peer_req->block_id = ID_SYNCER; /* By setting block_id, digest pointer becomes invalid! */
1193 			peer_req->flags &= ~EE_HAS_DIGEST; /* This peer request no longer has a digest pointer */
1194 			kfree(di);
1195 			err = drbd_send_block(peer_device, P_RS_DATA_REPLY, peer_req);
1196 		}
1197 	} else {
1198 		err = drbd_send_ack(peer_device, P_NEG_RS_DREPLY, peer_req);
1199 		if (drbd_ratelimit())
1200 			drbd_err(device, "Sending NegDReply. I guess it gets messy.\n");
1201 	}
1202 	if (unlikely(err))
1203 		drbd_err(device, "drbd_send_block/ack() failed\n");
1204 out:
1205 	dec_unacked(device);
1206 	drbd_free_peer_req(device, peer_req);
1207 
1208 	return err;
1209 }
1210 
1211 int w_e_end_ov_req(struct drbd_work *w, int cancel)
1212 {
1213 	struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w);
1214 	struct drbd_peer_device *peer_device = peer_req->peer_device;
1215 	struct drbd_device *device = peer_device->device;
1216 	sector_t sector = peer_req->i.sector;
1217 	unsigned int size = peer_req->i.size;
1218 	int digest_size;
1219 	void *digest;
1220 	int err = 0;
1221 
1222 	if (unlikely(cancel))
1223 		goto out;
1224 
1225 	digest_size = crypto_shash_digestsize(peer_device->connection->verify_tfm);
1226 	digest = kmalloc(digest_size, GFP_NOIO);
1227 	if (!digest) {
1228 		err = 1;	/* terminate the connection in case the allocation failed */
1229 		goto out;
1230 	}
1231 
1232 	if (likely(!(peer_req->flags & EE_WAS_ERROR)))
1233 		drbd_csum_ee(peer_device->connection->verify_tfm, peer_req, digest);
1234 	else
1235 		memset(digest, 0, digest_size);
1236 
1237 	/* Free e and pages before send.
1238 	 * In case we block on congestion, we could otherwise run into
1239 	 * some distributed deadlock, if the other side blocks on
1240 	 * congestion as well, because our receiver blocks in
1241 	 * drbd_alloc_pages due to pp_in_use > max_buffers. */
1242 	drbd_free_peer_req(device, peer_req);
1243 	peer_req = NULL;
1244 	inc_rs_pending(peer_device);
1245 	err = drbd_send_drequest_csum(peer_device, sector, size, digest, digest_size, P_OV_REPLY);
1246 	if (err)
1247 		dec_rs_pending(peer_device);
1248 	kfree(digest);
1249 
1250 out:
1251 	if (peer_req)
1252 		drbd_free_peer_req(device, peer_req);
1253 	dec_unacked(device);
1254 	return err;
1255 }
1256 
1257 void drbd_ov_out_of_sync_found(struct drbd_peer_device *peer_device, sector_t sector, int size)
1258 {
1259 	struct drbd_device *device = peer_device->device;
1260 	if (device->ov_last_oos_start + device->ov_last_oos_size == sector) {
1261 		device->ov_last_oos_size += size>>9;
1262 	} else {
1263 		device->ov_last_oos_start = sector;
1264 		device->ov_last_oos_size = size>>9;
1265 	}
1266 	drbd_set_out_of_sync(peer_device, sector, size);
1267 }
1268 
1269 int w_e_end_ov_reply(struct drbd_work *w, int cancel)
1270 {
1271 	struct drbd_peer_request *peer_req = container_of(w, struct drbd_peer_request, w);
1272 	struct drbd_peer_device *peer_device = peer_req->peer_device;
1273 	struct drbd_device *device = peer_device->device;
1274 	struct digest_info *di;
1275 	void *digest;
1276 	sector_t sector = peer_req->i.sector;
1277 	unsigned int size = peer_req->i.size;
1278 	int digest_size;
1279 	int err, eq = 0;
1280 	bool stop_sector_reached = false;
1281 
1282 	if (unlikely(cancel)) {
1283 		drbd_free_peer_req(device, peer_req);
1284 		dec_unacked(device);
1285 		return 0;
1286 	}
1287 
1288 	/* after "cancel", because after drbd_disconnect/drbd_rs_cancel_all
1289 	 * the resync lru has been cleaned up already */
1290 	if (get_ldev(device)) {
1291 		drbd_rs_complete_io(device, peer_req->i.sector);
1292 		put_ldev(device);
1293 	}
1294 
1295 	di = peer_req->digest;
1296 
1297 	if (likely((peer_req->flags & EE_WAS_ERROR) == 0)) {
1298 		digest_size = crypto_shash_digestsize(peer_device->connection->verify_tfm);
1299 		digest = kmalloc(digest_size, GFP_NOIO);
1300 		if (digest) {
1301 			drbd_csum_ee(peer_device->connection->verify_tfm, peer_req, digest);
1302 
1303 			D_ASSERT(device, digest_size == di->digest_size);
1304 			eq = !memcmp(digest, di->digest, digest_size);
1305 			kfree(digest);
1306 		}
1307 	}
1308 
1309 	/* Free peer_req and pages before send.
1310 	 * In case we block on congestion, we could otherwise run into
1311 	 * some distributed deadlock, if the other side blocks on
1312 	 * congestion as well, because our receiver blocks in
1313 	 * drbd_alloc_pages due to pp_in_use > max_buffers. */
1314 	drbd_free_peer_req(device, peer_req);
1315 	if (!eq)
1316 		drbd_ov_out_of_sync_found(peer_device, sector, size);
1317 	else
1318 		ov_out_of_sync_print(peer_device);
1319 
1320 	err = drbd_send_ack_ex(peer_device, P_OV_RESULT, sector, size,
1321 			       eq ? ID_IN_SYNC : ID_OUT_OF_SYNC);
1322 
1323 	dec_unacked(device);
1324 
1325 	--device->ov_left;
1326 
1327 	/* let's advance progress step marks only for every other megabyte */
1328 	if ((device->ov_left & 0x200) == 0x200)
1329 		drbd_advance_rs_marks(peer_device, device->ov_left);
1330 
1331 	stop_sector_reached = verify_can_do_stop_sector(device) &&
1332 		(sector + (size>>9)) >= device->ov_stop_sector;
1333 
1334 	if (device->ov_left == 0 || stop_sector_reached) {
1335 		ov_out_of_sync_print(peer_device);
1336 		drbd_resync_finished(peer_device);
1337 	}
1338 
1339 	return err;
1340 }
1341 
1342 /* FIXME
1343  * We need to track the number of pending barrier acks,
1344  * and to be able to wait for them.
1345  * See also comment in drbd_adm_attach before drbd_suspend_io.
1346  */
1347 static int drbd_send_barrier(struct drbd_connection *connection)
1348 {
1349 	struct p_barrier *p;
1350 	struct drbd_socket *sock;
1351 
1352 	sock = &connection->data;
1353 	p = conn_prepare_command(connection, sock);
1354 	if (!p)
1355 		return -EIO;
1356 	p->barrier = connection->send.current_epoch_nr;
1357 	p->pad = 0;
1358 	connection->send.current_epoch_writes = 0;
1359 	connection->send.last_sent_barrier_jif = jiffies;
1360 
1361 	return conn_send_command(connection, sock, P_BARRIER, sizeof(*p), NULL, 0);
1362 }
1363 
1364 static int pd_send_unplug_remote(struct drbd_peer_device *pd)
1365 {
1366 	struct drbd_socket *sock = &pd->connection->data;
1367 	if (!drbd_prepare_command(pd, sock))
1368 		return -EIO;
1369 	return drbd_send_command(pd, sock, P_UNPLUG_REMOTE, 0, NULL, 0);
1370 }
1371 
1372 int w_send_write_hint(struct drbd_work *w, int cancel)
1373 {
1374 	struct drbd_device *device =
1375 		container_of(w, struct drbd_device, unplug_work);
1376 
1377 	if (cancel)
1378 		return 0;
1379 	return pd_send_unplug_remote(first_peer_device(device));
1380 }
1381 
1382 static void re_init_if_first_write(struct drbd_connection *connection, unsigned int epoch)
1383 {
1384 	if (!connection->send.seen_any_write_yet) {
1385 		connection->send.seen_any_write_yet = true;
1386 		connection->send.current_epoch_nr = epoch;
1387 		connection->send.current_epoch_writes = 0;
1388 		connection->send.last_sent_barrier_jif = jiffies;
1389 	}
1390 }
1391 
1392 static void maybe_send_barrier(struct drbd_connection *connection, unsigned int epoch)
1393 {
1394 	/* re-init if first write on this connection */
1395 	if (!connection->send.seen_any_write_yet)
1396 		return;
1397 	if (connection->send.current_epoch_nr != epoch) {
1398 		if (connection->send.current_epoch_writes)
1399 			drbd_send_barrier(connection);
1400 		connection->send.current_epoch_nr = epoch;
1401 	}
1402 }
1403 
1404 int w_send_out_of_sync(struct drbd_work *w, int cancel)
1405 {
1406 	struct drbd_request *req = container_of(w, struct drbd_request, w);
1407 	struct drbd_device *device = req->device;
1408 	struct drbd_peer_device *const peer_device = first_peer_device(device);
1409 	struct drbd_connection *const connection = peer_device->connection;
1410 	int err;
1411 
1412 	if (unlikely(cancel)) {
1413 		req_mod(req, SEND_CANCELED, peer_device);
1414 		return 0;
1415 	}
1416 	req->pre_send_jif = jiffies;
1417 
1418 	/* this time, no connection->send.current_epoch_writes++;
1419 	 * If it was sent, it was the closing barrier for the last
1420 	 * replicated epoch, before we went into AHEAD mode.
1421 	 * No more barriers will be sent, until we leave AHEAD mode again. */
1422 	maybe_send_barrier(connection, req->epoch);
1423 
1424 	err = drbd_send_out_of_sync(peer_device, req);
1425 	req_mod(req, OOS_HANDED_TO_NETWORK, peer_device);
1426 
1427 	return err;
1428 }
1429 
1430 /**
1431  * w_send_dblock() - Worker callback to send a P_DATA packet in order to mirror a write request
1432  * @w:		work object.
1433  * @cancel:	The connection will be closed anyways
1434  */
1435 int w_send_dblock(struct drbd_work *w, int cancel)
1436 {
1437 	struct drbd_request *req = container_of(w, struct drbd_request, w);
1438 	struct drbd_device *device = req->device;
1439 	struct drbd_peer_device *const peer_device = first_peer_device(device);
1440 	struct drbd_connection *connection = peer_device->connection;
1441 	bool do_send_unplug = req->rq_state & RQ_UNPLUG;
1442 	int err;
1443 
1444 	if (unlikely(cancel)) {
1445 		req_mod(req, SEND_CANCELED, peer_device);
1446 		return 0;
1447 	}
1448 	req->pre_send_jif = jiffies;
1449 
1450 	re_init_if_first_write(connection, req->epoch);
1451 	maybe_send_barrier(connection, req->epoch);
1452 	connection->send.current_epoch_writes++;
1453 
1454 	err = drbd_send_dblock(peer_device, req);
1455 	req_mod(req, err ? SEND_FAILED : HANDED_OVER_TO_NETWORK, peer_device);
1456 
1457 	if (do_send_unplug && !err)
1458 		pd_send_unplug_remote(peer_device);
1459 
1460 	return err;
1461 }
1462 
1463 /**
1464  * w_send_read_req() - Worker callback to send a read request (P_DATA_REQUEST) packet
1465  * @w:		work object.
1466  * @cancel:	The connection will be closed anyways
1467  */
1468 int w_send_read_req(struct drbd_work *w, int cancel)
1469 {
1470 	struct drbd_request *req = container_of(w, struct drbd_request, w);
1471 	struct drbd_device *device = req->device;
1472 	struct drbd_peer_device *const peer_device = first_peer_device(device);
1473 	struct drbd_connection *connection = peer_device->connection;
1474 	bool do_send_unplug = req->rq_state & RQ_UNPLUG;
1475 	int err;
1476 
1477 	if (unlikely(cancel)) {
1478 		req_mod(req, SEND_CANCELED, peer_device);
1479 		return 0;
1480 	}
1481 	req->pre_send_jif = jiffies;
1482 
1483 	/* Even read requests may close a write epoch,
1484 	 * if there was any yet. */
1485 	maybe_send_barrier(connection, req->epoch);
1486 
1487 	err = drbd_send_drequest(peer_device, P_DATA_REQUEST, req->i.sector, req->i.size,
1488 				 (unsigned long)req);
1489 
1490 	req_mod(req, err ? SEND_FAILED : HANDED_OVER_TO_NETWORK, peer_device);
1491 
1492 	if (do_send_unplug && !err)
1493 		pd_send_unplug_remote(peer_device);
1494 
1495 	return err;
1496 }
1497 
1498 int w_restart_disk_io(struct drbd_work *w, int cancel)
1499 {
1500 	struct drbd_request *req = container_of(w, struct drbd_request, w);
1501 	struct drbd_device *device = req->device;
1502 
1503 	if (bio_data_dir(req->master_bio) == WRITE && req->rq_state & RQ_IN_ACT_LOG)
1504 		drbd_al_begin_io(device, &req->i);
1505 
1506 	req->private_bio = bio_alloc_clone(device->ldev->backing_bdev,
1507 					   req->master_bio, GFP_NOIO,
1508 					  &drbd_io_bio_set);
1509 	req->private_bio->bi_private = req;
1510 	req->private_bio->bi_end_io = drbd_request_endio;
1511 	submit_bio_noacct(req->private_bio);
1512 
1513 	return 0;
1514 }
1515 
1516 static int _drbd_may_sync_now(struct drbd_device *device)
1517 {
1518 	struct drbd_device *odev = device;
1519 	int resync_after;
1520 
1521 	while (1) {
1522 		if (!odev->ldev || odev->state.disk == D_DISKLESS)
1523 			return 1;
1524 		rcu_read_lock();
1525 		resync_after = rcu_dereference(odev->ldev->disk_conf)->resync_after;
1526 		rcu_read_unlock();
1527 		if (resync_after == -1)
1528 			return 1;
1529 		odev = minor_to_device(resync_after);
1530 		if (!odev)
1531 			return 1;
1532 		if ((odev->state.conn >= C_SYNC_SOURCE &&
1533 		     odev->state.conn <= C_PAUSED_SYNC_T) ||
1534 		    odev->state.aftr_isp || odev->state.peer_isp ||
1535 		    odev->state.user_isp)
1536 			return 0;
1537 	}
1538 }
1539 
1540 /**
1541  * drbd_pause_after() - Pause resync on all devices that may not resync now
1542  * @device:	DRBD device.
1543  *
1544  * Called from process context only (admin command and after_state_ch).
1545  */
1546 static bool drbd_pause_after(struct drbd_device *device)
1547 {
1548 	bool changed = false;
1549 	struct drbd_device *odev;
1550 	int i;
1551 
1552 	rcu_read_lock();
1553 	idr_for_each_entry(&drbd_devices, odev, i) {
1554 		if (odev->state.conn == C_STANDALONE && odev->state.disk == D_DISKLESS)
1555 			continue;
1556 		if (!_drbd_may_sync_now(odev) &&
1557 		    _drbd_set_state(_NS(odev, aftr_isp, 1),
1558 				    CS_HARD, NULL) != SS_NOTHING_TO_DO)
1559 			changed = true;
1560 	}
1561 	rcu_read_unlock();
1562 
1563 	return changed;
1564 }
1565 
1566 /**
1567  * drbd_resume_next() - Resume resync on all devices that may resync now
1568  * @device:	DRBD device.
1569  *
1570  * Called from process context only (admin command and worker).
1571  */
1572 static bool drbd_resume_next(struct drbd_device *device)
1573 {
1574 	bool changed = false;
1575 	struct drbd_device *odev;
1576 	int i;
1577 
1578 	rcu_read_lock();
1579 	idr_for_each_entry(&drbd_devices, odev, i) {
1580 		if (odev->state.conn == C_STANDALONE && odev->state.disk == D_DISKLESS)
1581 			continue;
1582 		if (odev->state.aftr_isp) {
1583 			if (_drbd_may_sync_now(odev) &&
1584 			    _drbd_set_state(_NS(odev, aftr_isp, 0),
1585 					    CS_HARD, NULL) != SS_NOTHING_TO_DO)
1586 				changed = true;
1587 		}
1588 	}
1589 	rcu_read_unlock();
1590 	return changed;
1591 }
1592 
1593 void resume_next_sg(struct drbd_device *device)
1594 {
1595 	lock_all_resources();
1596 	drbd_resume_next(device);
1597 	unlock_all_resources();
1598 }
1599 
1600 void suspend_other_sg(struct drbd_device *device)
1601 {
1602 	lock_all_resources();
1603 	drbd_pause_after(device);
1604 	unlock_all_resources();
1605 }
1606 
1607 /* caller must lock_all_resources() */
1608 enum drbd_ret_code drbd_resync_after_valid(struct drbd_device *device, int o_minor)
1609 {
1610 	struct drbd_device *odev;
1611 	int resync_after;
1612 
1613 	if (o_minor == -1)
1614 		return NO_ERROR;
1615 	if (o_minor < -1 || o_minor > MINORMASK)
1616 		return ERR_RESYNC_AFTER;
1617 
1618 	/* check for loops */
1619 	odev = minor_to_device(o_minor);
1620 	while (1) {
1621 		if (odev == device)
1622 			return ERR_RESYNC_AFTER_CYCLE;
1623 
1624 		/* You are free to depend on diskless, non-existing,
1625 		 * or not yet/no longer existing minors.
1626 		 * We only reject dependency loops.
1627 		 * We cannot follow the dependency chain beyond a detached or
1628 		 * missing minor.
1629 		 */
1630 		if (!odev || !odev->ldev || odev->state.disk == D_DISKLESS)
1631 			return NO_ERROR;
1632 
1633 		rcu_read_lock();
1634 		resync_after = rcu_dereference(odev->ldev->disk_conf)->resync_after;
1635 		rcu_read_unlock();
1636 		/* dependency chain ends here, no cycles. */
1637 		if (resync_after == -1)
1638 			return NO_ERROR;
1639 
1640 		/* follow the dependency chain */
1641 		odev = minor_to_device(resync_after);
1642 	}
1643 }
1644 
1645 /* caller must lock_all_resources() */
1646 void drbd_resync_after_changed(struct drbd_device *device)
1647 {
1648 	int changed;
1649 
1650 	do {
1651 		changed  = drbd_pause_after(device);
1652 		changed |= drbd_resume_next(device);
1653 	} while (changed);
1654 }
1655 
1656 void drbd_rs_controller_reset(struct drbd_peer_device *peer_device)
1657 {
1658 	struct drbd_device *device = peer_device->device;
1659 	struct gendisk *disk = device->ldev->backing_bdev->bd_disk;
1660 	struct fifo_buffer *plan;
1661 
1662 	atomic_set(&device->rs_sect_in, 0);
1663 	atomic_set(&device->rs_sect_ev, 0);
1664 	device->rs_in_flight = 0;
1665 	device->rs_last_events =
1666 		(int)part_stat_read_accum(disk->part0, sectors);
1667 
1668 	/* Updating the RCU protected object in place is necessary since
1669 	   this function gets called from atomic context.
1670 	   It is valid since all other updates also lead to an completely
1671 	   empty fifo */
1672 	rcu_read_lock();
1673 	plan = rcu_dereference(device->rs_plan_s);
1674 	plan->total = 0;
1675 	fifo_set(plan, 0);
1676 	rcu_read_unlock();
1677 }
1678 
1679 void start_resync_timer_fn(struct timer_list *t)
1680 {
1681 	struct drbd_device *device = timer_container_of(device, t,
1682 							start_resync_timer);
1683 	drbd_device_post_work(device, RS_START);
1684 }
1685 
1686 static void do_start_resync(struct drbd_device *device)
1687 {
1688 	if (atomic_read(&device->unacked_cnt) || atomic_read(&device->rs_pending_cnt)) {
1689 		drbd_warn(device, "postponing start_resync ...\n");
1690 		device->start_resync_timer.expires = jiffies + HZ/10;
1691 		add_timer(&device->start_resync_timer);
1692 		return;
1693 	}
1694 
1695 	drbd_start_resync(device, C_SYNC_SOURCE);
1696 	clear_bit(AHEAD_TO_SYNC_SOURCE, &device->flags);
1697 }
1698 
1699 static bool use_checksum_based_resync(struct drbd_connection *connection, struct drbd_device *device)
1700 {
1701 	bool csums_after_crash_only;
1702 	rcu_read_lock();
1703 	csums_after_crash_only = rcu_dereference(connection->net_conf)->csums_after_crash_only;
1704 	rcu_read_unlock();
1705 	return connection->agreed_pro_version >= 89 &&		/* supported? */
1706 		connection->csums_tfm &&			/* configured? */
1707 		(csums_after_crash_only == false		/* use for each resync? */
1708 		 || test_bit(CRASHED_PRIMARY, &device->flags));	/* or only after Primary crash? */
1709 }
1710 
1711 /**
1712  * drbd_start_resync() - Start the resync process
1713  * @device:	DRBD device.
1714  * @side:	Either C_SYNC_SOURCE or C_SYNC_TARGET
1715  *
1716  * This function might bring you directly into one of the
1717  * C_PAUSED_SYNC_* states.
1718  */
1719 void drbd_start_resync(struct drbd_device *device, enum drbd_conns side)
1720 {
1721 	struct drbd_peer_device *peer_device = first_peer_device(device);
1722 	struct drbd_connection *connection = peer_device ? peer_device->connection : NULL;
1723 	union drbd_state ns;
1724 	int r;
1725 
1726 	if (device->state.conn >= C_SYNC_SOURCE && device->state.conn < C_AHEAD) {
1727 		drbd_err(device, "Resync already running!\n");
1728 		return;
1729 	}
1730 
1731 	if (!connection) {
1732 		drbd_err(device, "No connection to peer, aborting!\n");
1733 		return;
1734 	}
1735 
1736 	if (!test_bit(B_RS_H_DONE, &device->flags)) {
1737 		if (side == C_SYNC_TARGET) {
1738 			/* Since application IO was locked out during C_WF_BITMAP_T and
1739 			   C_WF_SYNC_UUID we are still unmodified. Before going to C_SYNC_TARGET
1740 			   we check that we might make the data inconsistent. */
1741 			r = drbd_khelper(device, "before-resync-target");
1742 			r = (r >> 8) & 0xff;
1743 			if (r > 0) {
1744 				drbd_info(device, "before-resync-target handler returned %d, "
1745 					 "dropping connection.\n", r);
1746 				conn_request_state(connection, NS(conn, C_DISCONNECTING), CS_HARD);
1747 				return;
1748 			}
1749 		} else /* C_SYNC_SOURCE */ {
1750 			r = drbd_khelper(device, "before-resync-source");
1751 			r = (r >> 8) & 0xff;
1752 			if (r > 0) {
1753 				if (r == 3) {
1754 					drbd_info(device, "before-resync-source handler returned %d, "
1755 						 "ignoring. Old userland tools?", r);
1756 				} else {
1757 					drbd_info(device, "before-resync-source handler returned %d, "
1758 						 "dropping connection.\n", r);
1759 					conn_request_state(connection,
1760 							   NS(conn, C_DISCONNECTING), CS_HARD);
1761 					return;
1762 				}
1763 			}
1764 		}
1765 	}
1766 
1767 	if (current == connection->worker.task) {
1768 		/* The worker should not sleep waiting for state_mutex,
1769 		   that can take long */
1770 		if (!mutex_trylock(device->state_mutex)) {
1771 			set_bit(B_RS_H_DONE, &device->flags);
1772 			device->start_resync_timer.expires = jiffies + HZ/5;
1773 			add_timer(&device->start_resync_timer);
1774 			return;
1775 		}
1776 	} else {
1777 		mutex_lock(device->state_mutex);
1778 	}
1779 
1780 	lock_all_resources();
1781 	clear_bit(B_RS_H_DONE, &device->flags);
1782 	/* Did some connection breakage or IO error race with us? */
1783 	if (device->state.conn < C_CONNECTED
1784 	|| !get_ldev_if_state(device, D_NEGOTIATING)) {
1785 		unlock_all_resources();
1786 		goto out;
1787 	}
1788 
1789 	ns = drbd_read_state(device);
1790 
1791 	ns.aftr_isp = !_drbd_may_sync_now(device);
1792 
1793 	ns.conn = side;
1794 
1795 	if (side == C_SYNC_TARGET)
1796 		ns.disk = D_INCONSISTENT;
1797 	else /* side == C_SYNC_SOURCE */
1798 		ns.pdsk = D_INCONSISTENT;
1799 
1800 	r = _drbd_set_state(device, ns, CS_VERBOSE, NULL);
1801 	ns = drbd_read_state(device);
1802 
1803 	if (ns.conn < C_CONNECTED)
1804 		r = SS_UNKNOWN_ERROR;
1805 
1806 	if (r == SS_SUCCESS) {
1807 		unsigned long tw = drbd_bm_total_weight(device);
1808 		unsigned long now = jiffies;
1809 		int i;
1810 
1811 		device->rs_failed    = 0;
1812 		device->rs_paused    = 0;
1813 		device->rs_same_csum = 0;
1814 		device->rs_last_sect_ev = 0;
1815 		device->rs_total     = tw;
1816 		device->rs_start     = now;
1817 		for (i = 0; i < DRBD_SYNC_MARKS; i++) {
1818 			device->rs_mark_left[i] = tw;
1819 			device->rs_mark_time[i] = now;
1820 		}
1821 		drbd_pause_after(device);
1822 		/* Forget potentially stale cached per resync extent bit-counts.
1823 		 * Open coded drbd_rs_cancel_all(device), we already have IRQs
1824 		 * disabled, and know the disk state is ok. */
1825 		spin_lock(&device->al_lock);
1826 		lc_reset(device->resync);
1827 		device->resync_locked = 0;
1828 		device->resync_wenr = LC_FREE;
1829 		spin_unlock(&device->al_lock);
1830 	}
1831 	unlock_all_resources();
1832 
1833 	if (r == SS_SUCCESS) {
1834 		wake_up(&device->al_wait); /* for lc_reset() above */
1835 		/* reset rs_last_bcast when a resync or verify is started,
1836 		 * to deal with potential jiffies wrap. */
1837 		device->rs_last_bcast = jiffies - HZ;
1838 
1839 		drbd_info(device, "Began resync as %s (will sync %lu KB [%lu bits set]).\n",
1840 		     drbd_conn_str(ns.conn),
1841 		     (unsigned long) device->rs_total << (BM_BLOCK_SHIFT-10),
1842 		     (unsigned long) device->rs_total);
1843 		if (side == C_SYNC_TARGET) {
1844 			device->bm_resync_fo = 0;
1845 			device->use_csums = use_checksum_based_resync(connection, device);
1846 		} else {
1847 			device->use_csums = false;
1848 		}
1849 
1850 		/* Since protocol 96, we must serialize drbd_gen_and_send_sync_uuid
1851 		 * with w_send_oos, or the sync target will get confused as to
1852 		 * how much bits to resync.  We cannot do that always, because for an
1853 		 * empty resync and protocol < 95, we need to do it here, as we call
1854 		 * drbd_resync_finished from here in that case.
1855 		 * We drbd_gen_and_send_sync_uuid here for protocol < 96,
1856 		 * and from after_state_ch otherwise. */
1857 		if (side == C_SYNC_SOURCE && connection->agreed_pro_version < 96)
1858 			drbd_gen_and_send_sync_uuid(peer_device);
1859 
1860 		if (connection->agreed_pro_version < 95 && device->rs_total == 0) {
1861 			/* This still has a race (about when exactly the peers
1862 			 * detect connection loss) that can lead to a full sync
1863 			 * on next handshake. In 8.3.9 we fixed this with explicit
1864 			 * resync-finished notifications, but the fix
1865 			 * introduces a protocol change.  Sleeping for some
1866 			 * time longer than the ping interval + timeout on the
1867 			 * SyncSource, to give the SyncTarget the chance to
1868 			 * detect connection loss, then waiting for a ping
1869 			 * response (implicit in drbd_resync_finished) reduces
1870 			 * the race considerably, but does not solve it. */
1871 			if (side == C_SYNC_SOURCE) {
1872 				struct net_conf *nc;
1873 				int timeo;
1874 
1875 				rcu_read_lock();
1876 				nc = rcu_dereference(connection->net_conf);
1877 				timeo = nc->ping_int * HZ + nc->ping_timeo * HZ / 9;
1878 				rcu_read_unlock();
1879 				schedule_timeout_interruptible(timeo);
1880 			}
1881 			drbd_resync_finished(peer_device);
1882 		}
1883 
1884 		drbd_rs_controller_reset(peer_device);
1885 		/* ns.conn may already be != device->state.conn,
1886 		 * we may have been paused in between, or become paused until
1887 		 * the timer triggers.
1888 		 * No matter, that is handled in resync_timer_fn() */
1889 		if (ns.conn == C_SYNC_TARGET)
1890 			mod_timer(&device->resync_timer, jiffies);
1891 
1892 		drbd_md_sync(device);
1893 	}
1894 	put_ldev(device);
1895 out:
1896 	mutex_unlock(device->state_mutex);
1897 }
1898 
1899 static void update_on_disk_bitmap(struct drbd_peer_device *peer_device, bool resync_done)
1900 {
1901 	struct drbd_device *device = peer_device->device;
1902 	struct sib_info sib = { .sib_reason = SIB_SYNC_PROGRESS, };
1903 	device->rs_last_bcast = jiffies;
1904 
1905 	if (!get_ldev(device))
1906 		return;
1907 
1908 	drbd_bm_write_lazy(device, 0);
1909 	if (resync_done && is_sync_state(device->state.conn))
1910 		drbd_resync_finished(peer_device);
1911 
1912 	drbd_bcast_event(device, &sib);
1913 	/* update timestamp, in case it took a while to write out stuff */
1914 	device->rs_last_bcast = jiffies;
1915 	put_ldev(device);
1916 }
1917 
1918 static void drbd_ldev_destroy(struct drbd_device *device)
1919 {
1920 	lc_destroy(device->resync);
1921 	device->resync = NULL;
1922 	lc_destroy(device->act_log);
1923 	device->act_log = NULL;
1924 
1925 	__acquire(local);
1926 	drbd_backing_dev_free(device, device->ldev);
1927 	device->ldev = NULL;
1928 	__release(local);
1929 
1930 	clear_bit(GOING_DISKLESS, &device->flags);
1931 	wake_up(&device->misc_wait);
1932 }
1933 
1934 static void go_diskless(struct drbd_device *device)
1935 {
1936 	struct drbd_peer_device *peer_device = first_peer_device(device);
1937 	D_ASSERT(device, device->state.disk == D_FAILED);
1938 	/* we cannot assert local_cnt == 0 here, as get_ldev_if_state will
1939 	 * inc/dec it frequently. Once we are D_DISKLESS, no one will touch
1940 	 * the protected members anymore, though, so once put_ldev reaches zero
1941 	 * again, it will be safe to free them. */
1942 
1943 	/* Try to write changed bitmap pages, read errors may have just
1944 	 * set some bits outside the area covered by the activity log.
1945 	 *
1946 	 * If we have an IO error during the bitmap writeout,
1947 	 * we will want a full sync next time, just in case.
1948 	 * (Do we want a specific meta data flag for this?)
1949 	 *
1950 	 * If that does not make it to stable storage either,
1951 	 * we cannot do anything about that anymore.
1952 	 *
1953 	 * We still need to check if both bitmap and ldev are present, we may
1954 	 * end up here after a failed attach, before ldev was even assigned.
1955 	 */
1956 	if (device->bitmap && device->ldev) {
1957 		/* An interrupted resync or similar is allowed to recounts bits
1958 		 * while we detach.
1959 		 * Any modifications would not be expected anymore, though.
1960 		 */
1961 		if (drbd_bitmap_io_from_worker(device, drbd_bm_write,
1962 					"detach", BM_LOCKED_TEST_ALLOWED, peer_device)) {
1963 			if (test_bit(WAS_READ_ERROR, &device->flags)) {
1964 				drbd_md_set_flag(device, MDF_FULL_SYNC);
1965 				drbd_md_sync(device);
1966 			}
1967 		}
1968 	}
1969 
1970 	drbd_force_state(device, NS(disk, D_DISKLESS));
1971 }
1972 
1973 static int do_md_sync(struct drbd_device *device)
1974 {
1975 	drbd_warn(device, "md_sync_timer expired! Worker calls drbd_md_sync().\n");
1976 	drbd_md_sync(device);
1977 	return 0;
1978 }
1979 
1980 /* only called from drbd_worker thread, no locking */
1981 void __update_timing_details(
1982 		struct drbd_thread_timing_details *tdp,
1983 		unsigned int *cb_nr,
1984 		void *cb,
1985 		const char *fn, const unsigned int line)
1986 {
1987 	unsigned int i = *cb_nr % DRBD_THREAD_DETAILS_HIST;
1988 	struct drbd_thread_timing_details *td = tdp + i;
1989 
1990 	td->start_jif = jiffies;
1991 	td->cb_addr = cb;
1992 	td->caller_fn = fn;
1993 	td->line = line;
1994 	td->cb_nr = *cb_nr;
1995 
1996 	i = (i+1) % DRBD_THREAD_DETAILS_HIST;
1997 	td = tdp + i;
1998 	memset(td, 0, sizeof(*td));
1999 
2000 	++(*cb_nr);
2001 }
2002 
2003 static void do_device_work(struct drbd_device *device, const unsigned long todo)
2004 {
2005 	if (test_bit(MD_SYNC, &todo))
2006 		do_md_sync(device);
2007 	if (test_bit(RS_DONE, &todo) ||
2008 	    test_bit(RS_PROGRESS, &todo))
2009 		update_on_disk_bitmap(first_peer_device(device), test_bit(RS_DONE, &todo));
2010 	if (test_bit(GO_DISKLESS, &todo))
2011 		go_diskless(device);
2012 	if (test_bit(DESTROY_DISK, &todo))
2013 		drbd_ldev_destroy(device);
2014 	if (test_bit(RS_START, &todo))
2015 		do_start_resync(device);
2016 }
2017 
2018 #define DRBD_DEVICE_WORK_MASK	\
2019 	((1UL << GO_DISKLESS)	\
2020 	|(1UL << DESTROY_DISK)	\
2021 	|(1UL << MD_SYNC)	\
2022 	|(1UL << RS_START)	\
2023 	|(1UL << RS_PROGRESS)	\
2024 	|(1UL << RS_DONE)	\
2025 	)
2026 
2027 static unsigned long get_work_bits(unsigned long *flags)
2028 {
2029 	unsigned long old, new;
2030 	do {
2031 		old = *flags;
2032 		new = old & ~DRBD_DEVICE_WORK_MASK;
2033 	} while (cmpxchg(flags, old, new) != old);
2034 	return old & DRBD_DEVICE_WORK_MASK;
2035 }
2036 
2037 static void do_unqueued_work(struct drbd_connection *connection)
2038 {
2039 	struct drbd_peer_device *peer_device;
2040 	int vnr;
2041 
2042 	rcu_read_lock();
2043 	idr_for_each_entry(&connection->peer_devices, peer_device, vnr) {
2044 		struct drbd_device *device = peer_device->device;
2045 		unsigned long todo = get_work_bits(&device->flags);
2046 		if (!todo)
2047 			continue;
2048 
2049 		kref_get(&device->kref);
2050 		rcu_read_unlock();
2051 		do_device_work(device, todo);
2052 		kref_put(&device->kref, drbd_destroy_device);
2053 		rcu_read_lock();
2054 	}
2055 	rcu_read_unlock();
2056 }
2057 
2058 static bool dequeue_work_batch(struct drbd_work_queue *queue, struct list_head *work_list)
2059 {
2060 	spin_lock_irq(&queue->q_lock);
2061 	list_splice_tail_init(&queue->q, work_list);
2062 	spin_unlock_irq(&queue->q_lock);
2063 	return !list_empty(work_list);
2064 }
2065 
2066 static void wait_for_work(struct drbd_connection *connection, struct list_head *work_list)
2067 {
2068 	DEFINE_WAIT(wait);
2069 	struct net_conf *nc;
2070 	int uncork, cork;
2071 
2072 	dequeue_work_batch(&connection->sender_work, work_list);
2073 	if (!list_empty(work_list))
2074 		return;
2075 
2076 	/* Still nothing to do?
2077 	 * Maybe we still need to close the current epoch,
2078 	 * even if no new requests are queued yet.
2079 	 *
2080 	 * Also, poke TCP, just in case.
2081 	 * Then wait for new work (or signal). */
2082 	rcu_read_lock();
2083 	nc = rcu_dereference(connection->net_conf);
2084 	uncork = nc ? nc->tcp_cork : 0;
2085 	rcu_read_unlock();
2086 	if (uncork) {
2087 		mutex_lock(&connection->data.mutex);
2088 		if (connection->data.socket)
2089 			tcp_sock_set_cork(connection->data.socket->sk, false);
2090 		mutex_unlock(&connection->data.mutex);
2091 	}
2092 
2093 	for (;;) {
2094 		int send_barrier;
2095 		prepare_to_wait(&connection->sender_work.q_wait, &wait, TASK_INTERRUPTIBLE);
2096 		spin_lock_irq(&connection->resource->req_lock);
2097 		spin_lock(&connection->sender_work.q_lock);	/* FIXME get rid of this one? */
2098 		if (!list_empty(&connection->sender_work.q))
2099 			list_splice_tail_init(&connection->sender_work.q, work_list);
2100 		spin_unlock(&connection->sender_work.q_lock);	/* FIXME get rid of this one? */
2101 		if (!list_empty(work_list) || signal_pending(current)) {
2102 			spin_unlock_irq(&connection->resource->req_lock);
2103 			break;
2104 		}
2105 
2106 		/* We found nothing new to do, no to-be-communicated request,
2107 		 * no other work item.  We may still need to close the last
2108 		 * epoch.  Next incoming request epoch will be connection ->
2109 		 * current transfer log epoch number.  If that is different
2110 		 * from the epoch of the last request we communicated, it is
2111 		 * safe to send the epoch separating barrier now.
2112 		 */
2113 		send_barrier =
2114 			atomic_read(&connection->current_tle_nr) !=
2115 			connection->send.current_epoch_nr;
2116 		spin_unlock_irq(&connection->resource->req_lock);
2117 
2118 		if (send_barrier)
2119 			maybe_send_barrier(connection,
2120 					connection->send.current_epoch_nr + 1);
2121 
2122 		if (test_bit(DEVICE_WORK_PENDING, &connection->flags))
2123 			break;
2124 
2125 		/* drbd_send() may have called flush_signals() */
2126 		if (get_t_state(&connection->worker) != RUNNING)
2127 			break;
2128 
2129 		schedule();
2130 		/* may be woken up for other things but new work, too,
2131 		 * e.g. if the current epoch got closed.
2132 		 * In which case we send the barrier above. */
2133 	}
2134 	finish_wait(&connection->sender_work.q_wait, &wait);
2135 
2136 	/* someone may have changed the config while we have been waiting above. */
2137 	rcu_read_lock();
2138 	nc = rcu_dereference(connection->net_conf);
2139 	cork = nc ? nc->tcp_cork : 0;
2140 	rcu_read_unlock();
2141 	mutex_lock(&connection->data.mutex);
2142 	if (connection->data.socket) {
2143 		if (cork)
2144 			tcp_sock_set_cork(connection->data.socket->sk, true);
2145 		else if (!uncork)
2146 			tcp_sock_set_cork(connection->data.socket->sk, false);
2147 	}
2148 	mutex_unlock(&connection->data.mutex);
2149 }
2150 
2151 int drbd_worker(struct drbd_thread *thi)
2152 {
2153 	struct drbd_connection *connection = thi->connection;
2154 	struct drbd_work *w = NULL;
2155 	struct drbd_peer_device *peer_device;
2156 	LIST_HEAD(work_list);
2157 	int vnr;
2158 
2159 	while (get_t_state(thi) == RUNNING) {
2160 		drbd_thread_current_set_cpu(thi);
2161 
2162 		if (list_empty(&work_list)) {
2163 			update_worker_timing_details(connection, wait_for_work);
2164 			wait_for_work(connection, &work_list);
2165 		}
2166 
2167 		if (test_and_clear_bit(DEVICE_WORK_PENDING, &connection->flags)) {
2168 			update_worker_timing_details(connection, do_unqueued_work);
2169 			do_unqueued_work(connection);
2170 		}
2171 
2172 		if (signal_pending(current)) {
2173 			flush_signals(current);
2174 			if (get_t_state(thi) == RUNNING) {
2175 				drbd_warn(connection, "Worker got an unexpected signal\n");
2176 				continue;
2177 			}
2178 			break;
2179 		}
2180 
2181 		if (get_t_state(thi) != RUNNING)
2182 			break;
2183 
2184 		if (!list_empty(&work_list)) {
2185 			w = list_first_entry(&work_list, struct drbd_work, list);
2186 			list_del_init(&w->list);
2187 			update_worker_timing_details(connection, w->cb);
2188 			if (w->cb(w, connection->cstate < C_WF_REPORT_PARAMS) == 0)
2189 				continue;
2190 			if (connection->cstate >= C_WF_REPORT_PARAMS)
2191 				conn_request_state(connection, NS(conn, C_NETWORK_FAILURE), CS_HARD);
2192 		}
2193 	}
2194 
2195 	do {
2196 		if (test_and_clear_bit(DEVICE_WORK_PENDING, &connection->flags)) {
2197 			update_worker_timing_details(connection, do_unqueued_work);
2198 			do_unqueued_work(connection);
2199 		}
2200 		if (!list_empty(&work_list)) {
2201 			w = list_first_entry(&work_list, struct drbd_work, list);
2202 			list_del_init(&w->list);
2203 			update_worker_timing_details(connection, w->cb);
2204 			w->cb(w, 1);
2205 		} else
2206 			dequeue_work_batch(&connection->sender_work, &work_list);
2207 	} while (!list_empty(&work_list) || test_bit(DEVICE_WORK_PENDING, &connection->flags));
2208 
2209 	rcu_read_lock();
2210 	idr_for_each_entry(&connection->peer_devices, peer_device, vnr) {
2211 		struct drbd_device *device = peer_device->device;
2212 		D_ASSERT(device, device->state.disk == D_DISKLESS && device->state.conn == C_STANDALONE);
2213 		kref_get(&device->kref);
2214 		rcu_read_unlock();
2215 		drbd_device_cleanup(device);
2216 		kref_put(&device->kref, drbd_destroy_device);
2217 		rcu_read_lock();
2218 	}
2219 	rcu_read_unlock();
2220 
2221 	return 0;
2222 }
2223