提交 2ec91e0e 编写于 作者: P Philipp Reisner

drbd: Renamed (old|new)_conf into (old|new)_net_conf in receive_SyncParam

Preparing RCU for disk_conf
Signed-off-by: NPhilipp Reisner <philipp.reisner@linbit.com>
Signed-off-by: NLars Ellenberg <lars.ellenberg@linbit.com>
上级 dc97b708
...@@ -3146,7 +3146,7 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi) ...@@ -3146,7 +3146,7 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi)
unsigned int header_size, data_size, exp_max_sz; unsigned int header_size, data_size, exp_max_sz;
struct crypto_hash *verify_tfm = NULL; struct crypto_hash *verify_tfm = NULL;
struct crypto_hash *csums_tfm = NULL; struct crypto_hash *csums_tfm = NULL;
struct net_conf *old_conf, *new_conf = NULL; struct net_conf *old_net_conf, *new_net_conf = NULL;
const int apv = tconn->agreed_pro_version; const int apv = tconn->agreed_pro_version;
int *rs_plan_s = NULL; int *rs_plan_s = NULL;
int fifo_size = 0; int fifo_size = 0;
...@@ -3222,12 +3222,12 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi) ...@@ -3222,12 +3222,12 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi)
} }
mutex_lock(&mdev->tconn->conf_update); mutex_lock(&mdev->tconn->conf_update);
old_conf = mdev->tconn->net_conf; old_net_conf = mdev->tconn->net_conf;
if (strcmp(old_conf->verify_alg, p->verify_alg)) { if (strcmp(old_net_conf->verify_alg, p->verify_alg)) {
if (mdev->state.conn == C_WF_REPORT_PARAMS) { if (mdev->state.conn == C_WF_REPORT_PARAMS) {
dev_err(DEV, "Different verify-alg settings. me=\"%s\" peer=\"%s\"\n", dev_err(DEV, "Different verify-alg settings. me=\"%s\" peer=\"%s\"\n",
old_conf->verify_alg, p->verify_alg); old_net_conf->verify_alg, p->verify_alg);
goto disconnect; goto disconnect;
} }
verify_tfm = drbd_crypto_alloc_digest_safe(mdev, verify_tfm = drbd_crypto_alloc_digest_safe(mdev,
...@@ -3238,10 +3238,10 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi) ...@@ -3238,10 +3238,10 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi)
} }
} }
if (apv >= 89 && strcmp(old_conf->csums_alg, p->csums_alg)) { if (apv >= 89 && strcmp(old_net_conf->csums_alg, p->csums_alg)) {
if (mdev->state.conn == C_WF_REPORT_PARAMS) { if (mdev->state.conn == C_WF_REPORT_PARAMS) {
dev_err(DEV, "Different csums-alg settings. me=\"%s\" peer=\"%s\"\n", dev_err(DEV, "Different csums-alg settings. me=\"%s\" peer=\"%s\"\n",
old_conf->csums_alg, p->csums_alg); old_net_conf->csums_alg, p->csums_alg);
goto disconnect; goto disconnect;
} }
csums_tfm = drbd_crypto_alloc_digest_safe(mdev, csums_tfm = drbd_crypto_alloc_digest_safe(mdev,
...@@ -3272,34 +3272,34 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi) ...@@ -3272,34 +3272,34 @@ static int receive_SyncParam(struct drbd_tconn *tconn, struct packet_info *pi)
} }
if (verify_tfm || csums_tfm) { if (verify_tfm || csums_tfm) {
new_conf = kzalloc(sizeof(struct net_conf), GFP_KERNEL); new_net_conf = kzalloc(sizeof(struct net_conf), GFP_KERNEL);
if (!new_conf) { if (!new_net_conf) {
dev_err(DEV, "Allocation of new net_conf failed\n"); dev_err(DEV, "Allocation of new net_conf failed\n");
goto disconnect; goto disconnect;
} }
*new_conf = *old_conf; *new_net_conf = *old_net_conf;
if (verify_tfm) { if (verify_tfm) {
strcpy(new_conf->verify_alg, p->verify_alg); strcpy(new_net_conf->verify_alg, p->verify_alg);
new_conf->verify_alg_len = strlen(p->verify_alg) + 1; new_net_conf->verify_alg_len = strlen(p->verify_alg) + 1;
crypto_free_hash(mdev->tconn->verify_tfm); crypto_free_hash(mdev->tconn->verify_tfm);
mdev->tconn->verify_tfm = verify_tfm; mdev->tconn->verify_tfm = verify_tfm;
dev_info(DEV, "using verify-alg: \"%s\"\n", p->verify_alg); dev_info(DEV, "using verify-alg: \"%s\"\n", p->verify_alg);
} }
if (csums_tfm) { if (csums_tfm) {
strcpy(new_conf->csums_alg, p->csums_alg); strcpy(new_net_conf->csums_alg, p->csums_alg);
new_conf->csums_alg_len = strlen(p->csums_alg) + 1; new_net_conf->csums_alg_len = strlen(p->csums_alg) + 1;
crypto_free_hash(mdev->tconn->csums_tfm); crypto_free_hash(mdev->tconn->csums_tfm);
mdev->tconn->csums_tfm = csums_tfm; mdev->tconn->csums_tfm = csums_tfm;
dev_info(DEV, "using csums-alg: \"%s\"\n", p->csums_alg); dev_info(DEV, "using csums-alg: \"%s\"\n", p->csums_alg);
} }
rcu_assign_pointer(tconn->net_conf, new_conf); rcu_assign_pointer(tconn->net_conf, new_net_conf);
} }
mutex_unlock(&mdev->tconn->conf_update); mutex_unlock(&mdev->tconn->conf_update);
if (new_conf) { if (new_net_conf) {
synchronize_rcu(); synchronize_rcu();
kfree(old_conf); kfree(old_net_conf);
} }
spin_lock(&mdev->peer_seq_lock); spin_lock(&mdev->peer_seq_lock);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册