From 02fdd869a99785009557c14804ba1706a7a2899d Mon Sep 17 00:00:00 2001 From: braam Date: Tue, 6 Nov 2001 19:05:51 +0000 Subject: [PATCH] Minor compilation fixes for RedHat 2.4.9 Fix reference decreasing bug in namei.c --- lustre/obdfs/namei.c | 3 ++- lustre/obdfs/rw.c | 29 ++++++++++++++++++++++------- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/lustre/obdfs/namei.c b/lustre/obdfs/namei.c index 34808b7..1d79362 100644 --- a/lustre/obdfs/namei.c +++ b/lustre/obdfs/namei.c @@ -63,7 +63,8 @@ static inline void ext2_inc_count(struct inode *inode) static inline void ext2_dec_count(struct inode *inode) { inode->i_nlink--; - // obdfs_change_inode(inode); + if (inode->i_nlink > 0) + obdfs_change_inode(inode); } static inline int ext2_add_nondir(struct dentry *dentry, struct inode *inode) diff --git a/lustre/obdfs/rw.c b/lustre/obdfs/rw.c index 9cdd03a..71b27da 100644 --- a/lustre/obdfs/rw.c +++ b/lustre/obdfs/rw.c @@ -48,12 +48,20 @@ static int cache_writes = 0; */ void __set_page_dirty(struct page *page) { - struct address_space *mapping = page->mapping; + struct address_space *mapping; + spinlock_t *pg_lock; + + pg_lock = PAGECACHE_LOCK(page); + spin_lock(pg_lock); + + mapping = page->mapping; + spin_lock(&mapping->page_lock); - spin_lock(&pagecache_lock); list_del(&page->list); list_add(&page->list, &mapping->dirty_pages); - spin_unlock(&pagecache_lock); + + spin_unlock(&mapping->page_lock); + spin_unlock(pg_lock); if (mapping->host) mark_inode_dirty_pages(mapping->host); @@ -64,14 +72,21 @@ void __set_page_dirty(struct page *page) */ void __set_page_clean(struct page *page) { - struct address_space *mapping = page->mapping; struct inode *inode; - ENTRY; + struct address_space *mapping; + spinlock_t *pg_lock; + + pg_lock = PAGECACHE_LOCK(page); + spin_lock(pg_lock); + + mapping = page->mapping; + spin_lock(&mapping->page_lock); - spin_lock(&pagecache_lock); list_del(&page->list); list_add(&page->list, &mapping->clean_pages); - spin_unlock(&pagecache_lock); + + spin_unlock(&mapping->page_lock); + spin_unlock(pg_lock); inode = mapping->host; if (list_empty(&mapping->dirty_pages)) { -- 1.8.3.1