OPTIM: lb-first: do not take the server lock on take_conn/drop_conn

The operations are only an insert and a delete into the LB tree, which
doesn't require the server's lock at all as the lbprm lock is already
held. Let's drop it.
This commit is contained in:
Willy Tarreau 2021-02-17 16:15:23 +01:00
parent 59b0fecfd9
commit 6b96e0e9d2

View File

@ -36,7 +36,7 @@ static inline void fas_remove_from_tree(struct server *s)
/* simply removes a server from a tree.
*
* The server's lock and the lbprm's lock must be held.
* The lbprm's lock must be held.
*/
static inline void fas_dequeue_srv(struct server *s)
{
@ -49,7 +49,7 @@ static inline void fas_dequeue_srv(struct server *s)
* reached. It is important to understand that the server weight is not used
* here.
*
* The server's lock and the lbprm's lock must be held.
* The lbprm's lock must be held.
*/
static inline void fas_queue_srv(struct server *s)
{
@ -66,18 +66,12 @@ static inline void fas_queue_srv(struct server *s)
*/
static void fas_srv_reposition(struct server *s, int locked)
{
if (!locked)
HA_SPIN_LOCK(SERVER_LOCK, &s->lock);
HA_RWLOCK_WRLOCK(LBPRM_LOCK, &s->proxy->lbprm.lock);
if (s->lb_tree) {
fas_dequeue_srv(s);
fas_queue_srv(s);
}
HA_RWLOCK_WRUNLOCK(LBPRM_LOCK, &s->proxy->lbprm.lock);
if (!locked)
HA_SPIN_UNLOCK(SERVER_LOCK, &s->lock);
}
/* This function updates the server trees according to server <srv>'s new