mirror of
https://github.com/torvalds/linux.git
synced 2026-05-27 16:44:58 +02:00
cifs: add new field to track the last access time of cfid
The handlecache code today tracks the time at which dir lease was acquired and the laundromat thread uses that to check for old entries to cleanup. However, if a directory is actively accessed, it should not be chosen to expire first. This change adds a new last_access_time field to cfid and uses that to decide expiry of the cfid. Signed-off-by: Shyam Prasad N <sprasad@microsoft.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
2aaf178483
commit
3edc68de56
|
|
@ -195,6 +195,7 @@ int open_cached_dir(unsigned int xid, struct cifs_tcon *tcon,
|
|||
* from @cfids->entries. Caller will put last reference if the latter.
|
||||
*/
|
||||
if (cfid->has_lease && cfid->time) {
|
||||
cfid->last_access_time = jiffies;
|
||||
spin_unlock(&cfids->cfid_list_lock);
|
||||
*ret_cfid = cfid;
|
||||
kfree(utf16_path);
|
||||
|
|
@ -363,6 +364,7 @@ int open_cached_dir(unsigned int xid, struct cifs_tcon *tcon,
|
|||
cfid->file_all_info_is_valid = true;
|
||||
|
||||
cfid->time = jiffies;
|
||||
cfid->last_access_time = jiffies;
|
||||
spin_unlock(&cfids->cfid_list_lock);
|
||||
/* At this point the directory handle is fully cached */
|
||||
rc = 0;
|
||||
|
|
@ -730,8 +732,8 @@ static void cfids_laundromat_worker(struct work_struct *work)
|
|||
|
||||
spin_lock(&cfids->cfid_list_lock);
|
||||
list_for_each_entry_safe(cfid, q, &cfids->entries, entry) {
|
||||
if (cfid->time &&
|
||||
time_after(jiffies, cfid->time + HZ * dir_cache_timeout)) {
|
||||
if (cfid->last_access_time &&
|
||||
time_after(jiffies, cfid->last_access_time + HZ * dir_cache_timeout)) {
|
||||
cfid->on_list = false;
|
||||
list_move(&cfid->entry, &entry);
|
||||
cfids->num_entries--;
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ struct cached_fid {
|
|||
bool on_list:1;
|
||||
bool file_all_info_is_valid:1;
|
||||
unsigned long time; /* jiffies of when lease was taken */
|
||||
unsigned long last_access_time; /* jiffies of when last accessed */
|
||||
struct kref refcount;
|
||||
struct cifs_fid fid;
|
||||
spinlock_t fid_lock;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user