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


_