On Sat, Jul 18, 2015 at 10:40:23AM +0300, Cyrill Gorcunov wrote: > + > +static void __exit __exit_venetstat(void) > +{ > + struct ve_struct *ve; > + > + mutex_lock(&ve_list_lock); > + for_each_ve(ve) { > + venet_acct_put_stat(ve->stat); > + ve->stat = NULL; > + } > + mutex_unlock(&ve_list_lock); > +
venet_acct_hook can be called in this moment. I think we need to unregister the hook before the previous loop. > + ve_hook_unregister(&venet_acct_hook); > +} > > int __init venetstat_init(void) > { > @@ -1095,6 +1156,10 @@ int __init venetstat_init(void) > for (i = 0; i < STAT_HASH_LEN; i++) > INIT_LIST_HEAD(stat_hash_list + i); > > + i = __init_venetstat(); > + if (i) > + return i; This looks ugly. Could you declare one more variable with more suitable name. > + > #if CONFIG_PROC_FS > de = proc_create("venetstat", S_IFREG|S_IRUSR, proc_vz_dir, > &proc_venetstat_operations); > @@ -1113,6 +1178,7 @@ int __init venetstat_init(void) > > void __exit venetstat_exit(void) > { > + __exit_venetstat(); > vzioctl_unregister(&tc_ioctl_info); > venet_acct_destroy_all_stat(); > _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel