diff options
author | Vasily Tarasov <vtaras@openvz.org> | 2007-07-16 02:41:12 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-16 12:05:48 -0400 |
commit | b716395e2b8e450e294537de0c91476ded2f0395 (patch) | |
tree | 7f8fd39022c1caca71abb30303a453d77cf4d905 /arch | |
parent | 4b7775870b69129e640ed583c9b362d5cd66159d (diff) |
diskquota: 32bit quota tools on 64bit architectures
OpenVZ Linux kernel team has discovered the problem with 32bit quota tools
working on 64bit architectures. In 2.6.10 kernel sys32_quotactl() function
was replaced by sys_quotactl() with the comment "sys_quotactl seems to be
32/64bit clean, enable it for 32bit" However this isn't right. Look at
if_dqblk structure:
struct if_dqblk {
__u64 dqb_bhardlimit;
__u64 dqb_bsoftlimit;
__u64 dqb_curspace;
__u64 dqb_ihardlimit;
__u64 dqb_isoftlimit;
__u64 dqb_curinodes;
__u64 dqb_btime;
__u64 dqb_itime;
__u32 dqb_valid;
};
For 32 bit quota tools sizeof(if_dqblk) == 0x44.
But for 64 bit kernel its size is 0x48, 'cause of alignment!
Thus we got a problem. Attached patch reintroduce sys32_quotactl() function,
that handles this and related situations.
[michal.k.k.piotrowski@gmail.com: build fix]
[akpm@linux-foundation.org: Make it link with CONFIG_QUOTA=n]
Signed-off-by: Vasily Tarasov <vtaras@openvz.org>
Cc: Andi Kleen <ak@suse.de>
Cc: "Luck, Tony" <tony.luck@intel.com>
Cc: Jan Kara <jack@ucw.cz>
Cc: <linux-arch@vger.kernel.org>
Signed-off-by: Michal Piotrowski <michal.k.k.piotrowski@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/ia64/ia32/ia32_entry.S | 2 | ||||
-rw-r--r-- | arch/x86_64/ia32/ia32entry.S | 2 |
2 files changed, 2 insertions, 2 deletions
diff --git a/arch/ia64/ia32/ia32_entry.S b/arch/ia64/ia32/ia32_entry.S index 99b665e2b1d5..06efd1f9b800 100644 --- a/arch/ia64/ia32/ia32_entry.S +++ b/arch/ia64/ia32/ia32_entry.S | |||
@@ -304,7 +304,7 @@ ia32_syscall_table: | |||
304 | data8 sys_ni_syscall /* init_module */ | 304 | data8 sys_ni_syscall /* init_module */ |
305 | data8 sys_ni_syscall /* delete_module */ | 305 | data8 sys_ni_syscall /* delete_module */ |
306 | data8 sys_ni_syscall /* get_kernel_syms */ /* 130 */ | 306 | data8 sys_ni_syscall /* get_kernel_syms */ /* 130 */ |
307 | data8 sys_quotactl | 307 | data8 sys32_quotactl |
308 | data8 sys_getpgid | 308 | data8 sys_getpgid |
309 | data8 sys_fchdir | 309 | data8 sys_fchdir |
310 | data8 sys_ni_syscall /* sys_bdflush */ | 310 | data8 sys_ni_syscall /* sys_bdflush */ |
diff --git a/arch/x86_64/ia32/ia32entry.S b/arch/x86_64/ia32/ia32entry.S index 47565c3345d2..782dea819438 100644 --- a/arch/x86_64/ia32/ia32entry.S +++ b/arch/x86_64/ia32/ia32entry.S | |||
@@ -526,7 +526,7 @@ ia32_sys_call_table: | |||
526 | .quad sys_init_module | 526 | .quad sys_init_module |
527 | .quad sys_delete_module | 527 | .quad sys_delete_module |
528 | .quad quiet_ni_syscall /* 130 get_kernel_syms */ | 528 | .quad quiet_ni_syscall /* 130 get_kernel_syms */ |
529 | .quad sys_quotactl | 529 | .quad sys32_quotactl |
530 | .quad sys_getpgid | 530 | .quad sys_getpgid |
531 | .quad sys_fchdir | 531 | .quad sys_fchdir |
532 | .quad quiet_ni_syscall /* bdflush */ | 532 | .quad quiet_ni_syscall /* bdflush */ |