2.6.10 uses spin lock for mapping's tree lock, not read/write spin lock as in mm kernel. diff -puN fs/reiser4/as_ops.c~reiser4-mapping-tree-lock-fix fs/reiser4/as_ops.c fs/reiser4/as_ops.c | 14 +++++++------- fs/reiser4/page_cache.c | 4 ++-- fs/reiser4/plugin/file/file.c | 8 ++++---- 3 files changed, 13 insertions(+), 13 deletions(-) diff -puN fs/reiser4/as_ops.c~reiser4-mapping-tree-lock-fix fs/reiser4/as_ops.c --- linux-2.6.11/fs/reiser4/as_ops.c~reiser4-mapping-tree-lock-fix 2005-03-25 18:05:38.000000000 +0300 +++ linux-2.6.11-vs/fs/reiser4/as_ops.c 2005-03-25 18:05:38.000000000 +0300 @@ -73,14 +73,14 @@ reiser4_clear_page_dirty(struct page *pa mapping = page->mapping; BUG_ON(mapping == NULL); - read_lock_irqsave(&mapping->tree_lock, flags); + spin_lock_irqsave(&mapping->tree_lock, flags); if (TestClearPageDirty(page)) { - read_unlock_irqrestore(&mapping->tree_lock, flags); + spin_unlock_irqrestore(&mapping->tree_lock, flags); if (mapping_cap_account_dirty(mapping)) dec_page_state(nr_dirty); return; } - read_unlock_irqrestore(&mapping->tree_lock, flags); + spin_unlock_irqrestore(&mapping->tree_lock, flags); } /* as_ops->set_page_dirty() VFS method in reiser4_address_space_operations. @@ -106,7 +106,7 @@ static int reiser4_set_page_dirty(struct struct address_space *mapping = page->mapping; if (mapping) { - read_lock_irq(&mapping->tree_lock); + spin_lock_irq(&mapping->tree_lock); /* check for race with truncate */ if (page->mapping) { assert("vs-1652", page->mapping == mapping); @@ -115,7 +115,7 @@ static int reiser4_set_page_dirty(struct radix_tree_tag_set(&mapping->page_tree, page->index, PAGECACHE_TAG_REISER4_MOVED); } - read_unlock_irq(&mapping->tree_lock); + spin_unlock_irq(&mapping->tree_lock); __mark_inode_dirty(mapping->host, I_DIRTY_PAGES); } } @@ -541,13 +541,13 @@ reiser4_releasepage(struct page *page, i /* we are under memory pressure so release jnode also. */ jput(node); - write_lock_irq(&mapping->tree_lock); + spin_lock_irq(&mapping->tree_lock); /* shrink_list() + radix-tree */ if (page_count(page) == 2) { __remove_from_page_cache(page); __put_page(page); } - write_unlock_irq(&mapping->tree_lock); + spin_unlock_irq(&mapping->tree_lock); return 1; } else { diff -puN fs/reiser4/page_cache.c~reiser4-mapping-tree-lock-fix fs/reiser4/page_cache.c --- linux-2.6.11/fs/reiser4/page_cache.c~reiser4-mapping-tree-lock-fix 2005-03-25 18:05:38.000000000 +0300 +++ linux-2.6.11-vs/fs/reiser4/page_cache.c 2005-03-25 18:05:38.000000000 +0300 @@ -468,7 +468,7 @@ int set_page_dirty_internal (struct page if (mapping_cap_account_dirty(mapping)) inc_page_state(nr_dirty); - write_lock_irq(&mapping->tree_lock); + spin_lock_irq(&mapping->tree_lock); BUG_ON(page->mapping != mapping); if (tag_as_moved) { /* write_page_by_ent wants to set this bit on. FIXME: @@ -482,7 +482,7 @@ int set_page_dirty_internal (struct page &mapping->page_tree, page->index, PAGECACHE_TAG_REISER4_MOVED); } - write_unlock_irq(&mapping->tree_lock); + spin_unlock_irq(&mapping->tree_lock); __mark_inode_dirty(mapping->host, I_DIRTY_PAGES); } return 0; diff -puN fs/reiser4/plugin/file/file.c~reiser4-mapping-tree-lock-fix fs/reiser4/plugin/file/file.c --- linux-2.6.11/fs/reiser4/plugin/file/file.c~reiser4-mapping-tree-lock-fix 2005-03-25 18:05:38.000000000 +0300 +++ linux-2.6.11-vs/fs/reiser4/plugin/file/file.c 2005-03-25 18:05:38.000000000 +0300 @@ -1187,7 +1187,7 @@ sync_page_list(struct inode *inode) mapping = inode->i_mapping; from = 0; result = 0; - read_lock_irq(&mapping->tree_lock); + spin_lock_irq(&mapping->tree_lock); while (result == 0) { struct page *page; @@ -1199,17 +1199,17 @@ sync_page_list(struct inode *inode) /* page may not leave radix tree because it is protected from truncating by inode->i_sem downed by sys_fsync */ page_cache_get(page); - read_unlock_irq(&mapping->tree_lock); + spin_unlock_irq(&mapping->tree_lock); from = page->index + 1; result = sync_page(page); page_cache_release(page); - read_lock_irq(&mapping->tree_lock); + spin_lock_irq(&mapping->tree_lock); } - read_unlock_irq(&mapping->tree_lock); + spin_unlock_irq(&mapping->tree_lock); return result; } _ .