Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 265ac902 authored by Nick Piggin's avatar Nick Piggin Committed by Al Viro
Browse files

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: default avatarNick Piggin <npiggin@suse.de>
Signed-off-by: default avatarChristoph Hellwig <hch@lst.de>
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
parent 312d3ca8
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -246,13 +246,16 @@ void dput(struct dentry *dentry)
		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)) {

	/* 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;