Unverified Commit 3cf52f86 authored by openeuler-ci-bot's avatar openeuler-ci-bot Committed by Gitee
Browse files

!14915 net/smc: protect link down work from execute after lgr freed

parents eb35bd41 0f6bae01
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -1773,7 +1773,9 @@ void smcr_link_down_cond_sched(struct smc_link *lnk)
{
	if (smc_link_downing(&lnk->state)) {
		trace_smcr_link_down(lnk, __builtin_return_address(0));
		schedule_work(&lnk->link_down_wrk);
		smcr_link_hold(lnk); /* smcr_link_put in link_down_wrk */
		if (!schedule_work(&lnk->link_down_wrk))
			smcr_link_put(lnk);
	}
}

@@ -1805,11 +1807,14 @@ static void smc_link_down_work(struct work_struct *work)
	struct smc_link_group *lgr = link->lgr;

	if (list_empty(&lgr->list))
		return;
		goto out;
	wake_up_all(&lgr->llc_msg_waiter);
	down_write(&lgr->llc_conf_mutex);
	smcr_link_down(link);
	up_write(&lgr->llc_conf_mutex);

out:
	smcr_link_put(link); /* smcr_link_hold by schedulers of link_down_work */
}

static int smc_vlan_by_tcpsk_walk(struct net_device *lower_dev,