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