diff options
| -rw-r--r-- | fs/smb/client/cached_dir.c | 32 |
1 files changed, 12 insertions, 20 deletions
diff --git a/fs/smb/client/cached_dir.c b/fs/smb/client/cached_dir.c index 36a1e1436502..8c8ead6e96bd 100644 --- a/fs/smb/client/cached_dir.c +++ b/fs/smb/client/cached_dir.c @@ -13,7 +13,6 @@ #include "cached_dir.h" static struct cached_fid *init_cached_dir(const char *path); -static void free_cached_dir(struct cached_fid *cfid); static void smb2_close_cached_fid(struct kref *ref); static inline void invalidate_cfid(struct cached_fid *cfid) @@ -456,6 +455,7 @@ static void smb2_close_cached_fid(struct kref *ref) { struct cached_fid *cfid = container_of(ref, struct cached_fid, refcount); + struct cached_dirent *de, *q; /* * There's no way a valid cfid can reach here. @@ -474,7 +474,17 @@ smb2_close_cached_fid(struct kref *ref) list_del(&cfid->entry); drop_cfid(cfid); - free_cached_dir(cfid); + + /* Delete all cached dirent names */ + list_for_each_entry_safe(de, q, &cfid->dirents.entries, entry) { + list_del(&de->entry); + kfree(de->name); + kfree(de); + } + + kfree(cfid->path); + cfid->path = NULL; + kfree(cfid); } void drop_cached_dir_by_name(const unsigned int xid, struct cifs_tcon *tcon, @@ -613,24 +623,6 @@ static struct cached_fid *init_cached_dir(const char *path) return cfid; } -static void free_cached_dir(struct cached_fid *cfid) -{ - struct cached_dirent *dirent, *q; - - /* - * Delete all cached dirent names - */ - list_for_each_entry_safe(dirent, q, &cfid->dirents.entries, entry) { - list_del(&dirent->entry); - kfree(dirent->name); - kfree(dirent); - } - - kfree(cfid->path); - cfid->path = NULL; - kfree(cfid); -} - static void cfids_laundromat_worker(struct work_struct *work) { struct cached_fids *cfids; |
