mirror of
https://github.com/lkl/linux.git
synced 2025-12-19 16:13:19 +09:00
mbcache: add functions to delete entry if unused
Add function mb_cache_entry_delete_or_get() to delete mbcache entry if
it is unused and also add a function to wait for entry to become unused
- mb_cache_entry_wait_unused(). We do not share code between the two
deleting function as one of them will go away soon.
CC: stable@vger.kernel.org
Fixes: 82939d7999 ("ext4: convert to mbcache2")
Signed-off-by: Jan Kara <jack@suse.cz>
Link: https://lore.kernel.org/r/20220712105436.32204-2-jack@suse.cz
Signed-off-by: Theodore Ts'o <tytso@mit.edu>
This commit is contained in:
@@ -30,15 +30,23 @@ void mb_cache_destroy(struct mb_cache *cache);
|
||||
int mb_cache_entry_create(struct mb_cache *cache, gfp_t mask, u32 key,
|
||||
u64 value, bool reusable);
|
||||
void __mb_cache_entry_free(struct mb_cache_entry *entry);
|
||||
void mb_cache_entry_wait_unused(struct mb_cache_entry *entry);
|
||||
static inline int mb_cache_entry_put(struct mb_cache *cache,
|
||||
struct mb_cache_entry *entry)
|
||||
{
|
||||
if (!atomic_dec_and_test(&entry->e_refcnt))
|
||||
unsigned int cnt = atomic_dec_return(&entry->e_refcnt);
|
||||
|
||||
if (cnt > 0) {
|
||||
if (cnt <= 3)
|
||||
wake_up_var(&entry->e_refcnt);
|
||||
return 0;
|
||||
}
|
||||
__mb_cache_entry_free(entry);
|
||||
return 1;
|
||||
}
|
||||
|
||||
struct mb_cache_entry *mb_cache_entry_delete_or_get(struct mb_cache *cache,
|
||||
u32 key, u64 value);
|
||||
void mb_cache_entry_delete(struct mb_cache *cache, u32 key, u64 value);
|
||||
struct mb_cache_entry *mb_cache_entry_get(struct mb_cache *cache, u32 key,
|
||||
u64 value);
|
||||
|
||||
Reference in New Issue
Block a user