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

Commit 517c300e authored by Karsten Graul's avatar Karsten Graul Committed by David S. Miller
Browse files

net/smc: check for pending termination



Avoid to run the processing in smc_lgr_terminate() more than once,
remember when the link group termination is triggered.

Signed-off-by: default avatarKarsten Graul <kgraul@linux.ibm.com>
Signed-off-by: default avatarUrsula Braun <ubraun@linux.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8f332a74
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -316,7 +316,7 @@ int smc_clc_wait_msg(struct smc_sock *smc, void *buf, int buflen,
	if (clcm->type == SMC_CLC_DECLINE) {
		reason_code = SMC_CLC_DECL_REPLY;
		if (((struct smc_clc_msg_decline *)buf)->hdr.flag) {
			smc->conn.lgr->sync_err = true;
			smc->conn.lgr->sync_err = 1;
			smc_lgr_terminate(smc->conn.lgr);
		}
	}
+4 −1
Original line number Diff line number Diff line
@@ -172,7 +172,7 @@ static int smc_lgr_create(struct smc_sock *smc,
		goto out;
	}
	lgr->role = smc->listen_smc ? SMC_SERV : SMC_CLNT;
	lgr->sync_err = false;
	lgr->sync_err = 0;
	memcpy(lgr->peer_systemid, peer_systemid, SMC_SYSTEMID_LEN);
	lgr->vlan_id = vlan_id;
	rwlock_init(&lgr->sndbufs_lock);
@@ -352,6 +352,9 @@ void smc_lgr_terminate(struct smc_link_group *lgr)
	struct smc_sock *smc;
	struct rb_node *node;

	if (lgr->terminating)
		return;	/* lgr already terminating */
	lgr->terminating = 1;
	smc_lgr_forget(lgr);
	smc_llc_link_inactive(&lgr->lnk[SMC_SINGLE_LINK]);

+2 −1
Original line number Diff line number Diff line
@@ -166,7 +166,8 @@ struct smc_link_group {

	u8			id[SMC_LGR_ID_SIZE];	/* unique lgr id */
	struct delayed_work	free_work;	/* delayed freeing of an lgr */
	bool			sync_err;	/* lgr no longer fits to peer */
	u8			sync_err : 1;	/* lgr no longer fits to peer */
	u8			terminating : 1;/* lgr is terminating */
};

/* Find the connection associated with the given alert token in the link group.