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

Commit b1175fcf authored by Sahitya Tummala's avatar Sahitya Tummala
Browse files

fs/dcache: Fix indefinite wait in d_invalidate()



In the path of task exit, the proc dentries corresponding to this
task will be killed by moving it to a shrink list. If those dentries
are already claimed by another task for shrinking, the exiting
task waits in a tight loop until those dentries are killed. This can
potentially result in a deadlock if those dentries are corresponding
to an RT task but the task which is shrinking those dentries is a
lower priority task. Fix this by not doing tight loop, if our dentries
are claimed by other task.

Change-Id: If6848521469db7dea2bbba0dbaf8597094716267
Signed-off-by: default avatarSahitya Tummala <stummala@codeaurora.org>
parent 790fe923
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1445,7 +1445,7 @@ static enum d_walk_ret select_collect(void *_data, struct dentry *dentry)
		goto out;

	if (dentry->d_flags & DCACHE_SHRINK_LIST) {
		data->found++;
		goto out;
	} else {
		if (dentry->d_flags & DCACHE_LRU_LIST)
			d_lru_del(dentry);