diff options
Diffstat (limited to 'fs/smb/client/cached_dir.c')
-rw-r--r-- | fs/smb/client/cached_dir.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/fs/smb/client/cached_dir.c b/fs/smb/client/cached_dir.c index d28855a1edc1..0ee6eb959f1b 100644 --- a/fs/smb/client/cached_dir.c +++ b/fs/smb/client/cached_dir.c @@ -134,6 +134,28 @@ struct cached_fid *lookup_cached_dir(struct cached_fids *cfids, const void *key, return cfid; } +void invalidate_dirents(struct cached_fid *cfid) +{ + struct cached_dirents *cde; + struct cached_dirent *de, *q; + + if (!cfid) + return; + + cde = &cfid->dirents; + mutex_lock(&cde->de_mutex); + list_for_each_entry_safe(de, q, &cde->entries, entry) { + list_del(&de->entry); + kfree(de->name); + kfree(de); + } + + cde->is_valid = false; + cde->is_failed = false; + cde->pos = 2; + mutex_unlock(&cde->de_mutex); +} + /* * Open the and cache a directory handle. * If error then *cfid is not initialized. |