aboutsummaryrefslogtreecommitdiffstats
path: root/mm
diff options
context:
space:
mode:
Diffstat (limited to 'mm')
-rw-r--r--mm/filemap.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/mm/filemap.c b/mm/filemap.c
index cb476e70cf19..a29318147365 100644
--- a/mm/filemap.c
+++ b/mm/filemap.c
@@ -863,9 +863,13 @@ repeat:
863 page = radix_tree_deref_slot((void **)pages[i]); 863 page = radix_tree_deref_slot((void **)pages[i]);
864 if (unlikely(!page)) 864 if (unlikely(!page))
865 continue; 865 continue;
866
867 /*
868 * This can only trigger when the entry at index 0 moves out
869 * of or back to the root: none yet gotten, safe to restart.
870 */
866 if (radix_tree_deref_retry(page)) { 871 if (radix_tree_deref_retry(page)) {
867 if (ret) 872 WARN_ON(start | i);
868 start = pages[ret-1]->index;
869 goto restart; 873 goto restart;
870 } 874 }
871 875
@@ -915,6 +919,11 @@ repeat:
915 page = radix_tree_deref_slot((void **)pages[i]); 919 page = radix_tree_deref_slot((void **)pages[i]);
916 if (unlikely(!page)) 920 if (unlikely(!page))
917 continue; 921 continue;
922
923 /*
924 * This can only trigger when the entry at index 0 moves out
925 * of or back to the root: none yet gotten, safe to restart.
926 */
918 if (radix_tree_deref_retry(page)) 927 if (radix_tree_deref_retry(page))
919 goto restart; 928 goto restart;
920 929
@@ -975,6 +984,11 @@ repeat:
975 page = radix_tree_deref_slot((void **)pages[i]); 984 page = radix_tree_deref_slot((void **)pages[i]);
976 if (unlikely(!page)) 985 if (unlikely(!page))
977 continue; 986 continue;
987
988 /*
989 * This can only trigger when the entry at index 0 moves out
990 * of or back to the root: none yet gotten, safe to restart.
991 */
978 if (radix_tree_deref_retry(page)) 992 if (radix_tree_deref_retry(page))
979 goto restart; 993 goto restart;
980 994