|
@@ -657,8 +657,8 @@ static void __ip_vs_dst_cache_reset(struct ip_vs_dest *dest)
|
|
|
* scheduling.
|
|
|
*/
|
|
|
static struct ip_vs_dest *
|
|
|
-ip_vs_trash_get_dest(struct ip_vs_service *svc, const union nf_inet_addr *daddr,
|
|
|
- __be16 dport)
|
|
|
+ip_vs_trash_get_dest(struct ip_vs_service *svc, int dest_af,
|
|
|
+ const union nf_inet_addr *daddr, __be16 dport)
|
|
|
{
|
|
|
struct ip_vs_dest *dest;
|
|
|
struct netns_ipvs *ipvs = net_ipvs(svc->net);
|
|
@@ -671,11 +671,11 @@ ip_vs_trash_get_dest(struct ip_vs_service *svc, const union nf_inet_addr *daddr,
|
|
|
IP_VS_DBG_BUF(3, "Destination %u/%s:%u still in trash, "
|
|
|
"dest->refcnt=%d\n",
|
|
|
dest->vfwmark,
|
|
|
- IP_VS_DBG_ADDR(svc->af, &dest->addr),
|
|
|
+ IP_VS_DBG_ADDR(dest->af, &dest->addr),
|
|
|
ntohs(dest->port),
|
|
|
atomic_read(&dest->refcnt));
|
|
|
- if (dest->af == svc->af &&
|
|
|
- ip_vs_addr_equal(svc->af, &dest->addr, daddr) &&
|
|
|
+ if (dest->af == dest_af &&
|
|
|
+ ip_vs_addr_equal(dest_af, &dest->addr, daddr) &&
|
|
|
dest->port == dport &&
|
|
|
dest->vfwmark == svc->fwmark &&
|
|
|
dest->protocol == svc->protocol &&
|
|
@@ -950,7 +950,7 @@ ip_vs_add_dest(struct ip_vs_service *svc, struct ip_vs_dest_user_kern *udest)
|
|
|
* Check if the dest already exists in the trash and
|
|
|
* is from the same service
|
|
|
*/
|
|
|
- dest = ip_vs_trash_get_dest(svc, &daddr, dport);
|
|
|
+ dest = ip_vs_trash_get_dest(svc, udest->af, &daddr, dport);
|
|
|
|
|
|
if (dest != NULL) {
|
|
|
IP_VS_DBG_BUF(3, "Get destination %s:%u from trash, "
|