Whamcloud - gitweb
- give llite moderately more reasonable default watermarks so that it can
authorzab <zab>
Thu, 14 Aug 2003 21:00:37 +0000 (21:00 +0000)
committerzab <zab>
Thu, 14 Aug 2003 21:00:37 +0000 (21:00 +0000)
  fill a fair sized lov in a burst.
- be more careful about unlocking writepage's page as it returns an error
- allocate writeback page state with NOFS so we don't descend into filesystems
  when memory is short

lustre/llite/rw24.c
lustre/llite/rw26.c

index a73f315..96a9db2 100644 (file)
@@ -269,16 +269,19 @@ static int ll_writepage_24(struct page *page)
         struct inode *inode = page->mapping->host;
         struct obd_export *exp;
         struct obd_client_page *ocp;
+        int cleanup_phase = 0;
         int rc;
         ENTRY;
 
         exp = ll_i2obdexp(inode);
         if (exp == NULL)
-                RETURN(-EINVAL);
+                GOTO(cleanup, rc = -EINVAL);
+        cleanup_phase = 1;
 
         ocp = ocp_alloc(page);
         if (IS_ERR(ocp)) 
-                GOTO(out, rc = PTR_ERR(ocp));
+                GOTO(cleanup, rc = PTR_ERR(ocp));
+        cleanup_phase = 2;
 
         ocp->ocp_callback = ll_complete_writepage_24;
         ocp->ocp_off = (obd_off)page->index << PAGE_CACHE_SHIFT;
@@ -286,19 +289,30 @@ static int ll_writepage_24(struct page *page)
         ocp->ocp_flag = OBD_BRW_CREATE|OBD_BRW_FROM_GRANT;
 
         obd_brw_plug(OBD_BRW_WRITE, exp, ll_i2info(inode)->lli_smd, NULL);
+
         page_cache_get(page);
         rc = ll_start_ocp_io(page);
         if (rc == 0) {
                 ll_page_acct(0, 1);
                 ll_start_io_from_dirty(inode, ll_complete_writepage_24);
+                cleanup_phase = 1;
         } else {
-                ocp_free(page);
                 page_cache_release(page);
         }
 
         obd_brw_unplug(OBD_BRW_WRITE, exp, ll_i2info(inode)->lli_smd, NULL);
-out:
-        class_export_put(exp);
+
+cleanup:
+        switch(cleanup_phase) {
+                case 2:
+                        ocp_free(page);
+                case 1:
+                        class_export_put(exp);
+                case 0:
+                        break;
+        }
+        if (rc != 0)
+                unlock_page(page);
         RETURN(rc);
 }
 
index c4d11fb..3ab3f84 100644 (file)
@@ -96,6 +96,8 @@ static int ll_writepage_26(struct page *page, struct writeback_control *wbc)
         int rc;
         ENTRY;
 
+#error "update this to look like ll_writepage_24"  
+
         LASSERT(PageLocked(page));
         LASSERT(!PageWriteback(page));