[PATCH 17/23] mm: count reclaimable pages per BDI
Count per BDI reclaimable pages; nr_reclaimable = nr_dirty + nr_unstable. Signed-off-by: Peter Zijlstra <[EMAIL PROTECTED]> --- fs/buffer.c |2 ++ fs/nfs/write.c |7 +++ include/linux/backing-dev.h |1 + mm/page-writeback.c |4 mm/truncate.c |2 ++ 5 files changed, 16 insertions(+) Index: linux-2.6/fs/buffer.c === --- linux-2.6.orig/fs/buffer.c +++ linux-2.6/fs/buffer.c @@ -697,6 +697,8 @@ static int __set_page_dirty(struct page if (mapping_cap_account_dirty(mapping)) { __inc_zone_page_state(page, NR_FILE_DIRTY); + __inc_bdi_stat(mapping->backing_dev_info, + BDI_RECLAIMABLE); task_io_account_write(PAGE_CACHE_SIZE); } radix_tree_tag_set(>page_tree, Index: linux-2.6/mm/page-writeback.c === --- linux-2.6.orig/mm/page-writeback.c +++ linux-2.6/mm/page-writeback.c @@ -827,6 +827,8 @@ int __set_page_dirty_nobuffers(struct pa WARN_ON_ONCE(!PagePrivate(page) && !PageUptodate(page)); if (mapping_cap_account_dirty(mapping)) { __inc_zone_page_state(page, NR_FILE_DIRTY); + __inc_bdi_stat(mapping->backing_dev_info, + BDI_RECLAIMABLE); task_io_account_write(PAGE_CACHE_SIZE); } radix_tree_tag_set(>page_tree, @@ -961,6 +963,8 @@ int clear_page_dirty_for_io(struct page */ if (TestClearPageDirty(page)) { dec_zone_page_state(page, NR_FILE_DIRTY); + dec_bdi_stat(mapping->backing_dev_info, + BDI_RECLAIMABLE); return 1; } return 0; Index: linux-2.6/mm/truncate.c === --- linux-2.6.orig/mm/truncate.c +++ linux-2.6/mm/truncate.c @@ -72,6 +72,8 @@ void cancel_dirty_page(struct page *page struct address_space *mapping = page->mapping; if (mapping && mapping_cap_account_dirty(mapping)) { dec_zone_page_state(page, NR_FILE_DIRTY); + dec_bdi_stat(mapping->backing_dev_info, + BDI_RECLAIMABLE); if (account_size) task_io_account_cancelled_write(account_size); } Index: linux-2.6/fs/nfs/write.c === --- linux-2.6.orig/fs/nfs/write.c +++ linux-2.6/fs/nfs/write.c @@ -464,6 +464,7 @@ nfs_mark_request_commit(struct nfs_page NFS_PAGE_TAG_COMMIT); spin_unlock(>i_lock); inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); + inc_bdi_stat(req->wb_page->mapping->backing_dev_info, BDI_RECLAIMABLE); __mark_inode_dirty(inode, I_DIRTY_DATASYNC); } @@ -550,6 +551,8 @@ static void nfs_cancel_commit_list(struc while(!list_empty(head)) { req = nfs_list_entry(head->next); dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req->wb_page->mapping->backing_dev_info, + BDI_RECLAIMABLE); nfs_list_remove_request(req); clear_bit(PG_NEED_COMMIT, &(req)->wb_flags); nfs_inode_remove_request(req); @@ -1210,6 +1213,8 @@ nfs_commit_list(struct inode *inode, str nfs_list_remove_request(req); nfs_mark_request_commit(req); dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req->wb_page->mapping->backing_dev_info, + BDI_RECLAIMABLE); nfs_clear_page_tag_locked(req); } return -ENOMEM; @@ -1235,6 +1240,8 @@ static void nfs_commit_done(struct rpc_t nfs_list_remove_request(req); clear_bit(PG_NEED_COMMIT, &(req)->wb_flags); dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req->wb_page->mapping->backing_dev_info, + BDI_RECLAIMABLE); dprintk("NFS: commit (%s/%Ld [EMAIL PROTECTED])", req->wb_context->path.dentry->d_inode->i_sb->s_id, Index: linux-2.6/include/linux/backing-dev.h === --- linux-2.6.orig/include/linux/backing-dev.h +++ linux-2.6/include/linux/backing-dev.h @@ -27,6 +27,7 @@ enum bdi_state { typedef int (congested_fn)(void *, int); enum
[PATCH 17/23] mm: count reclaimable pages per BDI
Count per BDI reclaimable pages; nr_reclaimable = nr_dirty + nr_unstable. Signed-off-by: Peter Zijlstra [EMAIL PROTECTED] --- fs/buffer.c |2 ++ fs/nfs/write.c |7 +++ include/linux/backing-dev.h |1 + mm/page-writeback.c |4 mm/truncate.c |2 ++ 5 files changed, 16 insertions(+) Index: linux-2.6/fs/buffer.c === --- linux-2.6.orig/fs/buffer.c +++ linux-2.6/fs/buffer.c @@ -697,6 +697,8 @@ static int __set_page_dirty(struct page if (mapping_cap_account_dirty(mapping)) { __inc_zone_page_state(page, NR_FILE_DIRTY); + __inc_bdi_stat(mapping-backing_dev_info, + BDI_RECLAIMABLE); task_io_account_write(PAGE_CACHE_SIZE); } radix_tree_tag_set(mapping-page_tree, Index: linux-2.6/mm/page-writeback.c === --- linux-2.6.orig/mm/page-writeback.c +++ linux-2.6/mm/page-writeback.c @@ -827,6 +827,8 @@ int __set_page_dirty_nobuffers(struct pa WARN_ON_ONCE(!PagePrivate(page) !PageUptodate(page)); if (mapping_cap_account_dirty(mapping)) { __inc_zone_page_state(page, NR_FILE_DIRTY); + __inc_bdi_stat(mapping-backing_dev_info, + BDI_RECLAIMABLE); task_io_account_write(PAGE_CACHE_SIZE); } radix_tree_tag_set(mapping-page_tree, @@ -961,6 +963,8 @@ int clear_page_dirty_for_io(struct page */ if (TestClearPageDirty(page)) { dec_zone_page_state(page, NR_FILE_DIRTY); + dec_bdi_stat(mapping-backing_dev_info, + BDI_RECLAIMABLE); return 1; } return 0; Index: linux-2.6/mm/truncate.c === --- linux-2.6.orig/mm/truncate.c +++ linux-2.6/mm/truncate.c @@ -72,6 +72,8 @@ void cancel_dirty_page(struct page *page struct address_space *mapping = page-mapping; if (mapping mapping_cap_account_dirty(mapping)) { dec_zone_page_state(page, NR_FILE_DIRTY); + dec_bdi_stat(mapping-backing_dev_info, + BDI_RECLAIMABLE); if (account_size) task_io_account_cancelled_write(account_size); } Index: linux-2.6/fs/nfs/write.c === --- linux-2.6.orig/fs/nfs/write.c +++ linux-2.6/fs/nfs/write.c @@ -464,6 +464,7 @@ nfs_mark_request_commit(struct nfs_page NFS_PAGE_TAG_COMMIT); spin_unlock(inode-i_lock); inc_zone_page_state(req-wb_page, NR_UNSTABLE_NFS); + inc_bdi_stat(req-wb_page-mapping-backing_dev_info, BDI_RECLAIMABLE); __mark_inode_dirty(inode, I_DIRTY_DATASYNC); } @@ -550,6 +551,8 @@ static void nfs_cancel_commit_list(struc while(!list_empty(head)) { req = nfs_list_entry(head-next); dec_zone_page_state(req-wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req-wb_page-mapping-backing_dev_info, + BDI_RECLAIMABLE); nfs_list_remove_request(req); clear_bit(PG_NEED_COMMIT, (req)-wb_flags); nfs_inode_remove_request(req); @@ -1210,6 +1213,8 @@ nfs_commit_list(struct inode *inode, str nfs_list_remove_request(req); nfs_mark_request_commit(req); dec_zone_page_state(req-wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req-wb_page-mapping-backing_dev_info, + BDI_RECLAIMABLE); nfs_clear_page_tag_locked(req); } return -ENOMEM; @@ -1235,6 +1240,8 @@ static void nfs_commit_done(struct rpc_t nfs_list_remove_request(req); clear_bit(PG_NEED_COMMIT, (req)-wb_flags); dec_zone_page_state(req-wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req-wb_page-mapping-backing_dev_info, + BDI_RECLAIMABLE); dprintk(NFS: commit (%s/%Ld [EMAIL PROTECTED]), req-wb_context-path.dentry-d_inode-i_sb-s_id, Index: linux-2.6/include/linux/backing-dev.h === --- linux-2.6.orig/include/linux/backing-dev.h +++ linux-2.6/include/linux/backing-dev.h @@ -27,6 +27,7 @@ enum bdi_state { typedef int (congested_fn)(void *, int); enum bdi_stat_item { +
Re: [PATCH 17/23] mm: count reclaimable pages per BDI
On Thu, Aug 16, 2007 at 09:45:42AM +0200, Peter Zijlstra wrote: ... > Index: linux-2.6/include/linux/backing-dev.h > === > --- linux-2.6.orig/include/linux/backing-dev.h > +++ linux-2.6/include/linux/backing-dev.h > @@ -27,6 +27,7 @@ enum bdi_state { > typedef int (congested_fn)(void *, int); > > enum bdi_stat_item { > + BDI_RECLAIMABLE, > NR_BDI_STAT_ITEMS > }; Ok, I see. Ignore my comment on 16/xx :) Jeff. -- Keyboard not found! Press F1 to enter Setup - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 17/23] mm: count reclaimable pages per BDI
On Thu, Aug 16, 2007 at 09:45:42AM +0200, Peter Zijlstra wrote: ... Index: linux-2.6/include/linux/backing-dev.h === --- linux-2.6.orig/include/linux/backing-dev.h +++ linux-2.6/include/linux/backing-dev.h @@ -27,6 +27,7 @@ enum bdi_state { typedef int (congested_fn)(void *, int); enum bdi_stat_item { + BDI_RECLAIMABLE, NR_BDI_STAT_ITEMS }; Ok, I see. Ignore my comment on 16/xx :) Jeff. -- Keyboard not found! Press F1 to enter Setup - To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
[PATCH 17/23] mm: count reclaimable pages per BDI
Count per BDI reclaimable pages; nr_reclaimable = nr_dirty + nr_unstable. Signed-off-by: Peter Zijlstra <[EMAIL PROTECTED]> --- fs/buffer.c |2 ++ fs/nfs/write.c |7 +++ include/linux/backing-dev.h |1 + mm/page-writeback.c |4 mm/truncate.c |2 ++ 5 files changed, 16 insertions(+) Index: linux-2.6/fs/buffer.c === --- linux-2.6.orig/fs/buffer.c +++ linux-2.6/fs/buffer.c @@ -697,6 +697,8 @@ static int __set_page_dirty(struct page if (mapping_cap_account_dirty(mapping)) { __inc_zone_page_state(page, NR_FILE_DIRTY); + __inc_bdi_stat(mapping->backing_dev_info, + BDI_RECLAIMABLE); task_io_account_write(PAGE_CACHE_SIZE); } radix_tree_tag_set(>page_tree, Index: linux-2.6/mm/page-writeback.c === --- linux-2.6.orig/mm/page-writeback.c +++ linux-2.6/mm/page-writeback.c @@ -827,6 +827,8 @@ int __set_page_dirty_nobuffers(struct pa WARN_ON_ONCE(!PagePrivate(page) && !PageUptodate(page)); if (mapping_cap_account_dirty(mapping)) { __inc_zone_page_state(page, NR_FILE_DIRTY); + __inc_bdi_stat(mapping->backing_dev_info, + BDI_RECLAIMABLE); task_io_account_write(PAGE_CACHE_SIZE); } radix_tree_tag_set(>page_tree, @@ -961,6 +963,8 @@ int clear_page_dirty_for_io(struct page */ if (TestClearPageDirty(page)) { dec_zone_page_state(page, NR_FILE_DIRTY); + dec_bdi_stat(mapping->backing_dev_info, + BDI_RECLAIMABLE); return 1; } return 0; Index: linux-2.6/mm/truncate.c === --- linux-2.6.orig/mm/truncate.c +++ linux-2.6/mm/truncate.c @@ -72,6 +72,8 @@ void cancel_dirty_page(struct page *page struct address_space *mapping = page->mapping; if (mapping && mapping_cap_account_dirty(mapping)) { dec_zone_page_state(page, NR_FILE_DIRTY); + dec_bdi_stat(mapping->backing_dev_info, + BDI_RECLAIMABLE); if (account_size) task_io_account_cancelled_write(account_size); } Index: linux-2.6/fs/nfs/write.c === --- linux-2.6.orig/fs/nfs/write.c +++ linux-2.6/fs/nfs/write.c @@ -464,6 +464,7 @@ nfs_mark_request_commit(struct nfs_page NFS_PAGE_TAG_COMMIT); spin_unlock(>i_lock); inc_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); + inc_bdi_stat(req->wb_page->mapping->backing_dev_info, BDI_RECLAIMABLE); __mark_inode_dirty(inode, I_DIRTY_DATASYNC); } @@ -550,6 +551,8 @@ static void nfs_cancel_commit_list(struc while(!list_empty(head)) { req = nfs_list_entry(head->next); dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req->wb_page->mapping->backing_dev_info, + BDI_RECLAIMABLE); nfs_list_remove_request(req); clear_bit(PG_NEED_COMMIT, &(req)->wb_flags); nfs_inode_remove_request(req); @@ -1210,6 +1213,8 @@ nfs_commit_list(struct inode *inode, str nfs_list_remove_request(req); nfs_mark_request_commit(req); dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req->wb_page->mapping->backing_dev_info, + BDI_RECLAIMABLE); nfs_clear_page_tag_locked(req); } return -ENOMEM; @@ -1235,6 +1240,8 @@ static void nfs_commit_done(struct rpc_t nfs_list_remove_request(req); clear_bit(PG_NEED_COMMIT, &(req)->wb_flags); dec_zone_page_state(req->wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req->wb_page->mapping->backing_dev_info, + BDI_RECLAIMABLE); dprintk("NFS: commit (%s/%Ld [EMAIL PROTECTED])", req->wb_context->path.dentry->d_inode->i_sb->s_id, Index: linux-2.6/include/linux/backing-dev.h === --- linux-2.6.orig/include/linux/backing-dev.h +++ linux-2.6/include/linux/backing-dev.h @@ -27,6 +27,7 @@ enum bdi_state { typedef int (congested_fn)(void *, int); enum
[PATCH 17/23] mm: count reclaimable pages per BDI
Count per BDI reclaimable pages; nr_reclaimable = nr_dirty + nr_unstable. Signed-off-by: Peter Zijlstra [EMAIL PROTECTED] --- fs/buffer.c |2 ++ fs/nfs/write.c |7 +++ include/linux/backing-dev.h |1 + mm/page-writeback.c |4 mm/truncate.c |2 ++ 5 files changed, 16 insertions(+) Index: linux-2.6/fs/buffer.c === --- linux-2.6.orig/fs/buffer.c +++ linux-2.6/fs/buffer.c @@ -697,6 +697,8 @@ static int __set_page_dirty(struct page if (mapping_cap_account_dirty(mapping)) { __inc_zone_page_state(page, NR_FILE_DIRTY); + __inc_bdi_stat(mapping-backing_dev_info, + BDI_RECLAIMABLE); task_io_account_write(PAGE_CACHE_SIZE); } radix_tree_tag_set(mapping-page_tree, Index: linux-2.6/mm/page-writeback.c === --- linux-2.6.orig/mm/page-writeback.c +++ linux-2.6/mm/page-writeback.c @@ -827,6 +827,8 @@ int __set_page_dirty_nobuffers(struct pa WARN_ON_ONCE(!PagePrivate(page) !PageUptodate(page)); if (mapping_cap_account_dirty(mapping)) { __inc_zone_page_state(page, NR_FILE_DIRTY); + __inc_bdi_stat(mapping-backing_dev_info, + BDI_RECLAIMABLE); task_io_account_write(PAGE_CACHE_SIZE); } radix_tree_tag_set(mapping-page_tree, @@ -961,6 +963,8 @@ int clear_page_dirty_for_io(struct page */ if (TestClearPageDirty(page)) { dec_zone_page_state(page, NR_FILE_DIRTY); + dec_bdi_stat(mapping-backing_dev_info, + BDI_RECLAIMABLE); return 1; } return 0; Index: linux-2.6/mm/truncate.c === --- linux-2.6.orig/mm/truncate.c +++ linux-2.6/mm/truncate.c @@ -72,6 +72,8 @@ void cancel_dirty_page(struct page *page struct address_space *mapping = page-mapping; if (mapping mapping_cap_account_dirty(mapping)) { dec_zone_page_state(page, NR_FILE_DIRTY); + dec_bdi_stat(mapping-backing_dev_info, + BDI_RECLAIMABLE); if (account_size) task_io_account_cancelled_write(account_size); } Index: linux-2.6/fs/nfs/write.c === --- linux-2.6.orig/fs/nfs/write.c +++ linux-2.6/fs/nfs/write.c @@ -464,6 +464,7 @@ nfs_mark_request_commit(struct nfs_page NFS_PAGE_TAG_COMMIT); spin_unlock(inode-i_lock); inc_zone_page_state(req-wb_page, NR_UNSTABLE_NFS); + inc_bdi_stat(req-wb_page-mapping-backing_dev_info, BDI_RECLAIMABLE); __mark_inode_dirty(inode, I_DIRTY_DATASYNC); } @@ -550,6 +551,8 @@ static void nfs_cancel_commit_list(struc while(!list_empty(head)) { req = nfs_list_entry(head-next); dec_zone_page_state(req-wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req-wb_page-mapping-backing_dev_info, + BDI_RECLAIMABLE); nfs_list_remove_request(req); clear_bit(PG_NEED_COMMIT, (req)-wb_flags); nfs_inode_remove_request(req); @@ -1210,6 +1213,8 @@ nfs_commit_list(struct inode *inode, str nfs_list_remove_request(req); nfs_mark_request_commit(req); dec_zone_page_state(req-wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req-wb_page-mapping-backing_dev_info, + BDI_RECLAIMABLE); nfs_clear_page_tag_locked(req); } return -ENOMEM; @@ -1235,6 +1240,8 @@ static void nfs_commit_done(struct rpc_t nfs_list_remove_request(req); clear_bit(PG_NEED_COMMIT, (req)-wb_flags); dec_zone_page_state(req-wb_page, NR_UNSTABLE_NFS); + dec_bdi_stat(req-wb_page-mapping-backing_dev_info, + BDI_RECLAIMABLE); dprintk(NFS: commit (%s/%Ld [EMAIL PROTECTED]), req-wb_context-path.dentry-d_inode-i_sb-s_id, Index: linux-2.6/include/linux/backing-dev.h === --- linux-2.6.orig/include/linux/backing-dev.h +++ linux-2.6/include/linux/backing-dev.h @@ -27,6 +27,7 @@ enum bdi_state { typedef int (congested_fn)(void *, int); enum bdi_stat_item { +