aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/block/drbd
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/block/drbd')
-rw-r--r--drivers/block/drbd/drbd_int.h4
-rw-r--r--drivers/block/drbd/drbd_main.c2
-rw-r--r--drivers/block/drbd/drbd_receiver.c33
-rw-r--r--drivers/block/drbd/drbd_req.c6
-rw-r--r--drivers/block/drbd/drbd_req.h2
5 files changed, 24 insertions, 23 deletions
diff --git a/drivers/block/drbd/drbd_int.h b/drivers/block/drbd/drbd_int.h
index e5c98533c90c..91b73247f65d 100644
--- a/drivers/block/drbd/drbd_int.h
+++ b/drivers/block/drbd/drbd_int.h
@@ -197,7 +197,7 @@ enum drbd_packet {
197 P_RECV_ACK = 0x15, /* Used in protocol B */ 197 P_RECV_ACK = 0x15, /* Used in protocol B */
198 P_WRITE_ACK = 0x16, /* Used in protocol C */ 198 P_WRITE_ACK = 0x16, /* Used in protocol C */
199 P_RS_WRITE_ACK = 0x17, /* Is a P_WRITE_ACK, additionally call set_in_sync(). */ 199 P_RS_WRITE_ACK = 0x17, /* Is a P_WRITE_ACK, additionally call set_in_sync(). */
200 P_DISCARD_WRITE = 0x18, /* Used in proto C, two-primaries conflict detection */ 200 P_SUPERSEDED = 0x18, /* Used in proto C, two-primaries conflict detection */
201 P_NEG_ACK = 0x19, /* Sent if local disk is unusable */ 201 P_NEG_ACK = 0x19, /* Sent if local disk is unusable */
202 P_NEG_DREPLY = 0x1a, /* Local disk is broken... */ 202 P_NEG_DREPLY = 0x1a, /* Local disk is broken... */
203 P_NEG_RS_DREPLY = 0x1b, /* Local disk is broken... */ 203 P_NEG_RS_DREPLY = 0x1b, /* Local disk is broken... */
@@ -335,7 +335,7 @@ struct p_data {
335 * commands which share a struct: 335 * commands which share a struct:
336 * p_block_ack: 336 * p_block_ack:
337 * P_RECV_ACK (proto B), P_WRITE_ACK (proto C), 337 * P_RECV_ACK (proto B), P_WRITE_ACK (proto C),
338 * P_DISCARD_WRITE (proto C, two-primaries conflict detection) 338 * P_SUPERSEDED (proto C, two-primaries conflict detection)
339 * p_block_req: 339 * p_block_req:
340 * P_DATA_REQUEST, P_RS_DATA_REQUEST 340 * P_DATA_REQUEST, P_RS_DATA_REQUEST
341 */ 341 */
diff --git a/drivers/block/drbd/drbd_main.c b/drivers/block/drbd/drbd_main.c
index 85d95ec405ef..328ce80fecfa 100644
--- a/drivers/block/drbd/drbd_main.c
+++ b/drivers/block/drbd/drbd_main.c
@@ -3339,7 +3339,7 @@ const char *cmdname(enum drbd_packet cmd)
3339 [P_RECV_ACK] = "RecvAck", 3339 [P_RECV_ACK] = "RecvAck",
3340 [P_WRITE_ACK] = "WriteAck", 3340 [P_WRITE_ACK] = "WriteAck",
3341 [P_RS_WRITE_ACK] = "RSWriteAck", 3341 [P_RS_WRITE_ACK] = "RSWriteAck",
3342 [P_DISCARD_WRITE] = "DiscardWrite", 3342 [P_SUPERSEDED] = "Superseded",
3343 [P_NEG_ACK] = "NegAck", 3343 [P_NEG_ACK] = "NegAck",
3344 [P_NEG_DREPLY] = "NegDReply", 3344 [P_NEG_DREPLY] = "NegDReply",
3345 [P_NEG_RS_DREPLY] = "NegRSDReply", 3345 [P_NEG_RS_DREPLY] = "NegRSDReply",
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
1867static int e_send_discard_write(struct drbd_work *w, int unused) 1867static 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
1872static int e_send_retry_write(struct drbd_work *w, int unused) 1872static 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
1880static bool seq_greater(u32 a, u32 b) 1880static 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 },
diff --git a/drivers/block/drbd/drbd_req.c b/drivers/block/drbd/drbd_req.c
index 67768570141a..266ef24b3c74 100644
--- a/drivers/block/drbd/drbd_req.c
+++ b/drivers/block/drbd/drbd_req.c
@@ -611,13 +611,13 @@ int __req_mod(struct drbd_request *req, enum drbd_req_event what,
611 RQ_NET_DONE); 611 RQ_NET_DONE);
612 break; 612 break;
613 613
614 case DISCARD_WRITE: 614 case CONFLICT_RESOLVED:
615 /* for discarded conflicting writes of multiple primaries, 615 /* for superseded conflicting writes of multiple primaries,
616 * there is no need to keep anything in the tl, potential 616 * there is no need to keep anything in the tl, potential
617 * node crashes are covered by the activity log. 617 * node crashes are covered by the activity log.
618 * 618 *
619 * If this request had been marked as RQ_POSTPONED before, 619 * If this request had been marked as RQ_POSTPONED before,
620 * it will actually not be discarded, but "restarted", 620 * it will actually not be completed, but "restarted",
621 * resubmitted from the retry worker context. */ 621 * resubmitted from the retry worker context. */
622 D_ASSERT(req->rq_state & RQ_NET_PENDING); 622 D_ASSERT(req->rq_state & RQ_NET_PENDING);
623 D_ASSERT(req->rq_state & RQ_EXP_WRITE_ACK); 623 D_ASSERT(req->rq_state & RQ_EXP_WRITE_ACK);
diff --git a/drivers/block/drbd/drbd_req.h b/drivers/block/drbd/drbd_req.h
index 9611713c3580..016de6b8bb57 100644
--- a/drivers/block/drbd/drbd_req.h
+++ b/drivers/block/drbd/drbd_req.h
@@ -97,7 +97,7 @@ enum drbd_req_event {
97 RECV_ACKED_BY_PEER, 97 RECV_ACKED_BY_PEER,
98 WRITE_ACKED_BY_PEER, 98 WRITE_ACKED_BY_PEER,
99 WRITE_ACKED_BY_PEER_AND_SIS, /* and set_in_sync */ 99 WRITE_ACKED_BY_PEER_AND_SIS, /* and set_in_sync */
100 DISCARD_WRITE, 100 CONFLICT_RESOLVED,
101 POSTPONE_WRITE, 101 POSTPONE_WRITE,
102 NEG_ACKED, 102 NEG_ACKED,
103 BARRIER_ACKED, /* in protocol A and B */ 103 BARRIER_ACKED, /* in protocol A and B */