From b146fe58ac704b5bd1b0e3dc14412da09b422b6b Mon Sep 17 00:00:00 2001 From: adilger Date: Tue, 20 Jul 2004 16:10:00 +0000 Subject: [PATCH] Land b1_4_smallfix onto b1_4 (20040720_0138) - 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 | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/lustre/llite/rw26.c b/lustre/llite/rw26.c index b9193e8..71964de 100644 --- a/lustre/llite/rw26.c +++ b/lustre/llite/rw26.c @@ -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 }; -- 1.8.3.1