diff options
author | Philipp Reisner <philipp.reisner@linbit.com> | 2013-03-27 09:08:38 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2013-03-28 12:10:24 -0400 |
commit | 0b2dafcd9f8fd38d00398dd3da88225ad1e99726 (patch) | |
tree | 976c041792df3b853d83fe536f8f78f79c1bb9ad /drivers/block/drbd | |
parent | 5c4f13d991e69cb715ddc2b6a9bbecead7b02c9e (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.c | 62 |
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 | ||
2471 | out: | 2464 | out: |
@@ -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 | ||
2539 | out: | 2533 | out: |