Index: linux-2.6.20-rc3/fs/fs-writeback.c =================================================================== --- linux-2.6.20-rc3.orig/fs/fs-writeback.c 2007-01-05 14:51:00.000000000 -0600 +++ linux-2.6.20-rc3/fs/fs-writeback.c 2007-01-05 17:21:03.285870228 -0600 @@ -226,6 +226,7 @@ __sync_single_inode(struct inode *inode, */ #ifdef CONFIG_CPUSETS inode->i_mapping->dirty_nodes = NODE_MASK_NONE; + printk("mapping=%p clean inuse clear of dirty_nodes\n", inode->i_mapping); #endif list_move(&inode->i_list, &inode_in_use); } else { @@ -234,6 +235,7 @@ __sync_single_inode(struct inode *inode, */ #ifdef CONFIG_CPUSETS inode->i_mapping->dirty_nodes = NODE_MASK_NONE; + printk("mapping=%p clean unused clear of dirty_nodes\n", inode->i_mapping); #endif list_move(&inode->i_list, &inode_unused); } @@ -370,9 +372,15 @@ sync_sb_inodes(struct super_block *sb, s break; #ifdef CONFIG_CPUSETS - if (wbc->in_cpuset && !nodes_intersects(mapping->dirty_nodes, + if (wbc->in_cpuset) { + printk(KERN_INFO "mapping=%p dirty_map=%lx allowed=%lx\n", + mapping, mapping->dirty_nodes.bits[0], + cpuset_current_mems_allowed.bits[0]); + if (!nodes_intersects(mapping->dirty_nodes, cpuset_current_mems_allowed)) - break; + break; + printk(KERN_INFO "inode has dirty nodes in cpuset\n"); + } #endif BUG_ON(inode->i_state & I_FREEING); __iget(inode); Index: linux-2.6.20-rc3/mm/page-writeback.c =================================================================== --- linux-2.6.20-rc3.orig/mm/page-writeback.c 2007-01-05 15:29:30.000000000 -0600 +++ linux-2.6.20-rc3/mm/page-writeback.c 2007-01-05 17:18:32.494446824 -0600 @@ -198,6 +198,11 @@ get_dirty_limits(struct dirty_limits *dl * We should subtract the amount of mlocked pages but we do not have * any way to account for it. */ + if (in_cpuset) + printk(KERN_INFO "dirty_limits: cpuset=%d nr_dirty=%ld nr_unstable=%ld nr_writeback=%ld " + "available_memory=%ld high_memory=%ld nr_mapped=%ld\n", + in_cpuset, dl->nr_dirty, dl->nr_unstable, dl->nr_writeback, + available_memory, high_memory, nr_mapped); unmapped_ratio = 100 - (nr_mapped * 100) / available_memory; @@ -221,6 +226,9 @@ get_dirty_limits(struct dirty_limits *dl } dl->thresh_background = background; dl->thresh_dirty = dirty; + if (in_cpuset) + printk(KERN_INFO "thresh_background=%ld thresh_dirty=%ld\n", + dl->thresh_background, dl->thresh_dirty); return in_cpuset; } @@ -864,6 +872,8 @@ int fastcall set_page_dirty(struct page #endif #ifdef CONFIG_CPUSETS node_set(page_to_nid(page), mapping->dirty_nodes); + printk(KERN_INFO "set_page_dirty mapping=%p node=%d\n", + mapping, page_to_nid(page)); #endif return (*spd)(page); }