diff options
author | Lars Ellenberg <lars.ellenberg@linbit.com> | 2012-08-01 06:33:51 -0400 |
---|---|---|
committer | Philipp Reisner <philipp.reisner@linbit.com> | 2012-11-09 08:05:49 -0500 |
commit | d4dabbe22d38752674c582e5bb40716a72397355 (patch) | |
tree | 51a89e48ba52a80fa93b3c37390e5b772a2b7bb8 /drivers/block/drbd/drbd_receiver.c | |
parent | 232fd3f4a01f45d5402c2e03f7c8815d80bec25b (diff) |
drbd: disambiguation, s/P_DISCARD_WRITE/P_SUPERSEDED/
To avoid confusion with REQ_DISCARD aka TRIM, rename our
"discard concurrent write acks" from P_DISCARD_WRITE to P_SUPERSEDED.
At the same time, rename the drbd request event DISCARD_WRITE
to CONFLICT_RESOLVED. It already triggers both successful completion
or restart of the request, depending on our RQ_POSTPONED flag.
Signed-off-by: Philipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: Lars Ellenberg <lars.ellenberg@linbit.com>
Diffstat (limited to 'drivers/block/drbd/drbd_receiver.c')
-rw-r--r-- | drivers/block/drbd/drbd_receiver.c | 33 |
1 files changed, 17 insertions, 16 deletions
diff --git a/drivers/block/drbd/drbd_receiver.c b/drivers/block/drbd/drbd_receiver.c index d507700df85c..afab66bbc31f 100644 --- a/drivers/block/drbd/drbd_receiver.c +++ b/drivers/block/drbd/drbd_receiver.c | |||
@@ -425,7 +425,7 @@ static int drbd_finish_peer_reqs(struct drbd_conf *mdev) | |||
425 | drbd_free_net_peer_req(mdev, peer_req); | 425 | drbd_free_net_peer_req(mdev, peer_req); |
426 | 426 | ||
427 | /* possible callbacks here: | 427 | /* possible callbacks here: |
428 | * e_end_block, and e_end_resync_block, e_send_discard_write. | 428 | * e_end_block, and e_end_resync_block, e_send_superseded. |
429 | * all ignore the last argument. | 429 | * all ignore the last argument. |
430 | */ | 430 | */ |
431 | list_for_each_entry_safe(peer_req, t, &work_list, w.list) { | 431 | list_for_each_entry_safe(peer_req, t, &work_list, w.list) { |
@@ -1803,7 +1803,7 @@ static void restart_conflicting_writes(struct drbd_conf *mdev, | |||
1803 | continue; | 1803 | continue; |
1804 | /* as it is RQ_POSTPONED, this will cause it to | 1804 | /* as it is RQ_POSTPONED, this will cause it to |
1805 | * be queued on the retry workqueue. */ | 1805 | * be queued on the retry workqueue. */ |
1806 | __req_mod(req, DISCARD_WRITE, NULL); | 1806 | __req_mod(req, CONFLICT_RESOLVED, NULL); |
1807 | } | 1807 | } |
1808 | } | 1808 | } |
1809 | 1809 | ||
@@ -1864,9 +1864,9 @@ static int e_send_ack(struct drbd_work *w, enum drbd_packet ack) | |||
1864 | return err; | 1864 | return err; |
1865 | } | 1865 | } |
1866 | 1866 | ||
1867 | static int e_send_discard_write(struct drbd_work *w, int unused) | 1867 | static int e_send_superseded(struct drbd_work *w, int unused) |
1868 | { | 1868 | { |
1869 | return e_send_ack(w, P_DISCARD_WRITE); | 1869 | return e_send_ack(w, P_SUPERSEDED); |
1870 | } | 1870 | } |
1871 | 1871 | ||
1872 | static int e_send_retry_write(struct drbd_work *w, int unused) | 1872 | static int e_send_retry_write(struct drbd_work *w, int unused) |
@@ -1874,7 +1874,7 @@ static int e_send_retry_write(struct drbd_work *w, int unused) | |||
1874 | struct drbd_tconn *tconn = w->mdev->tconn; | 1874 | struct drbd_tconn *tconn = w->mdev->tconn; |
1875 | 1875 | ||
1876 | return e_send_ack(w, tconn->agreed_pro_version >= 100 ? | 1876 | return e_send_ack(w, tconn->agreed_pro_version >= 100 ? |
1877 | P_RETRY_WRITE : P_DISCARD_WRITE); | 1877 | P_RETRY_WRITE : P_SUPERSEDED); |
1878 | } | 1878 | } |
1879 | 1879 | ||
1880 | static bool seq_greater(u32 a, u32 b) | 1880 | static bool seq_greater(u32 a, u32 b) |
@@ -2082,11 +2082,11 @@ static int handle_write_conflicts(struct drbd_conf *mdev, | |||
2082 | if (resolve_conflicts) { | 2082 | if (resolve_conflicts) { |
2083 | /* | 2083 | /* |
2084 | * If the peer request is fully contained within the | 2084 | * If the peer request is fully contained within the |
2085 | * overlapping request, it can be discarded; otherwise, | 2085 | * overlapping request, it can be considered overwritten |
2086 | * it will be retried once all overlapping requests | 2086 | * and thus superseded; otherwise, it will be retried |
2087 | * have completed. | 2087 | * once all overlapping requests have completed. |
2088 | */ | 2088 | */ |
2089 | bool discard = i->sector <= sector && i->sector + | 2089 | bool superseded = i->sector <= sector && i->sector + |
2090 | (i->size >> 9) >= sector + (size >> 9); | 2090 | (i->size >> 9) >= sector + (size >> 9); |
2091 | 2091 | ||
2092 | if (!equal) | 2092 | if (!equal) |
@@ -2095,10 +2095,10 @@ static int handle_write_conflicts(struct drbd_conf *mdev, | |||
2095 | "assuming %s came first\n", | 2095 | "assuming %s came first\n", |
2096 | (unsigned long long)i->sector, i->size, | 2096 | (unsigned long long)i->sector, i->size, |
2097 | (unsigned long long)sector, size, | 2097 | (unsigned long long)sector, size, |
2098 | discard ? "local" : "remote"); | 2098 | superseded ? "local" : "remote"); |
2099 | 2099 | ||
2100 | inc_unacked(mdev); | 2100 | inc_unacked(mdev); |
2101 | peer_req->w.cb = discard ? e_send_discard_write : | 2101 | peer_req->w.cb = superseded ? e_send_superseded : |
2102 | e_send_retry_write; | 2102 | e_send_retry_write; |
2103 | list_add_tail(&peer_req->w.list, &mdev->done_ee); | 2103 | list_add_tail(&peer_req->w.list, &mdev->done_ee); |
2104 | wake_asender(mdev->tconn); | 2104 | wake_asender(mdev->tconn); |
@@ -2119,8 +2119,9 @@ static int handle_write_conflicts(struct drbd_conf *mdev, | |||
2119 | !(req->rq_state & RQ_POSTPONED)) { | 2119 | !(req->rq_state & RQ_POSTPONED)) { |
2120 | /* | 2120 | /* |
2121 | * Wait for the node with the discard flag to | 2121 | * Wait for the node with the discard flag to |
2122 | * decide if this request will be discarded or | 2122 | * decide if this request has been superseded |
2123 | * retried. Requests that are discarded will | 2123 | * or needs to be retried. |
2124 | * Requests that have been superseded will | ||
2124 | * disappear from the write_requests tree. | 2125 | * disappear from the write_requests tree. |
2125 | * | 2126 | * |
2126 | * In addition, wait for the conflicting | 2127 | * In addition, wait for the conflicting |
@@ -4994,8 +4995,8 @@ static int got_BlockAck(struct drbd_tconn *tconn, struct packet_info *pi) | |||
4994 | case P_RECV_ACK: | 4995 | case P_RECV_ACK: |
4995 | what = RECV_ACKED_BY_PEER; | 4996 | what = RECV_ACKED_BY_PEER; |
4996 | break; | 4997 | break; |
4997 | case P_DISCARD_WRITE: | 4998 | case P_SUPERSEDED: |
4998 | what = DISCARD_WRITE; | 4999 | what = CONFLICT_RESOLVED; |
4999 | break; | 5000 | break; |
5000 | case P_RETRY_WRITE: | 5001 | case P_RETRY_WRITE: |
5001 | what = POSTPONE_WRITE; | 5002 | what = POSTPONE_WRITE; |
@@ -5220,7 +5221,7 @@ static struct asender_cmd asender_tbl[] = { | |||
5220 | [P_RECV_ACK] = { sizeof(struct p_block_ack), got_BlockAck }, | 5221 | [P_RECV_ACK] = { sizeof(struct p_block_ack), got_BlockAck }, |
5221 | [P_WRITE_ACK] = { sizeof(struct p_block_ack), got_BlockAck }, | 5222 | [P_WRITE_ACK] = { sizeof(struct p_block_ack), got_BlockAck }, |
5222 | [P_RS_WRITE_ACK] = { sizeof(struct p_block_ack), got_BlockAck }, | 5223 | [P_RS_WRITE_ACK] = { sizeof(struct p_block_ack), got_BlockAck }, |
5223 | [P_DISCARD_WRITE] = { sizeof(struct p_block_ack), got_BlockAck }, | 5224 | [P_SUPERSEDED] = { sizeof(struct p_block_ack), got_BlockAck }, |
5224 | [P_NEG_ACK] = { sizeof(struct p_block_ack), got_NegAck }, | 5225 | [P_NEG_ACK] = { sizeof(struct p_block_ack), got_NegAck }, |
5225 | [P_NEG_DREPLY] = { sizeof(struct p_block_ack), got_NegDReply }, | 5226 | [P_NEG_DREPLY] = { sizeof(struct p_block_ack), got_NegDReply }, |
5226 | [P_NEG_RS_DREPLY] = { sizeof(struct p_block_ack), got_NegRSDReply }, | 5227 | [P_NEG_RS_DREPLY] = { sizeof(struct p_block_ack), got_NegRSDReply }, |