- cl_page_list_init(plist);
- cl_page_gang_lookup(env, obj, io, 0, CL_PAGE_EOF, plist, 0);
- /*
- * Since we're purging the pages of an object, we don't care
- * the possible outcomes of the following functions.
- */
- cl_page_list_unmap(env, io, plist);
- cl_page_list_discard(env, io, plist);
- cl_page_list_disown(env, io, plist);
- cl_page_list_fini(env, plist);
+ do {
+ cl_page_list_init(plist);
+ cl_page_gang_lookup(env, obj, io, 0, CL_PAGE_EOF, plist, 0,
+ &resched);
+ /*
+ * Since we're purging the pages of an object, we don't care
+ * the possible outcomes of the following functions.
+ */
+ cl_page_list_unmap(env, io, plist);
+ cl_page_list_discard(env, io, plist);
+ cl_page_list_disown(env, io, plist);
+ cl_page_list_fini(env, plist);
+
+ if (resched)
+ cfs_cond_resched();
+ } while (resched);