Commit 6038178e authored by Andreas Gruenbacher's avatar Andreas Gruenbacher Committed by Philipp Reisner
Browse files

drbd: Change how the "handshake" packets are called



Packets of type P_HAND_SHAKE define which protocol versions and features
a node supports.  For clarity, call those packets P_CONNECTION_FEATURES
instead.

(This does not determine the features that a specific drbd device
supports, such as drbd protocol A, B, C.)

Signed-off-by: default avatarPhilipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: default avatarLars Ellenberg <lars.ellenberg@linbit.com>
parent e5d6f33a
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -235,7 +235,7 @@ enum drbd_packet {
	P_INITIAL_META	      = 0xfff1, /* First Packet on the MetaSock */
	P_INITIAL_DATA	      = 0xfff2, /* First Packet on the Socket */

	P_HAND_SHAKE	      = 0xfffe	/* FIXED for the next century! */
	P_CONNECTION_FEATURES = 0xfffe	/* FIXED for the next century! */
};

extern const char *cmdname(enum drbd_packet cmd);
@@ -374,14 +374,14 @@ struct p_block_req {

/*
 * commands with their own struct for additional fields:
 *   P_HAND_SHAKE
 *   P_CONNECTION_FEATURES
 *   P_BARRIER
 *   P_BARRIER_ACK
 *   P_SYNC_PARAM
 *   ReportParams
 */

struct p_handshake {
struct p_connection_features {
	struct p_header head;   /* Note: vnr will be ignored */
	u32 protocol_min;
	u32 feature_flags;
+3 −3
Original line number Diff line number Diff line
@@ -2497,7 +2497,7 @@ int __init drbd_init(void)
	int err;

	BUILD_BUG_ON(sizeof(struct p_header80) != sizeof(struct p_header95));
	BUILD_BUG_ON(sizeof(struct p_handshake) != 80);
	BUILD_BUG_ON(sizeof(struct p_connection_features) != 80);

	if (minor_count < DRBD_MINOR_COUNT_MIN || minor_count > DRBD_MINOR_COUNT_MAX) {
		printk(KERN_ERR
@@ -3149,8 +3149,8 @@ const char *cmdname(enum drbd_packet cmd)
		return "InitialMeta";
	if (cmd == P_INITIAL_DATA)
		return "InitialData";
	if (cmd == P_HAND_SHAKE)
		return "HandShake";
	if (cmd == P_CONNECTION_FEATURES)
		return "ConnectionFeatures";
	if (cmd >= ARRAY_SIZE(cmdnames))
		return "Unknown";
	return cmdnames[cmd];
+13 −13
Original line number Diff line number Diff line
@@ -60,7 +60,7 @@ enum finish_epoch {
	FE_RECYCLED,
};

static int drbd_do_handshake(struct drbd_tconn *tconn);
static int drbd_do_features(struct drbd_tconn *tconn);
static int drbd_do_auth(struct drbd_tconn *tconn);
static int drbd_disconnected(int vnr, void *p, void *data);

@@ -913,7 +913,7 @@ retry:
	/* NOT YET ...
	 * sock->sk->sk_sndtimeo = tconn->net_conf->timeout*HZ/10;
	 * sock->sk->sk_rcvtimeo = MAX_SCHEDULE_TIMEOUT;
	 * first set it to the P_HAND_SHAKE timeout,
	 * first set it to the P_CONNECTION_FEATURES timeout,
	 * which we set to 4x the configured ping_timeout. */
	sock->sk->sk_sndtimeo =
	sock->sk->sk_rcvtimeo = tconn->net_conf->ping_timeo*4*HZ/10;
@@ -928,7 +928,7 @@ retry:

	tconn->last_received = jiffies;

	h = drbd_do_handshake(tconn);
	h = drbd_do_features(tconn);
	if (h <= 0)
		return h;

@@ -4176,10 +4176,10 @@ static int drbd_disconnected(int vnr, void *p, void *data)
 *
 * for now, they are expected to be zero, but ignored.
 */
static int drbd_send_handshake(struct drbd_tconn *tconn)
static int drbd_send_features(struct drbd_tconn *tconn)
{
	/* ASSERT current == mdev->tconn->receiver ... */
	struct p_handshake *p = tconn->data.sbuf;
	struct p_connection_features *p = tconn->data.sbuf;
	int err;

	if (mutex_lock_interruptible(&tconn->data.mutex)) {
@@ -4195,7 +4195,7 @@ static int drbd_send_handshake(struct drbd_tconn *tconn)
	memset(p, 0, sizeof(*p));
	p->protocol_min = cpu_to_be32(PRO_VERSION_MIN);
	p->protocol_max = cpu_to_be32(PRO_VERSION_MAX);
	err = _conn_send_cmd(tconn, 0, &tconn->data, P_HAND_SHAKE,
	err = _conn_send_cmd(tconn, 0, &tconn->data, P_CONNECTION_FEATURES,
			     &p->head, sizeof(*p), 0);
	mutex_unlock(&tconn->data.mutex);
	return err;
@@ -4208,15 +4208,15 @@ static int drbd_send_handshake(struct drbd_tconn *tconn)
 *  -1 peer talks different language,
 *     no point in trying again, please go standalone.
 */
static int drbd_do_handshake(struct drbd_tconn *tconn)
static int drbd_do_features(struct drbd_tconn *tconn)
{
	/* ASSERT current == tconn->receiver ... */
	struct p_handshake *p = tconn->data.rbuf;
	const int expect = sizeof(struct p_handshake) - sizeof(struct p_header80);
	struct p_connection_features *p = tconn->data.rbuf;
	const int expect = sizeof(struct p_connection_features) - sizeof(struct p_header80);
	struct packet_info pi;
	int err;

	err = drbd_send_handshake(tconn);
	err = drbd_send_features(tconn);
	if (err)
		return 0;

@@ -4224,14 +4224,14 @@ static int drbd_do_handshake(struct drbd_tconn *tconn)
	if (err)
		return 0;

	if (pi.cmd != P_HAND_SHAKE) {
		conn_err(tconn, "expected HandShake packet, received: %s (0x%04x)\n",
	if (pi.cmd != P_CONNECTION_FEATURES) {
		conn_err(tconn, "expected ConnectionFeatures packet, received: %s (0x%04x)\n",
		     cmdname(pi.cmd), pi.cmd);
		return -1;
	}

	if (pi.size != expect) {
		conn_err(tconn, "expected HandShake length: %u, received: %u\n",
		conn_err(tconn, "expected ConnectionFeatures length: %u, received: %u\n",
		     expect, pi.size);
		return -1;
	}