Index: linux-2.6.32-el6-beta/fs/ext4/ialloc.c =================================================================== --- linux-2.6.32-el6-beta.orig/fs/ext4/ialloc.c +++ linux-2.6.32-el6-beta/fs/ext4/ialloc.c @@ -825,11 +825,15 @@ struct inode *ext4_new_inode(handle_t *h sb = dir->i_sb; ngroups = ext4_get_groups_count(sb); trace_ext4_request_inode(dir, mode); + + sbi = EXT4_SB(sb); + if (sbi->s_max_dir_size > 0 && i_size_read(dir) >= sbi->s_max_dir_size) + return ERR_PTR(-EFBIG); + inode = new_inode(sb); if (!inode) return ERR_PTR(-ENOMEM); ei = EXT4_I(inode); - sbi = EXT4_SB(sb); if (!goal) goal = sbi->s_inode_goal; Index: linux-2.6.32-el6-beta/fs/ext4/super.c =================================================================== --- linux-2.6.32-el6-beta.orig/fs/ext4/super.c +++ linux-2.6.32-el6-beta/fs/ext4/super.c @@ -2601,6 +2601,7 @@ EXT4_RO_ATTR(lifetime_write_kbytes); EXT4_ATTR_OFFSET(inode_readahead_blks, 0644, sbi_ui_show, inode_readahead_blks_store, s_inode_readahead_blks); EXT4_RW_ATTR_SBI_UI(inode_goal, s_inode_goal); +EXT4_RW_ATTR_SBI_UI(max_dir_size, s_max_dir_size); EXT4_RW_ATTR_SBI_UI(mb_stats, s_mb_stats); EXT4_RW_ATTR_SBI_UI(mb_max_to_scan, s_mb_max_to_scan); EXT4_RW_ATTR_SBI_UI(mb_min_to_scan, s_mb_min_to_scan); @@ -2615,6 +2616,7 @@ static struct attribute *ext4_attrs[] = ATTR_LIST(lifetime_write_kbytes), ATTR_LIST(inode_readahead_blks), ATTR_LIST(inode_goal), + ATTR_LIST(max_dir_size), ATTR_LIST(mb_stats), ATTR_LIST(mb_max_to_scan), ATTR_LIST(mb_min_to_scan), Index: linux-2.6.32-el6-beta/fs/ext4/ext4.h =================================================================== --- linux-2.6.32-el6-beta.orig/fs/ext4/ext4.h +++ linux-2.6.32-el6-beta/fs/ext4/ext4.h @@ -1029,6 +1029,8 @@ struct ext4_sb_info { /* Kernel thread for multiple mount protection */ struct task_struct *s_mmp_tsk; + + unsigned long s_max_dir_size; }; static inline struct ext4_sb_info *EXT4_SB(struct super_block *sb) @@ -1353,6 +1355,12 @@ struct mmp_struct { #define EXT4_MMP_MIN_CHECK_INTERVAL 5 /* + * max directory size tunable + */ +#define EXT4_DEFAULT_MAX_DIR_SIZE 0 +#define EXT4_MAX_DIR_SIZE_NAME "max_dir_size" + +/* * Function prototypes */