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