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