Re: [patch 2/4] vfs: add set_page_dirty_notag

From: Peter Zijlstra
Date: Fri Feb 13 2009 - 08:06:47 EST


On Fri, 2009-02-13 at 14:56 +0300, Edward Shishkin wrote:

> ---
> include/linux/mm.h | 1 +
> mm/page-writeback.c | 28 ++++++++++++++++++++++++++++
> 2 files changed, 29 insertions(+)
>
> --- mmotm.orig/include/linux/mm.h
> +++ mmotm/include/linux/mm.h
> @@ -841,6 +841,7 @@ int redirty_page_for_writepage(struct wr
> struct page *page);
> int set_page_dirty(struct page *page);
> int set_page_dirty_lock(struct page *page);
> +int set_page_dirty_notag(struct page *page);
> int clear_page_dirty_for_io(struct page *page);
>
> extern unsigned long move_page_tables(struct vm_area_struct *vma,
> --- mmotm.orig/mm/page-writeback.c
> +++ mmotm/mm/page-writeback.c
> @@ -1248,6 +1248,34 @@ int __set_page_dirty_nobuffers(struct pa
> EXPORT_SYMBOL(__set_page_dirty_nobuffers);
>
> /*
> + * The same as __set_page_dirty_nobuffers, but this function
> + * 1) doesn't tag the page in its radix tree;
> + * 2) makes an assumption that there is no races with truncate.
> + * 3) is not for anonymous or swap pages.
> + */
> +int set_page_dirty_notag(struct page *page)
> +{
> + struct address_space *mapping = page->mapping;
> +
> + if (!TestSetPageDirty(page)) {
> + WARN_ON_ONCE(!PagePrivate(page) && !PageUptodate(page));
> + if (mapping_cap_account_dirty(mapping)) {
> + preempt_disable();
> + __inc_zone_page_state(page, NR_FILE_DIRTY);
> + __inc_bdi_stat(mapping->backing_dev_info,
> + BDI_RECLAIMABLE);
> + task_dirty_inc(current);
> + task_io_account_write(PAGE_CACHE_SIZE);
> + preempt_enable();
> + }
> + __mark_inode_dirty(mapping->host, I_DIRTY_PAGES);
> + return 1;
> + }
> + return 0;
> +}
> +EXPORT_SYMBOL(set_page_dirty_notag);
> +

Eew, so reiser4 will totally side-step the regular vm inode writeback
paths -- or is this fixed by a more elaborate than usual
a_ops->writepages() ?
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/