diff -u linux-2.6.17.8-vs2.1.1-rc29.1.4/kernel/vserver/network.c linux-2.6.17.8-vs2.1.1-rc29.1.4/kernel/vserver/network.c --- linux-2.6.17.8-vs2.1.1-rc29.1.4/kernel/vserver/network.c 2006-08-19 01:45:50 +0200 +++ linux-2.6.17.8-vs2.1.1-rc29.1.4/kernel/vserver/network.c 2006-08-19 01:45:50 +0200 @@ -511,13 +511,25 @@ void nx_set_persistent(struct nx_info *nxi) { - if (nx_info_flags(nxi, NXF_PERSISTENT, 0)) { - get_nx_info(nxi); - claim_nx_info(nxi, current); - } else { - release_nx_info(nxi, current); - put_nx_info(nxi); - } + get_nx_info(nxi); + claim_nx_info(nxi, current); +} + +void nx_clear_persistent(struct nx_info *nxi) +{ + vxdprintk(VXD_CBIT(nid, 6), + "nx_clear_persistent(%p[#%d])", nxi, nxi->nx_id); + + release_nx_info(nxi, current); + put_nx_info(nxi); +} + +void nx_update_persistent(struct nx_info *nxi) +{ + if (nx_info_flags(nxi, NXF_PERSISTENT, 0)) + nx_set_persistent(nxi); + else + nx_clear_persistent(nxi); } /* vserver syscall commands below here */ @@ -703,7 +715,7 @@ nxi->nx_flags = vx_mask_flags(nxi->nx_flags, vc_data.flagword, mask); if (trigger & NXF_PERSISTENT) - nx_set_persistent(nxi); + nx_update_persistent(nxi); return 0; }