|
@@ -92,14 +92,14 @@ static void sync_timeline_free(struct kref *kref)
|
|
|
void sync_timeline_destroy(struct sync_timeline *obj)
|
|
void sync_timeline_destroy(struct sync_timeline *obj)
|
|
|
{
|
|
{
|
|
|
obj->destroyed = true;
|
|
obj->destroyed = true;
|
|
|
|
|
+ smp_wmb();
|
|
|
|
|
|
|
|
/*
|
|
/*
|
|
|
- * If this is not the last reference, signal any children
|
|
|
|
|
- * that their parent is going away.
|
|
|
|
|
|
|
+ * signal any children that their parent is going away.
|
|
|
*/
|
|
*/
|
|
|
|
|
+ sync_timeline_signal(obj);
|
|
|
|
|
|
|
|
- if (!kref_put(&obj->kref, sync_timeline_free))
|
|
|
|
|
- sync_timeline_signal(obj);
|
|
|
|
|
|
|
+ kref_put(&obj->kref, sync_timeline_free);
|
|
|
}
|
|
}
|
|
|
EXPORT_SYMBOL(sync_timeline_destroy);
|
|
EXPORT_SYMBOL(sync_timeline_destroy);
|
|
|
|
|
|