diff options
Diffstat (limited to 'net/sctp')
-rw-r--r-- | net/sctp/associola.c | 16 |
1 files changed, 2 insertions, 14 deletions
diff --git a/net/sctp/associola.c b/net/sctp/associola.c index d2709e2b7be6..fa261a3594c2 100644 --- a/net/sctp/associola.c +++ b/net/sctp/associola.c | |||
@@ -66,13 +66,6 @@ static void sctp_assoc_bh_rcv(struct work_struct *work); | |||
66 | static void sctp_assoc_free_asconf_acks(struct sctp_association *asoc); | 66 | static void sctp_assoc_free_asconf_acks(struct sctp_association *asoc); |
67 | static void sctp_assoc_free_asconf_queue(struct sctp_association *asoc); | 67 | static void sctp_assoc_free_asconf_queue(struct sctp_association *asoc); |
68 | 68 | ||
69 | /* Keep track of the new idr low so that we don't re-use association id | ||
70 | * numbers too fast. It is protected by they idr spin lock is in the | ||
71 | * range of 1 - INT_MAX. | ||
72 | */ | ||
73 | static u32 idr_low = 1; | ||
74 | |||
75 | |||
76 | /* 1st Level Abstractions. */ | 69 | /* 1st Level Abstractions. */ |
77 | 70 | ||
78 | /* Initialize a new association from provided memory. */ | 71 | /* Initialize a new association from provided memory. */ |
@@ -1601,13 +1594,8 @@ int sctp_assoc_set_id(struct sctp_association *asoc, gfp_t gfp) | |||
1601 | if (preload) | 1594 | if (preload) |
1602 | idr_preload(gfp); | 1595 | idr_preload(gfp); |
1603 | spin_lock_bh(&sctp_assocs_id_lock); | 1596 | spin_lock_bh(&sctp_assocs_id_lock); |
1604 | /* 0 is not a valid id, idr_low is always >= 1 */ | 1597 | /* 0 is not a valid assoc_id, must be >= 1 */ |
1605 | ret = idr_alloc(&sctp_assocs_id, asoc, idr_low, 0, GFP_NOWAIT); | 1598 | ret = idr_alloc_cyclic(&sctp_assocs_id, asoc, 1, 0, GFP_NOWAIT); |
1606 | if (ret >= 0) { | ||
1607 | idr_low = ret + 1; | ||
1608 | if (idr_low == INT_MAX) | ||
1609 | idr_low = 1; | ||
1610 | } | ||
1611 | spin_unlock_bh(&sctp_assocs_id_lock); | 1599 | spin_unlock_bh(&sctp_assocs_id_lock); |
1612 | if (preload) | 1600 | if (preload) |
1613 | idr_preload_end(); | 1601 | idr_preload_end(); |