| From 10aed68814073f11313823d83d02408a4b72fa78 Mon Sep 17 00:00:00 2001 |
| From: Christian Borntraeger <borntraeger@de.ibm.com> |
| Date: Sat, 15 May 2010 00:00:00 -0400 |
| Subject: [PATCH] ext4: allow defrag (EXT4_IOC_MOVE_EXT) in 32bit compat mode |
| |
| commit b684b2ee9409f2890a8b3aea98525bbe5f84e276 upstream. |
| |
| I have an x86_64 kernel with i386 userspace. e4defrag fails on the |
| EXT4_IOC_MOVE_EXT ioctl because it is not wired up for the compat |
| case. It seems that struct move_extent is compat save, only types |
| with fixed widths are used: |
| { |
| __u32 reserved; /* should be zero */ |
| __u32 donor_fd; /* donor file descriptor */ |
| __u64 orig_start; /* logical start offset in block for orig */ |
| __u64 donor_start; /* logical start offset in block for donor */ |
| __u64 len; /* block length to be moved */ |
| __u64 moved_len; /* moved block length */ |
| }; |
| |
| Lets just wire up EXT4_IOC_MOVE_EXT for the compat case. |
| |
| Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> |
| Signed-off-by: "Theodore Ts'o" <tytso@mit.edu> |
| Reviewed-by: Eric Sandeen <sandeen@redhat.com> |
| CC: Akira Fujita <a-fujita@rs.jp.nec.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| --- |
| fs/ext4/ioctl.c | 2 ++ |
| 1 files changed, 2 insertions(+), 0 deletions(-) |
| |
| diff --git a/fs/ext4/ioctl.c b/fs/ext4/ioctl.c |
| index 016d024..66fa0b0 100644 |
| --- a/fs/ext4/ioctl.c |
| +++ b/fs/ext4/ioctl.c |
| @@ -375,6 +375,8 @@ long ext4_compat_ioctl(struct file *file, unsigned int cmd, unsigned long arg) |
| break; |
| case EXT4_IOC_GROUP_ADD: |
| break; |
| + case EXT4_IOC_MOVE_EXT: |
| + break; |
| default: |
| return -ENOIOCTLCMD; |
| } |
| -- |
| 1.7.0.4 |
| |