lkml.org 
[lkml]   [2009]   [Feb]   [13]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
/
Date
From
SubjectRe: [patch 2/4] vfs: add set_page_dirty_notag
Peter Zijlstra wrote:
> 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() ?
>
The second.

reiser4_writepages() catches the anonymous (tagged)
pages, captures them mandatory, then commits all atoms
of the file.


\
 
 \ /
  Last update: 2009-02-13 14:59    [W:0.085 / U:0.488 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site