Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d659f2aa authored by Philipp Reisner's avatar Philipp Reisner
Browse files

drbd: Send PROTOCOL_UPDATE packets when appropriate

parent 036b17ea
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1051,7 +1051,7 @@ extern int drbd_send(struct drbd_tconn *tconn, struct socket *sock,
extern int drbd_send_all(struct drbd_tconn *, struct socket *, void *, size_t,
			 unsigned);

extern int __drbd_send_protocol(struct drbd_tconn *tconn);
extern int __drbd_send_protocol(struct drbd_tconn *tconn, enum drbd_packet cmd);
extern int drbd_send_protocol(struct drbd_tconn *tconn);
extern int drbd_send_uuids(struct drbd_conf *mdev);
extern int drbd_send_uuids_skip_initial_sync(struct drbd_conf *mdev);
+3 −3
Original line number Diff line number Diff line
@@ -911,7 +911,7 @@ int drbd_send_sync_param(struct drbd_conf *mdev)
	return drbd_send_command(mdev, sock, cmd, size, NULL, 0);
}

int __drbd_send_protocol(struct drbd_tconn *tconn)
int __drbd_send_protocol(struct drbd_tconn *tconn, enum drbd_packet cmd)
{
	struct drbd_socket *sock;
	struct p_protocol *p;
@@ -953,7 +953,7 @@ int __drbd_send_protocol(struct drbd_tconn *tconn)
		strcpy(p->integrity_alg, nc->integrity_alg);
	rcu_read_unlock();

	return __conn_send_command(tconn, sock, P_PROTOCOL, size, NULL, 0);
	return __conn_send_command(tconn, sock, cmd, size, NULL, 0);
}

int drbd_send_protocol(struct drbd_tconn *tconn)
@@ -961,7 +961,7 @@ int drbd_send_protocol(struct drbd_tconn *tconn)
	int err;

	mutex_lock(&tconn->data.mutex);
	err = __drbd_send_protocol(tconn);
	err = __drbd_send_protocol(tconn, P_PROTOCOL);
	mutex_unlock(&tconn->data.mutex);

	return err;
+2 −9
Original line number Diff line number Diff line
@@ -1866,7 +1866,6 @@ int drbd_adm_net_opts(struct sk_buff *skb, struct genl_info *info)
	int ovr; /* online verify running */
	int rsr; /* re-sync running */
	struct crypto crypto = { };
	bool change_integrity_alg;

	retcode = drbd_adm_prepare(skb, info, DRBD_ADM_NEED_CONN);
	if (!adm_ctx.reply_skb)
@@ -1923,9 +1922,6 @@ int drbd_adm_net_opts(struct sk_buff *skb, struct genl_info *info)
		goto fail;
	}

	change_integrity_alg = strcmp(old_conf->integrity_alg,
				      new_conf->integrity_alg);

	retcode = alloc_crypto(&crypto, new_conf);
	if (retcode != NO_ERROR)
		goto fail;
@@ -1949,13 +1945,10 @@ int drbd_adm_net_opts(struct sk_buff *skb, struct genl_info *info)
	tconn->int_dig_vv = crypto.int_dig_vv;
	crypto_free_hash(tconn->integrity_tfm);
	tconn->integrity_tfm = crypto.integrity_tfm;
	if (change_integrity_alg) {
	if (tconn->cstate >= C_WF_REPORT_PARAMS && tconn->agreed_pro_version >= 100)
		/* Do this without trying to take tconn->data.mutex again.  */
		if (__drbd_send_protocol(tconn))
			goto fail;
	}
		__drbd_send_protocol(tconn, P_PROTOCOL_UPDATE);

	/* FIXME Changing cram_hmac while the connection is established is useless */
	crypto_free_hash(tconn->cram_hmac_tfm);
	tconn->cram_hmac_tfm = crypto.cram_hmac_tfm;