Reduce dirty bitmap for nodes to the number of possible nodes The nodemask_t type can be quite large on Itanium which comes by default configured for 1024 nodes. This patch uses a bitmap instead that is sized according to the possible nodes. Signed-off-by: Christoph Lameter Index: linux-2.6.20-rc4/fs/inode.c =================================================================== --- linux-2.6.20-rc4.orig/fs/inode.c 2007-01-11 16:41:11.143167353 -0600 +++ linux-2.6.20-rc4/fs/inode.c 2007-01-11 16:43:16.231303822 -0600 @@ -1399,7 +1399,8 @@ void __init inode_init(unsigned long mem /* inode slab cache */ inode_cachep = kmem_cache_create("inode_cache", - sizeof(struct inode), + sizeof(struct inode) + + BITS_TO_LONGS(nr_node_ids), 0, (SLAB_RECLAIM_ACCOUNT|SLAB_PANIC| SLAB_MEM_SPREAD), Index: linux-2.6.20-rc4/include/linux/cpuset.h =================================================================== --- linux-2.6.20-rc4.orig/include/linux/cpuset.h 2007-01-11 16:41:11.167583560 -0600 +++ linux-2.6.20-rc4/include/linux/cpuset.h 2007-01-11 16:43:16.258649973 -0600 @@ -79,10 +79,10 @@ extern void cpuset_track_online_nodes(vo * We need macros since struct inode is not defined yet */ #define cpuset_update_dirty_nodes(__inode, __page) \ - node_set(page_to_nid(__page), (__inode)->dirty_nodes) + set_bit(page_to_nid(__page), (__inode)->dirty_nodes) #define cpuset_clear_dirty_nodes(__inode) \ - (__inode)->dirty_nodes = NODE_MASK_NONE + bitmap_zero((__inode)->dirty_nodes, nr_node_ids) #else /* !CONFIG_CPUSETS */ Index: linux-2.6.20-rc4/include/linux/fs.h =================================================================== --- linux-2.6.20-rc4.orig/include/linux/fs.h 2007-01-11 16:41:11.179303340 -0600 +++ linux-2.6.20-rc4/include/linux/fs.h 2007-01-11 16:43:16.273299698 -0600 @@ -589,7 +589,7 @@ struct inode { #endif void *i_private; /* fs or device private pointer */ #ifdef CONFIG_CPUSETS - nodemask_t dirty_nodes; /* Map of nodes with dirty pages */ + unsigned long dirty_nodes[]; /* Map of nodes with dirty pages */ #endif }; Index: linux-2.6.20-rc4/fs/fs-writeback.c =================================================================== --- linux-2.6.20-rc4.orig/fs/fs-writeback.c 2007-01-11 16:41:11.158793726 -0600 +++ linux-2.6.20-rc4/fs/fs-writeback.c 2007-01-11 16:43:16.286972774 -0600 @@ -353,8 +353,8 @@ sync_sb_inodes(struct super_block *sb, s } #ifdef CONFIG_CPUSETS - if (wbc->nodes && !nodes_intersects(inode->dirty_nodes, - *wbc->nodes)) { + if (wbc->nodes && !bitmap_intersects(inode->dirty_nodes, + nodes_addr(*wbc->nodes), nr_node_ids)) { /* No pages on nodes that we are flushing now */ list_move(&inode->i_list, &sb->s_dirty); continue; Index: linux-2.6.20-rc4/fs/adfs/super.c =================================================================== --- linux-2.6.20-rc4.orig/fs/adfs/super.c 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/fs/adfs/super.c 2007-01-11 16:52:53.769314418 -0600 @@ -240,7 +240,8 @@ static void init_once(void * foo, struct static int init_inodecache(void) { adfs_inode_cachep = kmem_cache_create("adfs_inode_cache", - sizeof(struct adfs_inode_info), + sizeof(struct adfs_inode_info) + + BITS_TO_LONGS(nr_node_ids), 0, (SLAB_RECLAIM_ACCOUNT| SLAB_MEM_SPREAD), init_once, NULL); Index: linux-2.6.20-rc4/fs/ext3/super.c =================================================================== --- linux-2.6.20-rc4.orig/fs/ext3/super.c 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/fs/ext3/super.c 2007-01-11 16:54:38.758020501 -0600 @@ -480,7 +480,8 @@ static void init_once(void * foo, struct static int init_inodecache(void) { ext3_inode_cachep = kmem_cache_create("ext3_inode_cache", - sizeof(struct ext3_inode_info), + sizeof(struct ext3_inode_info) + + BITS_TO_LONGS(nr_node_ids), 0, (SLAB_RECLAIM_ACCOUNT| SLAB_MEM_SPREAD), init_once, NULL); Index: linux-2.6.20-rc4/fs/ext4/super.c =================================================================== --- linux-2.6.20-rc4.orig/fs/ext4/super.c 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/fs/ext4/super.c 2007-01-11 16:58:02.171376180 -0600 @@ -531,7 +531,8 @@ static void init_once(void * foo, struct static int init_inodecache(void) { ext4_inode_cachep = kmem_cache_create("ext4_inode_cache", - sizeof(struct ext4_inode_info), + sizeof(struct ext4_inode_info) + + BITS_TO_LONGS(nr_node_ids), 0, (SLAB_RECLAIM_ACCOUNT| SLAB_MEM_SPREAD), init_once, NULL); Index: linux-2.6.20-rc4/fs/fat/inode.c =================================================================== --- linux-2.6.20-rc4.orig/fs/fat/inode.c 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/fs/fat/inode.c 2007-01-11 17:02:02.709076681 -0600 @@ -511,7 +511,8 @@ static void init_once(void * foo, struct static int __init fat_init_inodecache(void) { fat_inode_cachep = kmem_cache_create("fat_inode_cache", - sizeof(struct msdos_inode_info), + sizeof(struct msdos_inode_info) + + BITS_TO_LONGS(nr_node_ids), 0, (SLAB_RECLAIM_ACCOUNT| SLAB_MEM_SPREAD), init_once, NULL); Index: linux-2.6.20-rc4/fs/hugetlbfs/inode.c =================================================================== --- linux-2.6.20-rc4.orig/fs/hugetlbfs/inode.c 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/fs/hugetlbfs/inode.c 2007-01-11 17:00:13.359642088 -0600 @@ -798,7 +798,8 @@ static int __init init_hugetlbfs_fs(void struct vfsmount *vfsmount; hugetlbfs_inode_cachep = kmem_cache_create("hugetlbfs_inode_cache", - sizeof(struct hugetlbfs_inode_info), + sizeof(struct hugetlbfs_inode_info) + + BITS_TO_LONGS(nr_node_ids), 0, 0, init_once, NULL); if (hugetlbfs_inode_cachep == NULL) return -ENOMEM; Index: linux-2.6.20-rc4/fs/ncpfs/inode.c =================================================================== --- linux-2.6.20-rc4.orig/fs/ncpfs/inode.c 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/fs/ncpfs/inode.c 2007-01-11 17:03:28.535939405 -0600 @@ -70,7 +70,8 @@ static void init_once(void * foo, struct static int init_inodecache(void) { ncp_inode_cachep = kmem_cache_create("ncp_inode_cache", - sizeof(struct ncp_inode_info), + sizeof(struct ncp_inode_info) + + BITS_TO_LONGS(nr_node_ids), 0, (SLAB_RECLAIM_ACCOUNT| SLAB_MEM_SPREAD), init_once, NULL); Index: linux-2.6.20-rc4/fs/proc/inode.c =================================================================== --- linux-2.6.20-rc4.orig/fs/proc/inode.c 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/fs/proc/inode.c 2007-01-11 17:04:58.960860747 -0600 @@ -117,7 +117,8 @@ static void init_once(void * foo, struct int __init proc_init_inodecache(void) { proc_inode_cachep = kmem_cache_create("proc_inode_cache", - sizeof(struct proc_inode), + sizeof(struct proc_inode) + + BITS_TO_LONGS(nr_node_ids), 0, (SLAB_RECLAIM_ACCOUNT| SLAB_MEM_SPREAD), init_once, NULL); Index: linux-2.6.20-rc4/fs/qnx4/inode.c =================================================================== --- linux-2.6.20-rc4.orig/fs/qnx4/inode.c 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/fs/qnx4/inode.c 2007-01-11 17:06:09.602796758 -0600 @@ -544,7 +544,8 @@ static void init_once(void *foo, struct static int init_inodecache(void) { qnx4_inode_cachep = kmem_cache_create("qnx4_inode_cache", - sizeof(struct qnx4_inode_info), + sizeof(struct qnx4_inode_info) + + BITS_TO_LONGS(nr_node_ids), 0, (SLAB_RECLAIM_ACCOUNT| SLAB_MEM_SPREAD), init_once, NULL); Index: linux-2.6.20-rc4/include/linux/ext4_fs_i.h =================================================================== --- linux-2.6.20-rc4.orig/include/linux/ext4_fs_i.h 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/include/linux/ext4_fs_i.h 2007-01-11 16:56:43.931113388 -0600 @@ -149,10 +149,11 @@ struct ext4_inode_info { * by other means, so we have truncate_mutex. */ struct mutex truncate_mutex; - struct inode vfs_inode; unsigned long i_ext_generation; struct ext4_ext_cache i_cached_extent; + + struct inode vfs_inode; }; #endif /* _LINUX_EXT4_FS_I */ Index: linux-2.6.20-rc4/fs/reiserfs/super.c =================================================================== --- linux-2.6.20-rc4.orig/fs/reiserfs/super.c 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/fs/reiserfs/super.c 2007-01-11 17:07:53.330641024 -0600 @@ -525,11 +525,11 @@ static void init_once(void *foo, struct static int init_inodecache(void) { reiserfs_inode_cachep = kmem_cache_create("reiser_inode_cache", - sizeof(struct - reiserfs_inode_info), - 0, (SLAB_RECLAIM_ACCOUNT| - SLAB_MEM_SPREAD), - init_once, NULL); + sizeof(struct reiserfs_inode_info) + + BITS_TO_LONGS(nr_node_ids), + 0, (SLAB_RECLAIM_ACCOUNT| + SLAB_MEM_SPREAD), + init_once, NULL); if (reiserfs_inode_cachep == NULL) return -ENOMEM; return 0; Index: linux-2.6.20-rc4/fs/udf/super.c =================================================================== --- linux-2.6.20-rc4.orig/fs/udf/super.c 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/fs/udf/super.c 2007-01-11 17:08:54.876075965 -0600 @@ -145,7 +145,8 @@ static void init_once(void * foo, struct static int init_inodecache(void) { udf_inode_cachep = kmem_cache_create("udf_inode_cache", - sizeof(struct udf_inode_info), + sizeof(struct udf_inode_info) + + BITS_TO_LONGS(nr_node_ids), 0, (SLAB_RECLAIM_ACCOUNT| SLAB_MEM_SPREAD), init_once, NULL); Index: linux-2.6.20-rc4/fs/ufs/super.c =================================================================== --- linux-2.6.20-rc4.orig/fs/ufs/super.c 2007-01-06 23:45:51.000000000 -0600 +++ linux-2.6.20-rc4/fs/ufs/super.c 2007-01-11 17:09:50.373128732 -0600 @@ -1233,7 +1233,8 @@ static void init_once(void * foo, struct static int init_inodecache(void) { ufs_inode_cachep = kmem_cache_create("ufs_inode_cache", - sizeof(struct ufs_inode_info), + sizeof(struct ufs_inode_info) + + BITS_TO_LONGS(nr_node_ids), 0, (SLAB_RECLAIM_ACCOUNT| SLAB_MEM_SPREAD), init_once, NULL);