--- x/include/linux/mbcache.h +++ y/include/linux/mbcache.h @@ -51,8 +51,10 @@ static inline void mb_cache_entry_put(st unsigned int cnt = atomic_dec_return(&entry->e_refcnt); if (cnt > 0) { - if (cnt <= 2) + if (cnt <= 2) { + smp_mb(); wake_up_var(&entry->e_refcnt); + } return; } __mb_cache_entry_free(cache, entry);