Loading drivers/block/drbd/drbd_int.h +1 −0 Original line number Diff line number Diff line Loading @@ -787,6 +787,7 @@ enum { NEW_CUR_UUID, /* Create new current UUID when thawing IO */ AL_SUSPENDED, /* Activity logging is currently suspended. */ AHEAD_TO_SYNC_SOURCE, /* Ahead -> SyncSource queued */ B_RS_H_DONE, /* Before resync handler done (already executed) */ }; struct drbd_bitmap; /* opaque for drbd_conf */ Loading drivers/block/drbd/drbd_worker.c +36 −22 Original line number Diff line number Diff line Loading @@ -1487,6 +1487,7 @@ void drbd_start_resync(struct drbd_conf *mdev, enum drbd_conns side) Ahead/Behind and SyncSource/SyncTarget */ } if (!test_bit(B_RS_H_DONE, &mdev->flags)) { if (side == C_SYNC_TARGET) { /* Since application IO was locked out during C_WF_BITMAP_T and C_WF_SYNC_UUID we are still unmodified. Before going to C_SYNC_TARGET Loading Loading @@ -1514,8 +1515,21 @@ void drbd_start_resync(struct drbd_conf *mdev, enum drbd_conns side) } } } } if (current == mdev->tconn->worker.task) { /* The worker should not sleep waiting for drbd_state_lock(), that can take long */ if (test_and_set_bit(CLUSTER_ST_CHANGE, &mdev->flags)) { set_bit(B_RS_H_DONE, &mdev->flags); mdev->start_resync_timer.expires = jiffies + HZ/5; add_timer(&mdev->start_resync_timer); return; } } else { drbd_state_lock(mdev); } clear_bit(B_RS_H_DONE, &mdev->flags); if (!get_ldev_if_state(mdev, D_NEGOTIATING)) { drbd_state_unlock(mdev); Loading Loading
drivers/block/drbd/drbd_int.h +1 −0 Original line number Diff line number Diff line Loading @@ -787,6 +787,7 @@ enum { NEW_CUR_UUID, /* Create new current UUID when thawing IO */ AL_SUSPENDED, /* Activity logging is currently suspended. */ AHEAD_TO_SYNC_SOURCE, /* Ahead -> SyncSource queued */ B_RS_H_DONE, /* Before resync handler done (already executed) */ }; struct drbd_bitmap; /* opaque for drbd_conf */ Loading
drivers/block/drbd/drbd_worker.c +36 −22 Original line number Diff line number Diff line Loading @@ -1487,6 +1487,7 @@ void drbd_start_resync(struct drbd_conf *mdev, enum drbd_conns side) Ahead/Behind and SyncSource/SyncTarget */ } if (!test_bit(B_RS_H_DONE, &mdev->flags)) { if (side == C_SYNC_TARGET) { /* Since application IO was locked out during C_WF_BITMAP_T and C_WF_SYNC_UUID we are still unmodified. Before going to C_SYNC_TARGET Loading Loading @@ -1514,8 +1515,21 @@ void drbd_start_resync(struct drbd_conf *mdev, enum drbd_conns side) } } } } if (current == mdev->tconn->worker.task) { /* The worker should not sleep waiting for drbd_state_lock(), that can take long */ if (test_and_set_bit(CLUSTER_ST_CHANGE, &mdev->flags)) { set_bit(B_RS_H_DONE, &mdev->flags); mdev->start_resync_timer.expires = jiffies + HZ/5; add_timer(&mdev->start_resync_timer); return; } } else { drbd_state_lock(mdev); } clear_bit(B_RS_H_DONE, &mdev->flags); if (!get_ldev_if_state(mdev, D_NEGOTIATING)) { drbd_state_unlock(mdev); Loading