Merge tag 'imx-fixes-4.16' of ssh://gitolite.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / fs / mbcache.c
index b8b8b9ced9f81c47a1f76da3ef61c2f9d4645c78..bf41e2e72c1883b7fba884a8f7006ecc50bcf768 100644 (file)
@@ -94,6 +94,7 @@ int mb_cache_entry_create(struct mb_cache *cache, gfp_t mask, u32 key,
        entry->e_key = key;
        entry->e_value = value;
        entry->e_reusable = reusable;
+       entry->e_referenced = 0;
        head = mb_cache_entry_head(cache, key);
        hlist_bl_lock(head);
        hlist_bl_for_each_entry(dup, dup_node, head, e_hash_list) {
@@ -238,7 +239,9 @@ void mb_cache_entry_delete(struct mb_cache *cache, u32 key, u64 value)
                        spin_lock(&cache->c_list_lock);
                        if (!list_empty(&entry->e_list)) {
                                list_del_init(&entry->e_list);
-                               cache->c_entry_count--;
+                               if (!WARN_ONCE(cache->c_entry_count == 0,
+               "mbcache: attempt to decrement c_entry_count past zero"))
+                                       cache->c_entry_count--;
                                atomic_dec(&entry->e_refcnt);
                        }
                        spin_unlock(&cache->c_list_lock);
@@ -269,9 +272,6 @@ static unsigned long mb_cache_count(struct shrinker *shrink,
        struct mb_cache *cache = container_of(shrink, struct mb_cache,
                                              c_shrink);
 
-       /* Unlikely, but not impossible */
-       if (unlikely(cache->c_entry_count < 0))
-               return 0;
        return cache->c_entry_count;
 }