aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd
diff options
context:
space:
mode:
authorPhilipp Reisner <philipp.reisner@linbit.com>2013-03-27 09:08:38 -0400
committerJens Axboe <axboe@kernel.dk>2013-03-28 12:10:24 -0400
commit0b2dafcd9f8fd38d00398dd3da88225ad1e99726 (patch)
tree976c041792df3b853d83fe536f8f78f79c1bb9ad /drivers/block/drbd
parent5c4f13d991e69cb715ddc2b6a9bbecead7b02c9e (diff)
drbd: drop now useless duplicate state request from invalidate
Patch best viewed with git diff --ignore-space-change. Now that we attempt the fallback to local bitmap operation only when disconnected, we can safely drop the extra "silent" state request from both invalidate and invalidate-remote. Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com> Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com> Signed-off-by: Jens Axboe <axboe@kernel.dk>
Diffstat (limited to 'drivers/block/drbd')
-rw-r--r--drivers/block/drbd/drbd_nl.c62
1 files changed, 28 insertions, 34 deletions
diff --git a/drivers/block/drbd/drbd_nl.c b/drivers/block/drbd/drbd_nl.c
index c49bda7918b3..56bafdcd943e 100644
--- a/drivers/block/drbd/drbd_nl.c
+++ b/drivers/block/drbd/drbd_nl.c
@@ -2446,26 +2446,19 @@ int drbd_adm_invalidate(struct sk_buff *skb, struct genl_info *info)
2446 wait_event(mdev->misc_wait, !test_bit(BITMAP_IO, &mdev->flags)); 2446 wait_event(mdev->misc_wait, !test_bit(BITMAP_IO, &mdev->flags));
2447 drbd_flush_workqueue(mdev); 2447 drbd_flush_workqueue(mdev);
2448 2448
2449 retcode = _drbd_request_state(mdev, NS(conn, C_STARTING_SYNC_T), CS_ORDERED); 2449 /* If we happen to be C_STANDALONE R_SECONDARY, just change to
2450 2450 * D_INCONSISTENT, and set all bits in the bitmap. Otherwise,
2451 /* If that did not work, try again, 2451 * try to start a resync handshake as sync target for full sync.
2452 * but log failures this time (implicit CS_VERBOSE).
2453 *
2454 * If we happen to be C_STANDALONE R_SECONDARY,
2455 * just change to D_INCONSISTENT, and set all bits in the bitmap.
2456 * Otherwise, we just fail, to avoid races with the resync handshake.
2457 */ 2452 */
2458 if (retcode < SS_SUCCESS) { 2453 if (mdev->state.conn == C_STANDALONE && mdev->state.role == R_SECONDARY) {
2459 if (mdev->state.conn == C_STANDALONE && mdev->state.role == R_SECONDARY) { 2454 retcode = drbd_request_state(mdev, NS(disk, D_INCONSISTENT));
2460 retcode = drbd_request_state(mdev, NS(disk, D_INCONSISTENT)); 2455 if (retcode >= SS_SUCCESS) {
2461 if (retcode >= SS_SUCCESS) { 2456 if (drbd_bitmap_io(mdev, &drbd_bmio_set_n_write,
2462 if (drbd_bitmap_io(mdev, &drbd_bmio_set_n_write, 2457 "set_n_write from invalidate", BM_LOCKED_MASK))
2463 "set_n_write from invalidate", BM_LOCKED_MASK)) 2458 retcode = ERR_IO_MD_DISK;
2464 retcode = ERR_IO_MD_DISK; 2459 }
2465 } 2460 } else
2466 } else 2461 retcode = drbd_request_state(mdev, NS(conn, C_STARTING_SYNC_T));
2467 retcode = drbd_request_state(mdev, NS(conn, C_STARTING_SYNC_T));
2468 }
2469 drbd_resume_io(mdev); 2462 drbd_resume_io(mdev);
2470 2463
2471out: 2464out:
@@ -2519,21 +2512,22 @@ int drbd_adm_invalidate_peer(struct sk_buff *skb, struct genl_info *info)
2519 wait_event(mdev->misc_wait, !test_bit(BITMAP_IO, &mdev->flags)); 2512 wait_event(mdev->misc_wait, !test_bit(BITMAP_IO, &mdev->flags));
2520 drbd_flush_workqueue(mdev); 2513 drbd_flush_workqueue(mdev);
2521 2514
2522 retcode = _drbd_request_state(mdev, NS(conn, C_STARTING_SYNC_S), CS_ORDERED); 2515 /* If we happen to be C_STANDALONE R_PRIMARY, just set all bits
2523 if (retcode < SS_SUCCESS) { 2516 * in the bitmap. Otherwise, try to start a resync handshake
2524 if (mdev->state.conn == C_STANDALONE && mdev->state.role == R_PRIMARY) { 2517 * as sync source for full sync.
2525 /* The peer will get a resync upon connect anyways. Just make that 2518 */
2526 into a full resync. */ 2519 if (mdev->state.conn == C_STANDALONE && mdev->state.role == R_PRIMARY) {
2527 retcode = drbd_request_state(mdev, NS(pdsk, D_INCONSISTENT)); 2520 /* The peer will get a resync upon connect anyways. Just make that
2528 if (retcode >= SS_SUCCESS) { 2521 into a full resync. */
2529 if (drbd_bitmap_io(mdev, &drbd_bmio_set_susp_al, 2522 retcode = drbd_request_state(mdev, NS(pdsk, D_INCONSISTENT));
2530 "set_n_write from invalidate_peer", 2523 if (retcode >= SS_SUCCESS) {
2531 BM_LOCKED_SET_ALLOWED)) 2524 if (drbd_bitmap_io(mdev, &drbd_bmio_set_susp_al,
2532 retcode = ERR_IO_MD_DISK; 2525 "set_n_write from invalidate_peer",
2533 } 2526 BM_LOCKED_SET_ALLOWED))
2534 } else 2527 retcode = ERR_IO_MD_DISK;
2535 retcode = drbd_request_state(mdev, NS(conn, C_STARTING_SYNC_S)); 2528 }
2536 } 2529 } else
2530 retcode = drbd_request_state(mdev, NS(conn, C_STARTING_SYNC_S));
2537 drbd_resume_io(mdev); 2531 drbd_resume_io(mdev);
2538 2532
2539out: 2533out: