Register ext4 filesystem as ext4dev filesystem in kernel. Signed-Off-By: Randy Dunlap Signed-Off-By: Mingming Cao --- linux-2.6.18-rc6-ming/fs/Kconfig | 75 ++++++++++++++++++++++-- linux-2.6.18-rc6-ming/fs/Makefile | 1 linux-2.6.18-rc6-ming/fs/ext4/Makefile | 10 +-- linux-2.6.18-rc6-ming/fs/ext4/acl.h | 6 - linux-2.6.18-rc6-ming/fs/ext4/file.c | 2 linux-2.6.18-rc6-ming/fs/ext4/inode.c | 2 linux-2.6.18-rc6-ming/fs/ext4/namei.c | 6 - linux-2.6.18-rc6-ming/fs/ext4/super.c | 20 +++--- linux-2.6.18-rc6-ming/fs/ext4/symlink.c | 4 - linux-2.6.18-rc6-ming/fs/ext4/xattr.c | 8 +- linux-2.6.18-rc6-ming/fs/ext4/xattr.h | 8 +- linux-2.6.18-rc6-ming/include/linux/ext4_fs_i.h | 4 - 12 files changed, 107 insertions(+), 39 deletions(-) diff -puN fs/ext4/acl.h~register-ext4dev fs/ext4/acl.h --- linux-2.6.18-rc6/fs/ext4/acl.h~register-ext4dev 2006-09-07 23:05:01.294578332 -0700 +++ linux-2.6.18-rc6-ming/fs/ext4/acl.h 2006-09-07 23:05:01.335573304 -0700 @@ -51,7 +51,7 @@ static inline int ext4_acl_count(size_t } } -#ifdef CONFIG_EXT4_FS_POSIX_ACL +#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL /* Value for inode->u.ext4_i.i_acl and inode->u.ext4_i.i_default_acl if the ACL has not been cached */ @@ -62,7 +62,7 @@ extern int ext4_permission (struct inode extern int ext4_acl_chmod (struct inode *); extern int ext4_init_acl (handle_t *, struct inode *, struct inode *); -#else /* CONFIG_EXT4_FS_POSIX_ACL */ +#else /* CONFIG_EXT4DEV_FS_POSIX_ACL */ #include #define ext4_permission NULL @@ -77,5 +77,5 @@ ext4_init_acl(handle_t *handle, struct i { return 0; } -#endif /* CONFIG_EXT4_FS_POSIX_ACL */ +#endif /* CONFIG_EXT4DEV_FS_POSIX_ACL */ diff -puN fs/ext4/file.c~register-ext4dev fs/ext4/file.c --- linux-2.6.18-rc6/fs/ext4/file.c~register-ext4dev 2006-09-07 23:05:01.297577964 -0700 +++ linux-2.6.18-rc6-ming/fs/ext4/file.c 2006-09-07 23:05:01.336573181 -0700 @@ -126,7 +126,7 @@ const struct file_operations ext4_file_o struct inode_operations ext4_file_inode_operations = { .truncate = ext4_truncate, .setattr = ext4_setattr, -#ifdef CONFIG_EXT4_FS_XATTR +#ifdef CONFIG_EXT4DEV_FS_XATTR .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ext4_listxattr, diff -puN fs/ext4/inode.c~register-ext4dev fs/ext4/inode.c --- linux-2.6.18-rc6/fs/ext4/inode.c~register-ext4dev 2006-09-07 23:05:01.301577474 -0700 +++ linux-2.6.18-rc6-ming/fs/ext4/inode.c 2006-09-07 23:05:01.341572568 -0700 @@ -2585,7 +2585,7 @@ void ext4_read_inode(struct inode * inod struct buffer_head *bh; int block; -#ifdef CONFIG_EXT4_FS_POSIX_ACL +#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL ei->i_acl = EXT4_ACL_NOT_CACHED; ei->i_default_acl = EXT4_ACL_NOT_CACHED; #endif diff -puN fs/ext4/Makefile~register-ext4dev fs/ext4/Makefile --- linux-2.6.18-rc6/fs/ext4/Makefile~register-ext4dev 2006-09-07 23:05:01.304577106 -0700 +++ linux-2.6.18-rc6-ming/fs/ext4/Makefile 2006-09-07 23:05:01.342572445 -0700 @@ -2,11 +2,11 @@ # Makefile for the linux ext4-filesystem routines. # -obj-$(CONFIG_EXT4_FS) += ext4.o +obj-$(CONFIG_EXT4DEV_FS) += ext4dev.o -ext4-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \ +ext4dev-y := balloc.o bitmap.o dir.o file.o fsync.o ialloc.o inode.o \ ioctl.o namei.o super.o symlink.o hash.o resize.o -ext4-$(CONFIG_EXT4_FS_XATTR) += xattr.o xattr_user.o xattr_trusted.o -ext4-$(CONFIG_EXT4_FS_POSIX_ACL) += acl.o -ext4-$(CONFIG_EXT4_FS_SECURITY) += xattr_security.o +ext4dev-$(CONFIG_EXT4DEV_FS_XATTR) += xattr.o xattr_user.o xattr_trusted.o +ext4dev-$(CONFIG_EXT4DEV_FS_POSIX_ACL) += acl.o +ext4dev-$(CONFIG_EXT4DEV_FS_SECURITY) += xattr_security.o diff -puN fs/ext4/namei.c~register-ext4dev fs/ext4/namei.c --- linux-2.6.18-rc6/fs/ext4/namei.c~register-ext4dev 2006-09-07 23:05:01.308576615 -0700 +++ linux-2.6.18-rc6-ming/fs/ext4/namei.c 2006-09-07 23:05:01.345572077 -0700 @@ -1700,7 +1700,7 @@ retry: err = PTR_ERR(inode); if (!IS_ERR(inode)) { init_special_inode(inode, inode->i_mode, rdev); -#ifdef CONFIG_EXT4_FS_XATTR +#ifdef CONFIG_EXT4DEV_FS_XATTR inode->i_op = &ext4_special_inode_operations; #endif err = ext4_add_nondir(handle, dentry, inode); @@ -2375,7 +2375,7 @@ struct inode_operations ext4_dir_inode_o .mknod = ext4_mknod, .rename = ext4_rename, .setattr = ext4_setattr, -#ifdef CONFIG_EXT4_FS_XATTR +#ifdef CONFIG_EXT4DEV_FS_XATTR .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ext4_listxattr, @@ -2386,7 +2386,7 @@ struct inode_operations ext4_dir_inode_o struct inode_operations ext4_special_inode_operations = { .setattr = ext4_setattr, -#ifdef CONFIG_EXT4_FS_XATTR +#ifdef CONFIG_EXT4DEV_FS_XATTR .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ext4_listxattr, diff -puN fs/ext4/super.c~register-ext4dev fs/ext4/super.c --- linux-2.6.18-rc6/fs/ext4/super.c~register-ext4dev 2006-09-07 23:05:01.312576125 -0700 +++ linux-2.6.18-rc6-ming/fs/ext4/super.c 2006-09-07 23:05:01.350571464 -0700 @@ -447,7 +447,7 @@ static struct inode *ext4_alloc_inode(st ei = kmem_cache_alloc(ext4_inode_cachep, SLAB_NOFS); if (!ei) return NULL; -#ifdef CONFIG_EXT4_FS_POSIX_ACL +#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL ei->i_acl = EXT4_ACL_NOT_CACHED; ei->i_default_acl = EXT4_ACL_NOT_CACHED; #endif @@ -468,7 +468,7 @@ static void init_once(void * foo, kmem_c if ((flags & (SLAB_CTOR_VERIFY|SLAB_CTOR_CONSTRUCTOR)) == SLAB_CTOR_CONSTRUCTOR) { INIT_LIST_HEAD(&ei->i_orphan); -#ifdef CONFIG_EXT4_FS_XATTR +#ifdef CONFIG_EXT4DEV_FS_XATTR init_rwsem(&ei->xattr_sem); #endif mutex_init(&ei->truncate_mutex); @@ -497,7 +497,7 @@ static void destroy_inodecache(void) static void ext4_clear_inode(struct inode *inode) { struct ext4_block_alloc_info *rsv = EXT4_I(inode)->i_block_alloc_info; -#ifdef CONFIG_EXT4_FS_POSIX_ACL +#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL if (EXT4_I(inode)->i_acl && EXT4_I(inode)->i_acl != EXT4_ACL_NOT_CACHED) { posix_acl_release(EXT4_I(inode)->i_acl); @@ -790,7 +790,7 @@ static int parse_options (char *options, case Opt_orlov: clear_opt (sbi->s_mount_opt, OLDALLOC); break; -#ifdef CONFIG_EXT4_FS_XATTR +#ifdef CONFIG_EXT4DEV_FS_XATTR case Opt_user_xattr: set_opt (sbi->s_mount_opt, XATTR_USER); break; @@ -803,7 +803,7 @@ static int parse_options (char *options, printk("EXT4 (no)user_xattr options not supported\n"); break; #endif -#ifdef CONFIG_EXT4_FS_POSIX_ACL +#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL case Opt_acl: set_opt(sbi->s_mount_opt, POSIX_ACL); break; @@ -2669,9 +2669,9 @@ static int ext4_get_sb(struct file_syste return get_sb_bdev(fs_type, flags, dev_name, data, ext4_fill_super, mnt); } -static struct file_system_type ext4_fs_type = { +static struct file_system_type ext4dev_fs_type = { .owner = THIS_MODULE, - .name = "ext4", + .name = "ext4dev", .get_sb = ext4_get_sb, .kill_sb = kill_block_super, .fs_flags = FS_REQUIRES_DEV, @@ -2685,7 +2685,7 @@ static int __init init_ext4_fs(void) err = init_inodecache(); if (err) goto out1; - err = register_filesystem(&ext4_fs_type); + err = register_filesystem(&ext4dev_fs_type); if (err) goto out; return 0; @@ -2698,13 +2698,13 @@ out1: static void __exit exit_ext4_fs(void) { - unregister_filesystem(&ext4_fs_type); + unregister_filesystem(&ext4dev_fs_type); destroy_inodecache(); exit_ext4_xattr(); } MODULE_AUTHOR("Remy Card, Stephen Tweedie, Andrew Morton, Andreas Dilger, Theodore Ts'o and others"); -MODULE_DESCRIPTION("Second Extended Filesystem with journaling extensions"); +MODULE_DESCRIPTION("Fourth Extended Filesystem with extents"); MODULE_LICENSE("GPL"); module_init(init_ext4_fs) module_exit(exit_ext4_fs) diff -puN fs/ext4/symlink.c~register-ext4dev fs/ext4/symlink.c --- linux-2.6.18-rc6/fs/ext4/symlink.c~register-ext4dev 2006-09-07 23:05:01.315575757 -0700 +++ linux-2.6.18-rc6-ming/fs/ext4/symlink.c 2006-09-07 23:05:01.350571464 -0700 @@ -34,7 +34,7 @@ struct inode_operations ext4_symlink_ino .readlink = generic_readlink, .follow_link = page_follow_link_light, .put_link = page_put_link, -#ifdef CONFIG_EXT4_FS_XATTR +#ifdef CONFIG_EXT4DEV_FS_XATTR .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ext4_listxattr, @@ -45,7 +45,7 @@ struct inode_operations ext4_symlink_ino struct inode_operations ext4_fast_symlink_inode_operations = { .readlink = generic_readlink, .follow_link = ext4_follow_link, -#ifdef CONFIG_EXT4_FS_XATTR +#ifdef CONFIG_EXT4DEV_FS_XATTR .setxattr = generic_setxattr, .getxattr = generic_getxattr, .listxattr = ext4_listxattr, diff -puN fs/ext4/xattr.c~register-ext4dev fs/ext4/xattr.c --- linux-2.6.18-rc6/fs/ext4/xattr.c~register-ext4dev 2006-09-07 23:05:01.319575266 -0700 +++ linux-2.6.18-rc6-ming/fs/ext4/xattr.c 2006-09-07 23:05:01.353571096 -0700 @@ -104,12 +104,12 @@ static struct mb_cache *ext4_xattr_cache static struct xattr_handler *ext4_xattr_handler_map[] = { [EXT4_XATTR_INDEX_USER] = &ext4_xattr_user_handler, -#ifdef CONFIG_EXT4_FS_POSIX_ACL +#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL [EXT4_XATTR_INDEX_POSIX_ACL_ACCESS] = &ext4_xattr_acl_access_handler, [EXT4_XATTR_INDEX_POSIX_ACL_DEFAULT] = &ext4_xattr_acl_default_handler, #endif [EXT4_XATTR_INDEX_TRUSTED] = &ext4_xattr_trusted_handler, -#ifdef CONFIG_EXT4_FS_SECURITY +#ifdef CONFIG_EXT4DEV_FS_SECURITY [EXT4_XATTR_INDEX_SECURITY] = &ext4_xattr_security_handler, #endif }; @@ -117,11 +117,11 @@ static struct xattr_handler *ext4_xattr_ struct xattr_handler *ext4_xattr_handlers[] = { &ext4_xattr_user_handler, &ext4_xattr_trusted_handler, -#ifdef CONFIG_EXT4_FS_POSIX_ACL +#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL &ext4_xattr_acl_access_handler, &ext4_xattr_acl_default_handler, #endif -#ifdef CONFIG_EXT4_FS_SECURITY +#ifdef CONFIG_EXT4DEV_FS_SECURITY &ext4_xattr_security_handler, #endif NULL diff -puN fs/ext4/xattr.h~register-ext4dev fs/ext4/xattr.h --- linux-2.6.18-rc6/fs/ext4/xattr.h~register-ext4dev 2006-09-07 23:05:01.322574898 -0700 +++ linux-2.6.18-rc6-ming/fs/ext4/xattr.h 2006-09-07 23:05:01.353571096 -0700 @@ -56,7 +56,7 @@ struct ext4_xattr_entry { #define EXT4_XATTR_SIZE(size) \ (((size) + EXT4_XATTR_ROUND) & ~EXT4_XATTR_ROUND) -# ifdef CONFIG_EXT4_FS_XATTR +# ifdef CONFIG_EXT4DEV_FS_XATTR extern struct xattr_handler ext4_xattr_user_handler; extern struct xattr_handler ext4_xattr_trusted_handler; @@ -79,7 +79,7 @@ extern void exit_ext4_xattr(void); extern struct xattr_handler *ext4_xattr_handlers[]; -# else /* CONFIG_EXT4_FS_XATTR */ +# else /* CONFIG_EXT4DEV_FS_XATTR */ static inline int ext4_xattr_get(struct inode *inode, int name_index, const char *name, @@ -131,9 +131,9 @@ exit_ext4_xattr(void) #define ext4_xattr_handlers NULL -# endif /* CONFIG_EXT4_FS_XATTR */ +# endif /* CONFIG_EXT4DEV_FS_XATTR */ -#ifdef CONFIG_EXT4_FS_SECURITY +#ifdef CONFIG_EXT4DEV_FS_SECURITY extern int ext4_init_security(handle_t *handle, struct inode *inode, struct inode *dir); #else diff -puN fs/Kconfig~register-ext4dev fs/Kconfig --- linux-2.6.18-rc6/fs/Kconfig~register-ext4dev 2006-09-07 23:05:01.325574530 -0700 +++ linux-2.6.18-rc6-ming/fs/Kconfig 2006-09-07 23:05:01.357570605 -0700 @@ -138,6 +138,73 @@ config EXT3_FS_SECURITY If you are not using a security module that requires using extended attributes for file security labels, say N. +config EXT4DEV_FS + tristate "Ext4dev/ext4 extended fs support development (EXPERIMENTAL)" + depends on EXPERIMENTAL + select JBD + help + Ext4dev is a predecessor filesystem of the next generation + extended fs ext4, based on ext3 filesystem code. It will be + renamed ext4 fs later, once ext4dev is mature and stabilized. + + Unlike the change from ext2 filesystem to ext3 filesystem, + the on-disk format of ext4dev is not the same as ext3 any more: + it is based on extent maps and it supports 48-bit physical block + numbers. These combined on-disk format changes will allow + ext4dev/ext4 to handle more than 16 TB filesystem volumes -- + a hard limit that ext3 cannot overcome without changing the + on-disk format. + + Other than extent maps and 48-bit block numbers, ext4dev also is + likely to have other new features such as persistent preallocation, + high resolution time stamps, and larger file support etc. These + features will be added to ext4dev gradually. + + To compile this file system support as a module, choose M here. The + module will be called ext4dev. Be aware, however, that the filesystem + of your root partition (the one containing the directory /) cannot + be compiled as a module, and so this could be dangerous. + + If unsure, say N. + +config EXT4DEV_FS_XATTR + bool "Ext4dev extended attributes" + depends on EXT4DEV_FS + default y + help + Extended attributes are name:value pairs associated with inodes by + the kernel or by users (see the attr(5) manual page, or visit + for details). + + If unsure, say N. + + You need this for POSIX ACL support on ext4dev/ext4. + +config EXT4DEV_FS_POSIX_ACL + bool "Ext4dev POSIX Access Control Lists" + depends on EXT4DEV_FS_XATTR + select FS_POSIX_ACL + help + POSIX Access Control Lists (ACLs) support permissions for users and + groups beyond the owner/group/world scheme. + + To learn more about Access Control Lists, visit the POSIX ACLs for + Linux website . + + If you don't know what Access Control Lists are, say N + +config EXT4DEV_FS_SECURITY + bool "Ext4dev Security Labels" + depends on EXT4DEV_FS_XATTR + help + Security labels support alternative access control models + implemented by security modules like SELinux. This option + enables an extended attribute handler for file security + labels in the ext4dev/ext4 filesystem. + + If you are not using a security module that requires using + extended attributes for file security labels, say N. + config JBD tristate help @@ -171,11 +238,11 @@ config JBD_DEBUG "echo 0 > /proc/sys/fs/jbd-debug". config FS_MBCACHE -# Meta block cache for Extended Attributes (ext2/ext3) +# Meta block cache for Extended Attributes (ext2/ext3/ext4) tristate - depends on EXT2_FS_XATTR || EXT3_FS_XATTR - default y if EXT2_FS=y || EXT3_FS=y - default m if EXT2_FS=m || EXT3_FS=m + depends on EXT2_FS_XATTR || EXT3_FS_XATTR || EXT4DEV_FS_XATTR + default y if EXT2_FS=y || EXT3_FS=y || EXT4DEV_FS=y + default m if EXT2_FS=m || EXT3_FS=m || EXT4DEV_FS=m config REISERFS_FS tristate "Reiserfs support" diff -puN fs/Makefile~register-ext4dev fs/Makefile --- linux-2.6.18-rc6/fs/Makefile~register-ext4dev 2006-09-07 23:05:01.328574162 -0700 +++ linux-2.6.18-rc6-ming/fs/Makefile 2006-09-07 23:05:01.358570483 -0700 @@ -54,6 +54,7 @@ obj-$(CONFIG_PROFILING) += dcookies.o # Do not add any filesystems before this line obj-$(CONFIG_REISERFS_FS) += reiserfs/ obj-$(CONFIG_EXT3_FS) += ext3/ # Before ext2 so root fs can be ext3 +obj-$(CONFIG_EXT4DEV_FS) += ext4/ # Before ext2 so root fs can be ext4dev obj-$(CONFIG_JBD) += jbd/ obj-$(CONFIG_EXT2_FS) += ext2/ obj-$(CONFIG_CRAMFS) += cramfs/ diff -puN include/linux/ext4_fs_i.h~register-ext4dev include/linux/ext4_fs_i.h --- linux-2.6.18-rc6/include/linux/ext4_fs_i.h~register-ext4dev 2006-09-07 23:05:01.332573672 -0700 +++ linux-2.6.18-rc6-ming/include/linux/ext4_fs_i.h 2006-09-07 23:05:01.358570483 -0700 @@ -93,7 +93,7 @@ struct ext4_inode_info { struct ext4_block_alloc_info *i_block_alloc_info; __u32 i_dir_start_lookup; -#ifdef CONFIG_EXT4_FS_XATTR +#ifdef CONFIG_EXT4DEV_FS_XATTR /* * Extended attributes can be read independently of the main file * data. Taking i_mutex even when reading would cause contention @@ -103,7 +103,7 @@ struct ext4_inode_info { */ struct rw_semaphore xattr_sem; #endif -#ifdef CONFIG_EXT4_FS_POSIX_ACL +#ifdef CONFIG_EXT4DEV_FS_POSIX_ACL struct posix_acl *i_acl; struct posix_acl *i_default_acl; #endif _