net: openvswitch: suitable access to the dp_meters
authorTonghao Zhang <xiangxia.m.yue@gmail.com>
Sat, 25 Apr 2020 03:39:47 +0000 (11:39 +0800)
committerDavid S. Miller <davem@davemloft.net>
Sun, 26 Apr 2020 03:48:21 +0000 (20:48 -0700)
To fix the following sparse warning:
| net/openvswitch/meter.c:109:38: sparse: sparse: incorrect type
| in assignment (different address spaces) ...
| net/openvswitch/meter.c:720:45: sparse: sparse: incorrect type
| in argument 1 (different address spaces) ...

Reported-by: kbuild test robot <lkp@intel.com>
Signed-off-by: Tonghao Zhang <xiangxia.m.yue@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/openvswitch/meter.c

index 915f311..612ad55 100644 (file)
@@ -107,8 +107,8 @@ dp_meter_instance_realloc(struct dp_meter_table *tbl, u32 size)
                return -ENOMEM;
 
        for (i = 0; i < n_meters; i++)
-               new_ti->dp_meters[i] =
-                       rcu_dereference_ovsl(ti->dp_meters[i]);
+               if (rcu_dereference_ovsl(ti->dp_meters[i]))
+                       new_ti->dp_meters[i] = ti->dp_meters[i];
 
        rcu_assign_pointer(tbl->ti, new_ti);
        call_rcu(&ti->rcu, dp_meter_instance_free_rcu);
@@ -752,7 +752,7 @@ void ovs_meters_exit(struct datapath *dp)
        int i;
 
        for (i = 0; i < ti->n_meters; i++)
-               ovs_meter_free(ti->dp_meters[i]);
+               ovs_meter_free(rcu_dereference_raw(ti->dp_meters[i]));
 
        dp_meter_instance_free(ti);
 }