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

Commit 5bc11ddb authored by Ursula Braun's avatar Ursula Braun Committed by David S. Miller
Browse files

net/smc: longer delay for client link group removal



Client link group creation always follows the server linkgroup creation.
If peer creates a new server link group, client has to create a new
client link group. If peer reuses a server link group for a new
connection, client has to reuse its client link group as well. This
patch introduces a longer delay for client link group removal to make
sure this link group still exists, once the peer decides to reuse a
server link group. This avoids out-of-sync conditions for link groups.
If already scheduled, modify the delay.

Signed-off-by: default avatarUrsula Braun <ubraun@linux.vnet.ibm.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 8301fa44
Loading
Loading
Loading
Loading
+12 −4
Original line number Diff line number Diff line
@@ -26,7 +26,8 @@
#include "smc_close.h"

#define SMC_LGR_NUM_INCR		256
#define SMC_LGR_FREE_DELAY	(600 * HZ)
#define SMC_LGR_FREE_DELAY_SERV		(600 * HZ)
#define SMC_LGR_FREE_DELAY_CLNT		(SMC_LGR_FREE_DELAY_SERV + 10)

static u32 smc_lgr_num;			/* unique link group number */

@@ -107,8 +108,15 @@ static void smc_lgr_unregister_conn(struct smc_connection *conn)
		__smc_lgr_unregister_conn(conn);
	}
	write_unlock_bh(&lgr->conns_lock);
	if (reduced && !lgr->conns_num)
		schedule_delayed_work(&lgr->free_work, SMC_LGR_FREE_DELAY);
	if (!reduced || lgr->conns_num)
		return;
	/* client link group creation always follows the server link group
	 * creation. For client use a somewhat higher removal delay time,
	 * otherwise there is a risk of out-of-sync link groups.
	 */
	mod_delayed_work(system_wq, &lgr->free_work,
			 lgr->role == SMC_CLNT ? SMC_LGR_FREE_DELAY_CLNT :
						 SMC_LGR_FREE_DELAY_SERV);
}

static void smc_lgr_free_work(struct work_struct *work)