From c183ae5e0eb963b1f87fdca8ab02c883fedfd24e Mon Sep 17 00:00:00 2001 From: nikita <nikita> Date: Wed, 12 Nov 2008 20:58:06 +0000 Subject: [PATCH] cl_page_list_own(): if page was truncated concurrently, remove it from the queue at once. --- lustre/obdclass/cl_io.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/lustre/obdclass/cl_io.c b/lustre/obdclass/cl_io.c index 1be2176f98..62357e763c 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); } -- GitLab