diff --git a/net/openvswitch/flow_table.c b/net/openvswitch/flow_table.c index bd14052ed3420d2f7c3f3c636000e9822476f253..3c268b3d71c34baa0a8c70888823b37da454fffd 100644 --- a/net/openvswitch/flow_table.c +++ b/net/openvswitch/flow_table.c @@ -158,11 +158,13 @@ void ovs_flow_free(struct sw_flow *flow, bool deferred) if (!flow) return; - ASSERT_OVSL(); - if (flow->mask) { struct sw_flow_mask *mask = flow->mask; + /* ovs-lock is required to protect mask-refcount and + * mask list. + */ + ASSERT_OVSL(); BUG_ON(!mask->ref_count); mask->ref_count--;