net: sctp: Don't use 64 kilobyte lookup table for four elements
Seemingly innocuous sctp_trans_state_to_prio_map[] array is way bigger than it looks, since "[SCTP_UNKNOWN] = 2" expands into "[0xffff] = 2" ! This patch replaces it with switch() statement. Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com> CC: Vlad Yasevich <vyasevich@gmail.com> CC: Neil Horman <nhorman@tuxdriver.com> CC: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> CC: linux-sctp@vger.kernel.org CC: netdev@vger.kernel.org CC: linux-kernel@vger.kernel.org Acked-by: Marcelo Ricardo Leitner <marcelo.leitner@gmail.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
06a15f51cf
Коммит
2103d6b818
|
@ -1208,20 +1208,22 @@ void sctp_assoc_update(struct sctp_association *asoc,
|
|||
* within this document.
|
||||
*
|
||||
* Our basic strategy is to round-robin transports in priorities
|
||||
* according to sctp_state_prio_map[] e.g., if no such
|
||||
* according to sctp_trans_score() e.g., if no such
|
||||
* transport with state SCTP_ACTIVE exists, round-robin through
|
||||
* SCTP_UNKNOWN, etc. You get the picture.
|
||||
*/
|
||||
static const u8 sctp_trans_state_to_prio_map[] = {
|
||||
[SCTP_ACTIVE] = 3, /* best case */
|
||||
[SCTP_UNKNOWN] = 2,
|
||||
[SCTP_PF] = 1,
|
||||
[SCTP_INACTIVE] = 0, /* worst case */
|
||||
};
|
||||
|
||||
static u8 sctp_trans_score(const struct sctp_transport *trans)
|
||||
{
|
||||
return sctp_trans_state_to_prio_map[trans->state];
|
||||
switch (trans->state) {
|
||||
case SCTP_ACTIVE:
|
||||
return 3; /* best case */
|
||||
case SCTP_UNKNOWN:
|
||||
return 2;
|
||||
case SCTP_PF:
|
||||
return 1;
|
||||
default: /* case SCTP_INACTIVE */
|
||||
return 0; /* worst case */
|
||||
}
|
||||
}
|
||||
|
||||
static struct sctp_transport *sctp_trans_elect_tie(struct sctp_transport *trans1,
|
||||
|
|
Загрузка…
Ссылка в новой задаче