diff --git a/fs/dcache.c b/fs/dcache.c
index 3818d6ab76ca18e398f6d425b2879012f3a49ff2..f2584d22cb45e9a46cde2fb3f8c376a47273b39a 100644
--- a/fs/dcache.c
+++ b/fs/dcache.c
@@ -487,6 +487,7 @@ static void __shrink_dcache_sb(struct super_block *sb, int *count, int flags)
 				if (!cnt)
 					break;
 			}
+			cond_resched_lock(&dcache_lock);
 		}
 	}
 	while (!list_empty(&tmp)) {