diff --git a/debian/changelog b/debian/changelog index 51ddde43a..3ae59b3e2 100644 --- a/debian/changelog +++ b/debian/changelog @@ -18,6 +18,7 @@ linux-2.6 (2.6.32-14) UNRELEASED; urgency=low instead on some VIA C7 systems. (Closes: #566208) * nouveau: Fix fbcon corruption with font width not divisible by 8 (Closes: #583162) + * [amd64] ext4: Fix compat EXT4_IOC_ADD_GROUP (used by online resize) [ Bastian Blank ] * Update Xen patch. diff --git a/debian/patches/bugfix/all/ext4-Conditionally-define-compat-ioctl-numbers.patch b/debian/patches/bugfix/all/ext4-Conditionally-define-compat-ioctl-numbers.patch new file mode 100644 index 000000000..bd9225b67 --- /dev/null +++ b/debian/patches/bugfix/all/ext4-Conditionally-define-compat-ioctl-numbers.patch @@ -0,0 +1,39 @@ +From: Ben Hutchings +Date: Mon, 17 May 2010 09:00:00 -0400 +Subject: [PATCH 1/2] ext4: Conditionally define compat ioctl numbers + +commit 3ad0fa9c3af24b787158aa7d1bca18e401082e33 upstream. + +It is unnecessary, and in general impossible, to define the compat +ioctl numbers except when building the filesystem with CONFIG_COMPAT +defined. + +Signed-off-by: Ben Hutchings +Signed-off-by: "Theodore Ts'o" +--- + fs/ext4/ext4.h | 2 ++ + 1 files changed, 2 insertions(+), 0 deletions(-) + +diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h +index 4a825c1..c6d2ad0 100644 +--- a/fs/ext4/ext4.h ++++ b/fs/ext4/ext4.h +@@ -397,6 +397,7 @@ struct ext4_new_group_data { + #define EXT4_IOC_ALLOC_DA_BLKS _IO('f', 12) + #define EXT4_IOC_MOVE_EXT _IOWR('f', 15, struct move_extent) + ++#if defined(__KERNEL__) && defined(CONFIG_COMPAT) + /* + * ioctl commands in 32 bit emulation + */ +@@ -412,6 +413,7 @@ struct ext4_new_group_data { + #endif + #define EXT4_IOC32_GETVERSION_OLD FS_IOC32_GETVERSION + #define EXT4_IOC32_SETVERSION_OLD FS_IOC32_SETVERSION ++#endif + + + /* +-- +1.7.1 + diff --git a/debian/patches/bugfix/all/ext4-Fix-compat-EXT4_IOC_ADD_GROUP.patch b/debian/patches/bugfix/all/ext4-Fix-compat-EXT4_IOC_ADD_GROUP.patch new file mode 100644 index 000000000..c4915b9ed --- /dev/null +++ b/debian/patches/bugfix/all/ext4-Fix-compat-EXT4_IOC_ADD_GROUP.patch @@ -0,0 +1,97 @@ +From: Ben Hutchings +Date: Mon, 17 May 2010 10:00:00 -0400 +Subject: [PATCH 2/2] ext4: Fix compat EXT4_IOC_ADD_GROUP + +commit 53819d0448e4e89d62ed974709565d8623445afb upstream. + +struct ext4_new_group_input needs to be converted because u64 has +only 32-bit alignment on some 32-bit architectures, notably i386. + +Signed-off-by: Ben Hutchings +Signed-off-by: "Theodore Ts'o" +[bwh: Adjust context for 2.6.32] +--- + fs/ext4/ext4.h | 16 ++++++++++++++++ + fs/ext4/ioctl.c | 25 +++++++++++++++++++++++-- + 2 files changed, 39 insertions(+), 2 deletions(-) + +diff --git a/fs/ext4/ext4.h b/fs/ext4/ext4.h +index c6d2ad0..c59cade 100644 +--- a/fs/ext4/ext4.h ++++ b/fs/ext4/ext4.h +@@ -29,6 +29,9 @@ + #include + #include + #include ++#ifdef __KERNEL__ ++#include ++#endif + + /* + * The fourth extended filesystem constants/structures +@@ -335,6 +338,18 @@ struct ext4_new_group_input { + __u16 unused; + }; + ++#if defined(__KERNEL__) && defined(CONFIG_COMPAT) ++struct compat_ext4_new_group_input { ++ u32 group; ++ compat_u64 block_bitmap; ++ compat_u64 inode_bitmap; ++ compat_u64 inode_table; ++ u32 blocks_count; ++ u16 reserved_blocks; ++ u16 unused; ++}; ++#endif ++ + /* The struct ext4_new_group_input in kernel space, with free_blocks_count */ + struct ext4_new_group_data { + __u32 group; +@@ -408,6 +423,7 @@ struct ext4_new_group_data { + #define EXT4_IOC32_GETRSVSZ _IOR('f', 5, int) + #define EXT4_IOC32_SETRSVSZ _IOW('f', 6, int) + #define EXT4_IOC32_GROUP_EXTEND _IOW('f', 7, unsigned int) ++#define EXT4_IOC32_GROUP_ADD _IOW('f', 8, struct compat_ext4_new_group_input) + #ifdef CONFIG_JBD2_DEBUG + #define EXT4_IOC32_WAIT_FOR_READONLY _IOR('f', 99, int) + #endif +diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c +index b63d193..42e6809 100644 +--- a/fs/ext4/ioctl.c ++++ b/fs/ext4/ioctl.c +@@ -363,8 +363,29 @@ long ext4_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) + case EXT4_IOC32_SETRSVSZ: + cmd = EXT4_IOC_SETRSVSZ; + break; +- case EXT4_IOC_GROUP_ADD: +- break; ++ case EXT4_IOC32_GROUP_ADD: { ++ struct compat_ext4_new_group_input __user *uinput; ++ struct ext4_new_group_input input; ++ mm_segment_t old_fs; ++ int err; ++ ++ uinput = compat_ptr(arg); ++ err = get_user(input.group, &uinput->group); ++ err |= get_user(input.block_bitmap, &uinput->block_bitmap); ++ err |= get_user(input.inode_bitmap, &uinput->inode_bitmap); ++ err |= get_user(input.inode_table, &uinput->inode_table); ++ err |= get_user(input.blocks_count, &uinput->blocks_count); ++ err |= get_user(input.reserved_blocks, ++ &uinput->reserved_blocks); ++ if (err) ++ return -EFAULT; ++ old_fs = get_fs(); ++ set_fs(KERNEL_DS); ++ err = ext4_ioctl(file, EXT4_IOC_GROUP_ADD, ++ (unsigned long) &input); ++ set_fs(old_fs); ++ return err; ++ } + default: + return -ENOIOCTLCMD; + } +-- +1.7.1 + diff --git a/debian/patches/series/14 b/debian/patches/series/14 index c2c9e5762..3250c16fa 100644 --- a/debian/patches/series/14 +++ b/debian/patches/series/14 @@ -16,3 +16,5 @@ + bugfix/all/drm-i915-disable-fbc-on-915gm-and-945gm.patch + bugfix/all/drm-nouveau-use-ALIGN-instead-of-open-coding-it.patch + bugfix/all/drm-nouveau-Fix-fbcon-corruption-with-font-width-not.patch ++ bugfix/all/ext4-Conditionally-define-compat-ioctl-numbers.patch ++ bugfix/all/ext4-Fix-compat-EXT4_IOC_ADD_GROUP.patch