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