|
@@ -199,6 +199,11 @@ static inline bool erofs_workgroup_try_to_freeze(struct erofs_workgroup *grp,
|
|
|
static inline void erofs_workgroup_unfreeze(struct erofs_workgroup *grp,
|
|
static inline void erofs_workgroup_unfreeze(struct erofs_workgroup *grp,
|
|
|
int orig_val)
|
|
int orig_val)
|
|
|
{
|
|
{
|
|
|
|
|
+ /*
|
|
|
|
|
+ * other observers should notice all modifications
|
|
|
|
|
+ * in the freezing period.
|
|
|
|
|
+ */
|
|
|
|
|
+ smp_mb();
|
|
|
atomic_set(&grp->refcount, orig_val);
|
|
atomic_set(&grp->refcount, orig_val);
|
|
|
preempt_enable();
|
|
preempt_enable();
|
|
|
}
|
|
}
|