From: Andrew Morton Cc: Nick Piggin Signed-off-by: Andrew Morton --- fs/reiser4/plugin/file/cryptcompress.c | 8 +++---- fs/reiser4/plugin/file/file.c | 26 +++++++++++------------ 2 files changed, 17 insertions(+), 17 deletions(-) diff -puN fs/reiser4/plugin/file/cryptcompress.c~reiser4-tree_lock-fixes-fix fs/reiser4/plugin/file/cryptcompress.c --- a/fs/reiser4/plugin/file/cryptcompress.c~reiser4-tree_lock-fixes-fix +++ a/fs/reiser4/plugin/file/cryptcompress.c @@ -3435,7 +3435,7 @@ static int find_anon_page_cluster(struct { int i = 0; int found; - write_lock_irq(&mapping->tree_lock); + spin_lock_irq(&mapping->tree_lock); do { /* looking for one page */ found = radix_tree_gang_lookup_tag(&mapping->page_tree, @@ -3457,7 +3457,7 @@ static int find_anon_page_cluster(struct if (last_page_in_cluster(pages[i++])) break; } while (1); - write_unlock_irq(&mapping->tree_lock); + spin_unlock_irq(&mapping->tree_lock); return i; } @@ -3532,10 +3532,10 @@ static int capture_anon_pages(struct add static int cryptcompress_inode_has_anon_pages(struct inode *inode) { int result; - read_lock_irq(&inode->i_mapping->tree_lock); + spin_lock_irq(&inode->i_mapping->tree_lock); result = radix_tree_tagged(&inode->i_mapping->page_tree, PAGECACHE_TAG_REISER4_MOVED); - read_unlock_irq(&inode->i_mapping->tree_lock); + spin_unlock_irq(&inode->i_mapping->tree_lock); return result; } diff -puN fs/reiser4/plugin/file/file.c~reiser4-tree_lock-fixes-fix fs/reiser4/plugin/file/file.c --- a/fs/reiser4/plugin/file/file.c~reiser4-tree_lock-fixes-fix +++ a/fs/reiser4/plugin/file/file.c @@ -848,9 +848,9 @@ static int has_anonymous_pages(struct in { int result; - read_lock_irq(&inode->i_mapping->tree_lock); + spin_lock_irq(&inode->i_mapping->tree_lock); result = radix_tree_tagged(&inode->i_mapping->page_tree, PAGECACHE_TAG_REISER4_MOVED); - read_unlock_irq(&inode->i_mapping->tree_lock); + spin_unlock_irq(&inode->i_mapping->tree_lock); return result; } @@ -994,7 +994,7 @@ capture_anonymous_pages(struct address_s nr = 0; /* find pages tagged MOVED */ - write_lock_irq(&mapping->tree_lock); + spin_lock_irq(&mapping->tree_lock); pvec.nr = radix_tree_gang_lookup_tag(&mapping->page_tree, (void **)pvec.pages, *index, count, PAGECACHE_TAG_REISER4_MOVED); @@ -1003,7 +1003,7 @@ capture_anonymous_pages(struct address_s * there are no pages tagged MOVED in mapping->page_tree * starting from *index */ - write_unlock_irq(&mapping->tree_lock); + spin_unlock_irq(&mapping->tree_lock); *index = (pgoff_t)-1; return 0; } @@ -1014,7 +1014,7 @@ capture_anonymous_pages(struct address_s radix_tree_tag_clear(&mapping->page_tree, pvec.pages[i]->index, PAGECACHE_TAG_REISER4_MOVED); } - write_unlock_irq(&mapping->tree_lock); + spin_unlock_irq(&mapping->tree_lock); *index = pvec.pages[i - 1]->index + 1; @@ -1039,13 +1039,13 @@ capture_anonymous_pages(struct address_s * set MOVED tag to all pages which left not * captured */ - write_lock_irq(&mapping->tree_lock); + spin_lock_irq(&mapping->tree_lock); for (; i < pagevec_count(&pvec); i ++) { radix_tree_tag_set(&mapping->page_tree, pvec.pages[i]->index, PAGECACHE_TAG_REISER4_MOVED); } - write_unlock_irq(&mapping->tree_lock); + spin_unlock_irq(&mapping->tree_lock); pagevec_release(&pvec); return result; @@ -1055,11 +1055,11 @@ capture_anonymous_pages(struct address_s * 0 for Writeback-ed page. Set MOVED tag on * that page */ - write_lock_irq(&mapping->tree_lock); + spin_lock_irq(&mapping->tree_lock); radix_tree_tag_set(&mapping->page_tree, pvec.pages[i]->index, PAGECACHE_TAG_REISER4_MOVED); - write_unlock_irq(&mapping->tree_lock); + spin_unlock_irq(&mapping->tree_lock); if (i == 0) *index = pvec.pages[0]->index; else @@ -1135,7 +1135,7 @@ static int sync_page_list(struct 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; @@ -1150,17 +1150,17 @@ static int sync_page_list(struct inode * * truncating by inode->i_mutex locked 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; } _