VServer 1.9.2 (patch-2.6.8.1-vs1.9.2.diff)
[linux-2.6.git] / net / xfrm / xfrm_policy.c
index 2e60c84..e7db9f8 100644 (file)
@@ -204,6 +204,7 @@ out:
        return;
 
 expired:
+       read_unlock(&xp->lock);
        km_policy_expired(xp, dir, 1);
        xfrm_policy_delete(xp, dir);
        xfrm_pol_put(xp);
@@ -535,8 +536,11 @@ void xfrm_policy_delete(struct xfrm_policy *pol, int dir)
        write_lock_bh(&xfrm_policy_lock);
        pol = __xfrm_policy_unlink(pol, dir);
        write_unlock_bh(&xfrm_policy_lock);
-       if (pol)
+       if (pol) {
+               if (dir < XFRM_POLICY_MAX)
+                       atomic_inc(&flow_cache_genid);
                xfrm_policy_kill(pol);
+       }
 }
 
 int xfrm_sk_policy_insert(struct sock *sk, int dir, struct xfrm_policy *pol)