The commit is pushed to "branch-rh7-3.10.0-229.7.2.vz7.9.x-ovz" and will appear 
at https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-229.7.2.vz7.9.10
------>
commit c173e3204914acf2002a75002f8b4a768a952bc0
Author: Stanislav Kinsburskiy <skinsbur...@virtuozzo.com>
Date:   Tue Nov 17 18:40:50 2015 +0400

    ve/vznetstat: fix RCU-protected "info_V{4, 6}" pointers initialization
    
    This pointers have to be referenced and assigned under rcu_read_lock().
    Moreover, there is no need to take tc_lock: it protects stats hash, but not
    info pointers.
    
    Fixes the following warning:
    
    [   31.658913] ===============================
    [   31.659035] [ INFO: suspicious RCU usage. ]
    [   31.659155] 3.10.0+ #121 Not tainted
    [   31.659258] -------------------------------
    [   31.659377] kernel/ve/vznetstat/vznetstat.c:95 suspicious
    rcu_dereference_check() usage!
    [   31.659597]
    [   31.659597] other info that might help us debug this:
    [   31.659597]
    [   31.659831]
    [   31.659831] rcu_scheduler_active = 1, debug_locks = 0
    [   31.660026] 1 lock held by vztactl/831:
    [   31.660136]  #0:  (tc_lock){.+.+..}, at: [<ffffffffa0052e64>]
    venet_acct_set_classes+0xf4/0x240 [vznetstat]
    [   31.660454]
    [   31.660454] stack backtrace:
    [   31.660584] CPU: 0 PID: 831 Comm: vztactl ve: 0 Not tainted 3.10.0+ #121
    ovz.9.8-21-g6c64ed7
    [   31.660823] Hardware name: Parallels Software International Inc. 
Parallels
    Virtual Platform/Parallels Virtual Platform, BIOS 6.9.23856.1122235 
03/18/2015
    [   31.661201]  0000000000000000 000000003e77c710 ffff8800a960bd88
    ffffffff816298fe
    [   31.661436]  ffff8800a960bdb8 ffffffff810f9667 0000000000000000
    ffff8801446e2f08
    [   31.661661]  0000000000000000 000000000000000c ffff8800a960bdf0
    ffffffffa0052f61
    [   31.661910] Call Trace:
    [   31.661989]  [<ffffffff816298fe>] dump_stack+0x19/0x1b
    [   31.662134]  [<ffffffff810f9667>] lockdep_rcu_suspicious+0xe7/0x120
    [   31.662308]  [<ffffffffa0052f61>] venet_acct_set_classes+0x1f1/0x240
    [vznetstat]
    [   31.662511]  [<ffffffffa005390b>] venet_acct_ioctl+0x2bb/0xaf0 
[vznetstat]
    [   31.662706]  [<ffffffffa003f0d5>] vzctl_ioctl+0x45/0x60 [vzdev]
    [   31.662875]  [<ffffffff812296d5>] do_vfs_ioctl+0x265/0x540
    [   31.663041]  [<ffffffff81236177>] ? fget_light+0x377/0x4e0
    [   31.663193]  [<ffffffff81229a04>] SyS_ioctl+0x54/0xa0
    [   31.663334]  [<ffffffff8163bf09>] system_call_fastpath+0x16/0x1b
    
    Signed-off-by: Stanislav Kinsburskiy <skinsbur...@virtuozzo.com>
---
 kernel/ve/vznetstat/vznetstat.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/kernel/ve/vznetstat/vznetstat.c b/kernel/ve/vznetstat/vznetstat.c
index 99feafb..c47865a 100644
--- a/kernel/ve/vznetstat/vznetstat.c
+++ b/kernel/ve/vznetstat/vznetstat.c
@@ -87,7 +87,7 @@ static int venet_acct_set_classes(const void __user 
*user_info, int length, int
                        goto out_free;
        }
 
-       write_lock_irq(&tc_lock);
+       rcu_read_lock();
        if (v6) {
                old = rcu_dereference(info_v6);
                rcu_assign_pointer(info_v6, info);
@@ -95,7 +95,7 @@ static int venet_acct_set_classes(const void __user 
*user_info, int length, int
                old = rcu_dereference(info_v4);
                rcu_assign_pointer(info_v4, info);
        }
-       write_unlock_irq(&tc_lock);
+       rcu_read_unlock();
 
        synchronize_net();
        /* IMPORTANT. I think reset of statistics collected should not be
_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to