The commit is pushed to "branch-rh7-3.10.0-123.1.2-ovz" and will appear at
https://src.openvz.org/scm/ovz/vzkernel.git
after rh7-3.10.0-123.1.2.vz7.4.9
------>
commit 1b776f45202a6e39b9516a080212a206be840ad4
Author: Kirill Tkhai <[email protected]>
Date: Thu Apr 30 19:24:53 2015 +0400
ve: Make get_ve_by_id() lockless
css_tryget() fails if css_offline has already been called,
so the "true" result guarantees that final put_ve() hasn't
been made yet.
Signed-off-by: Kirill Tkhai <[email protected]>
Acked-by: Vladimir Davydov <[email protected]>
---
kernel/ve/ve.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c
index 9a6424e..3ef10bc 100644
--- a/kernel/ve/ve.c
+++ b/kernel/ve/ve.c
@@ -226,10 +226,11 @@ EXPORT_SYMBOL(__find_ve_by_id);
struct ve_struct *get_ve_by_id(envid_t veid)
{
struct ve_struct *ve;
- mutex_lock(&ve_list_lock);
+ rcu_read_lock();
ve = __find_ve_by_id(veid);
- get_ve(ve);
- mutex_unlock(&ve_list_lock);
+ if (ve && !css_tryget(&ve->css))
+ ve = NULL;
+ rcu_read_unlock();
return ve;
}
EXPORT_SYMBOL(get_ve_by_id);
_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel