• V
    diskquota: 32bit quota tools on 64bit architectures · b716395e
    Vasily Tarasov 提交于
    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: NVasily 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: NMichal Piotrowski <michal.k.k.piotrowski@gmail.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    b716395e
quota.c 12.2 KB