fs: improve DCACHE_REFERENCED usage
dentry referenced bit is only set when installing the dentry back onto the LRU. However with lazy LRU, the dentry can already be on the LRU list at dput time, thus missing out on setting the referenced bit. Fix this. Signed-off-by: Nick Piggin <npiggin@suse.de> Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
312d3ca856
commit
265ac90230
|
@ -246,13 +246,16 @@ repeat:
|
|||
if (dentry->d_op->d_delete(dentry))
|
||||
goto unhash_it;
|
||||
}
|
||||
|
||||
/* Unreachable? Get rid of it */
|
||||
if (d_unhashed(dentry))
|
||||
goto kill_it;
|
||||
if (list_empty(&dentry->d_lru)) {
|
||||
dentry->d_flags |= DCACHE_REFERENCED;
|
||||
|
||||
/* Otherwise leave it cached and ensure it's on the LRU */
|
||||
dentry->d_flags |= DCACHE_REFERENCED;
|
||||
if (list_empty(&dentry->d_lru))
|
||||
dentry_lru_add(dentry);
|
||||
}
|
||||
|
||||
spin_unlock(&dentry->d_lock);
|
||||
spin_unlock(&dcache_lock);
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue