Index: linux-2.6.20-rc3/fs/fs-writeback.c =================================================================== --- linux-2.6.20-rc3.orig/fs/fs-writeback.c 2007-01-05 20:08:38.000000000 -0600 +++ linux-2.6.20-rc3/fs/fs-writeback.c 2007-01-05 21:44:25.552237271 -0600 @@ -319,6 +319,7 @@ sync_sb_inodes(struct super_block *sb, s struct address_space *mapping = inode->i_mapping; struct backing_dev_info *bdi = mapping->backing_dev_info; long pages_skipped; + unsigned long pages; if (!bdi_cap_writeback_dirty(bdi)) { list_move(&inode->i_list, &sb->s_dirty); @@ -366,18 +367,34 @@ sync_sb_inodes(struct super_block *sb, s break; #ifdef CONFIG_CPUSETS - if (wbc->in_cpuset && !nodes_intersects(mapping->dirty_nodes, - cpuset_current_mems_allowed)) - break; + 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)) { + printk(KERN_INFO "skipping inode because there were no dirty pages on the nodes\n"); + break; + } + printk(KERN_INFO "inode has dirty nodes in cpuset\n"); + } #endif BUG_ON(inode->i_state & I_FREEING); __iget(inode); pages_skipped = wbc->pages_skipped; + pages = wbc->nr_to_write; __writeback_single_inode(inode, wbc); if (wbc->sync_mode == WB_SYNC_HOLD) { inode->dirtied_when = jiffies; list_move(&inode->i_list, &sb->s_dirty); } + pages -= wbc->nr_to_write; + if (pages > 1) { + printk(KERN_INFO "Wrote %ld pages from mapping=%p\n", pages, mapping); + if (!wbc->in_cpuset) + dump_stack(); + } + if (current_is_pdflush()) writeback_release(bdi); if (wbc->pages_skipped != pages_skipped) { Index: linux-2.6.20-rc3/drivers/base/node.c =================================================================== --- linux-2.6.20-rc3.orig/drivers/base/node.c 2006-12-31 18:53:20.000000000 -0600 +++ linux-2.6.20-rc3/drivers/base/node.c 2007-01-05 21:21:34.958916814 -0600 @@ -70,7 +70,8 @@ static ssize_t node_read_meminfo(struct "Node %d Bounce: %8lu kB\n" "Node %d Slab: %8lu kB\n" "Node %d SReclaimable: %8lu kB\n" - "Node %d SUnreclaim: %8lu kB\n", + "Node %d SUnreclaim: %8lu kB\n" + "Node %d Unreclaimabl: %8lu kB\n", nid, K(i.totalram), nid, K(i.freeram), nid, K(i.totalram - i.freeram), @@ -93,7 +94,8 @@ static ssize_t node_read_meminfo(struct nid, K(node_page_state(nid, NR_SLAB_RECLAIMABLE) + node_page_state(nid, NR_SLAB_UNRECLAIMABLE)), nid, K(node_page_state(nid, NR_SLAB_RECLAIMABLE)), - nid, K(node_page_state(nid, NR_SLAB_UNRECLAIMABLE))); + nid, K(node_page_state(nid, NR_SLAB_UNRECLAIMABLE)), + nid, K(node_page_state(nid, NR_UNRECLAIMABLE))); n += hugetlb_report_node_meminfo(nid, buf + n); return n; }