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