Whamcloud - gitweb
Land b1_4_smallfix onto b1_4 (20040720_0138)
authoradilger <adilger>
Tue, 20 Jul 2004 16:10:00 +0000 (16:10 +0000)
committeradilger <adilger>
Tue, 20 Jul 2004 16:10:00 +0000 (16:10 +0000)
- don't hold llog sem during network request (3652)
- update server last transno after client disconnects (2525)
- replace config semaphore with spinlock (3306)
- don't allow multiple threads in OSC recovery(3812)
- don't close LustreDB during write_conf until it is done (3860)
- fix typo in lconf for_each_profile (3821)
- allow dumping logs from multiple threads at one time (3820)
- drop dentry ref in ext3_add_link from open_connect_dentry (3266)
- free recovery state on server during a forced cleanup (3571)
- unregister_reply for resent reqs (3063)
- loop back devices mounting and status check on 2.6 (3563)
- fix resource-creation race that can provoke i_size == 0 (3513)
- don't try to use bad inodes returned from MDS/OST fs lookup (3688)
- more debugging for page-accounting assertion (3746)
- return -ENOENT instead of asserting if ost getattr+unlink race (3558)
- avoid deadlock after precreation failure (3758)
- fix race and lock order deadlock in orphan handling (3450, 3750)
- add /proc/.../recovery_status to obdfilter (3428)
- lightweight CDEBUG infrastructure, debug daemon (3668)
- change default OSC RPC parameters to be better on small clusters
- turn off OST read cache for files smaller than 32MB

lustre/llite/rw26.c

index b9193e8..71964de 100644 (file)
@@ -91,9 +91,28 @@ static int ll_writepage_26(struct page *page, struct writeback_control *wbc)
 out:
         if (rc)
                 unlock_page(page);
+        else
+                set_page_writeback(page);
         RETURN(rc);
 }
 
+/* It is safe to not check anything in invalidatepage/releasepage below
+   because they are run with page locked and all our io is happening with
+   locked page too */
+static int ll_invalidatepage(struct page *page, unsigned long offset)
+{
+        if (PagePrivate(page))
+                ll_removepage(page);
+        return 1;
+}
+
+static int ll_releasepage(struct page *page, int gfp_mask)
+{
+        if (PagePrivate(page))
+                ll_removepage(page);
+        return 1;
+}
+
 struct address_space_operations ll_aops = {
         .readpage       = ll_readpage,
 //        .readpages      = ll_readpages,
@@ -104,6 +123,7 @@ struct address_space_operations ll_aops = {
         .sync_page      = NULL,
         .prepare_write  = ll_prepare_write,
         .commit_write   = ll_commit_write,
-        .removepage     = ll_removepage,
+        .invalidatepage = ll_invalidatepage,
+        .releasepage    = ll_releasepage,
         .bmap           = NULL
 };