diff --git a/lustre/obdclass/cl_io.c b/lustre/obdclass/cl_io.c index 1be2176f9879b616a94db2430f0893e5dc6149bc..62357e763c843e313a84b99edb7e77b853336483 100644 --- a/lustre/obdclass/cl_io.c +++ b/lustre/obdclass/cl_io.c @@ -1126,16 +1126,18 @@ int cl_page_list_own(const struct lu_env *env, struct cl_io *io, struct cl_page_list *plist) { struct cl_page *page; + struct cl_page *temp; int result; - int rc; LINVRNT(plist->pl_owner == cfs_current()); ENTRY; result = 0; - cl_page_list_for_each(page, plist) { - rc = cl_page_own(env, io, page); + cl_page_list_for_each_safe(page, temp, plist) { + if (cl_page_own(env, io, page) == 0) result = result ?: page->cp_error; + else + cl_page_list_del(env, plist, page); } RETURN(result); }