[ovs-dev] [PATCH 2/7] datapath: Acquire dp->mutex when deleting a datapath.
Jesse Gross
jesse at nicira.com
Wed Dec 29 23:41:30 UTC 2010
It's possible that someone is using the datapath data structures
when we attempt to delete the datapath. The first writer will
only hold dp->mutex, which we don't currently acquire when deleting.
This adds that lock to prevent a potential race (this can't currently
happen because userspace is single threaded).
Signed-off-by: Jesse Gross <jesse at nicira.com>
---
datapath/datapath.c | 7 +++++--
1 files changed, 5 insertions(+), 2 deletions(-)
diff --git a/datapath/datapath.c b/datapath/datapath.c
index 87b2a05..1bf0520 100644
--- a/datapath/datapath.c
+++ b/datapath/datapath.c
@@ -318,9 +318,11 @@ static int destroy_dp(int dp_idx)
dp = get_dp(dp_idx);
if (!dp) {
err = -ENODEV;
- goto unlock;
+ goto out;
}
+ mutex_lock(&dp->mutex);
+
list_for_each_entry_safe (p, n, &dp->port_list, node)
if (p->port_no != ODPP_LOCAL)
dp_detach_port(p);
@@ -336,10 +338,11 @@ static int destroy_dp(int dp_idx)
skb_queue_purge(&dp->queues[i]);
free_percpu(dp->stats_percpu);
+ mutex_unlock(&dp->mutex);
kobject_put(&dp->ifobj);
module_put(THIS_MODULE);
-unlock:
+out:
mutex_unlock(&dp_mutex);
rtnl_unlock();
return err;
--
1.7.1
More information about the dev
mailing list