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