]> err.no Git - linux-2.6/blobdiff - mm/page-writeback.c
mm: use lockless radix-tree probe
[linux-2.6] / mm / page-writeback.c
index 63512a9ed57e7df17bec12f4dff1685f8944042a..2adb89959885e77e228097a6405ffd929b2b4f68 100644 (file)
@@ -274,9 +274,9 @@ static void balance_dirty_pages(struct address_space *mapping)
                pdflush_operation(background_writeout, 0);
 }
 
-void set_page_dirty_balance(struct page *page)
+void set_page_dirty_balance(struct page *page, int page_mkwrite)
 {
-       if (set_page_dirty(page)) {
+       if (set_page_dirty(page) || page_mkwrite) {
                struct address_space *mapping = page_mapping(page);
 
                if (mapping)
@@ -1022,17 +1022,15 @@ int test_set_page_writeback(struct page *page)
 EXPORT_SYMBOL(test_set_page_writeback);
 
 /*
- * Return true if any of the pages in the mapping are marged with the
+ * Return true if any of the pages in the mapping are marked with the
  * passed tag.
  */
 int mapping_tagged(struct address_space *mapping, int tag)
 {
-       unsigned long flags;
        int ret;
-
-       read_lock_irqsave(&mapping->tree_lock, flags);
+       rcu_read_lock();
        ret = radix_tree_tagged(&mapping->page_tree, tag);
-       read_unlock_irqrestore(&mapping->tree_lock, flags);
+       rcu_read_unlock();
        return ret;
 }
 EXPORT_SYMBOL(mapping_tagged);