
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;
 }
 

_
