P_RECV_ACK = 0x15, /* Used in protocol B */
P_WRITE_ACK = 0x16, /* Used in protocol C */
P_RS_WRITE_ACK = 0x17, /* Is a P_WRITE_ACK, additionally call set_in_sync(). */
- P_DISCARD_WRITE = 0x18, /* Used in proto C, two-primaries conflict detection */
+ P_SUPERSEDED = 0x18, /* Used in proto C, two-primaries conflict detection */
P_NEG_ACK = 0x19, /* Sent if local disk is unusable */
P_NEG_DREPLY = 0x1a, /* Local disk is broken... */
P_NEG_RS_DREPLY = 0x1b, /* Local disk is broken... */
* commands which share a struct:
* p_block_ack:
* P_RECV_ACK (proto B), P_WRITE_ACK (proto C),
- * P_DISCARD_WRITE (proto C, two-primaries conflict detection)
+ * P_SUPERSEDED (proto C, two-primaries conflict detection)
* p_block_req:
* P_DATA_REQUEST, P_RS_DATA_REQUEST
*/
drbd_free_net_peer_req(mdev, peer_req);
/* possible callbacks here:
- * e_end_block, and e_end_resync_block, e_send_discard_write.
+ * e_end_block, and e_end_resync_block, e_send_superseded.
* all ignore the last argument.
*/
list_for_each_entry_safe(peer_req, t, &work_list, w.list) {
continue;
/* as it is RQ_POSTPONED, this will cause it to
* be queued on the retry workqueue. */
- __req_mod(req, DISCARD_WRITE, NULL);
+ __req_mod(req, CONFLICT_RESOLVED, NULL);
}
}
return err;
}
-static int e_send_discard_write(struct drbd_work *w, int unused)
+static int e_send_superseded(struct drbd_work *w, int unused)
{
- return e_send_ack(w, P_DISCARD_WRITE);
+ return e_send_ack(w, P_SUPERSEDED);
}
static int e_send_retry_write(struct drbd_work *w, int unused)
struct drbd_tconn *tconn = w->mdev->tconn;
return e_send_ack(w, tconn->agreed_pro_version >= 100 ?
- P_RETRY_WRITE : P_DISCARD_WRITE);
+ P_RETRY_WRITE : P_SUPERSEDED);
}
static bool seq_greater(u32 a, u32 b)
if (resolve_conflicts) {
/*
* If the peer request is fully contained within the
- * overlapping request, it can be discarded; otherwise,
- * it will be retried once all overlapping requests
- * have completed.
+ * overlapping request, it can be considered overwritten
+ * and thus superseded; otherwise, it will be retried
+ * once all overlapping requests have completed.
*/
- bool discard = i->sector <= sector && i->sector +
+ bool superseded = i->sector <= sector && i->sector +
(i->size >> 9) >= sector + (size >> 9);
if (!equal)
"assuming %s came first\n",
(unsigned long long)i->sector, i->size,
(unsigned long long)sector, size,
- discard ? "local" : "remote");
+ superseded ? "local" : "remote");
inc_unacked(mdev);
- peer_req->w.cb = discard ? e_send_discard_write :
+ peer_req->w.cb = superseded ? e_send_superseded :
e_send_retry_write;
list_add_tail(&peer_req->w.list, &mdev->done_ee);
wake_asender(mdev->tconn);
!(req->rq_state & RQ_POSTPONED)) {
/*
* Wait for the node with the discard flag to
- * decide if this request will be discarded or
- * retried. Requests that are discarded will
+ * decide if this request has been superseded
+ * or needs to be retried.
+ * Requests that have been superseded will
* disappear from the write_requests tree.
*
* In addition, wait for the conflicting
case P_RECV_ACK:
what = RECV_ACKED_BY_PEER;
break;
- case P_DISCARD_WRITE:
- what = DISCARD_WRITE;
+ case P_SUPERSEDED:
+ what = CONFLICT_RESOLVED;
break;
case P_RETRY_WRITE:
what = POSTPONE_WRITE;
[P_RECV_ACK] = { sizeof(struct p_block_ack), got_BlockAck },
[P_WRITE_ACK] = { sizeof(struct p_block_ack), got_BlockAck },
[P_RS_WRITE_ACK] = { sizeof(struct p_block_ack), got_BlockAck },
- [P_DISCARD_WRITE] = { sizeof(struct p_block_ack), got_BlockAck },
+ [P_SUPERSEDED] = { sizeof(struct p_block_ack), got_BlockAck },
[P_NEG_ACK] = { sizeof(struct p_block_ack), got_NegAck },
[P_NEG_DREPLY] = { sizeof(struct p_block_ack), got_NegDReply },
[P_NEG_RS_DREPLY] = { sizeof(struct p_block_ack), got_NegRSDReply },