[PATCH]: Don't force O_LARGEFILE for 32 bit processes on ia64 - 2.6.12-rc3

From: Yoav Zach (yoav_zach_at_yahoo.com)
Date: 05/09/05

  • Next message: Christoph Lameter: "Re: [RFC][PATCH] timers fixes/improvements"
    Date:	Mon, 9 May 2005 14:47:10 -0700 (PDT)
    To: torvalds@osdl.org
    
    

    In ia64 kernel, the O_LARGEFILE flag is forced when
    opening a file. This is problematic for execution of
    32 bit processes, which are not largefile aware, either
    by SW emulation or by HW execution.
    For such processes, the problem is two-fold:
    1) When trying to open a file that is larger than 4G
       the operation should fail, but it's not
    2) Writing to offset larger than 4G should fail, but
       it's not

    The proposed patch takes advantage of the way 32 bit
    processes are identified in ia64 systems. Such
    processes have PER_LINUX32 for their personality. With
    the patch, the ia64 kernel will not enforce the O_LARGEFILE
    flag if the current process has PER_LINUX32 set.
    The behavior for all other architectures remains unchanged.

    The patch is against 2.6.12-rc3.

    Signed-off-by: Yoav Zach <yoav.zach@intel.com>
    Acked-by: Tony Luck <tony.luck@intel.com>
    ============================================================================================
    diff -r -U 3 -p -N linux-2.6.12-rc3/fs/open.c linux/fs/open.c
    --- linux-2.6.12-rc3/fs/open.c 2005-04-21 03:03:15.000000000 +0300
    +++ linux/fs/open.c 2005-05-09 23:50:08.000000000 +0300
    @@ -21,6 +21,7 @@
     #include <linux/vfs.h>
     #include <asm/uaccess.h>
     #include <linux/fs.h>
    +#include <linux/personality.h>
     #include <linux/pagemap.h>
     #include <linux/syscalls.h>
     
    @@ -935,9 +936,9 @@ asmlinkage long sys_open(const char __us
             char * tmp;
             int fd, error;
     
    -#if BITS_PER_LONG != 32
    - flags |= O_LARGEFILE;
    -#endif
    + if (force_o_largefile())
    + flags |= O_LARGEFILE;
    +
             tmp = getname(filename);
             fd = PTR_ERR(tmp);
             if (!IS_ERR(tmp)) {
    diff -r -U 3 -p -N linux-2.6.12-rc3/include/asm-ia64/fcntl.h linux/include/asm-ia64/fcntl.h
    --- linux-2.6.12-rc3/include/asm-ia64/fcntl.h 2005-04-21 03:03:16.000000000 +0300
    +++ linux/include/asm-ia64/fcntl.h 2005-05-09 23:51:53.000000000 +0300
    @@ -81,4 +81,6 @@ struct flock {
     
     #define F_LINUX_SPECIFIC_BASE 1024
     
    +#define force_o_largefile() ( ! (current->personality & PER_LINUX32) )
    +
     #endif /* _ASM_IA64_FCNTL_H */
    diff -r -U 3 -p -N linux-2.6.12-rc3/include/linux/fcntl.h linux/include/linux/fcntl.h
    --- linux-2.6.12-rc3/include/linux/fcntl.h 2005-04-21 03:03:16.000000000 +0300
    +++ linux/include/linux/fcntl.h 2005-05-09 23:51:46.000000000 +0300
    @@ -25,6 +25,10 @@
     
     #ifdef __KERNEL__
     
    +#ifndef force_o_largefile
    +#define force_o_largefile() (BITS_PER_LONG != 32)
    +#endif
    +
     #if BITS_PER_LONG == 32
     #define IS_GETLK32(cmd) ((cmd) == F_GETLK)
     #define IS_SETLK32(cmd) ((cmd) == F_SETLK)
    ============================================================================================

    Thanks,
    Yoav.

    Yoav Zach
    IA-32 Execution Layer
    Performance Tools Lab
    Intel Corp.

                    
    __________________________________
    Do you Yahoo!?
    Read only the mail you want - Yahoo! Mail SpamGuard.
    http://promotions.yahoo.com/new_mail
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/


  • Next message: Christoph Lameter: "Re: [RFC][PATCH] timers fixes/improvements"

    Relevant Pages

    • Re: Dream-com scripter and Server 2003
      ... (No eXecution) ... feature in the BIOS made Dream Scripter work like before. ... The NX flag marks data segments as no executable for security reasons. ...
      (borland.public.delphi.thirdpartytools.general)
    • Re: running DTS package in .Net-- no errors, but nothing happens?
      ... I accidentally set the "IsPackageDSORowset" flag to true when I ... I've ported the DTS library to my C# application (using the ... > The execution of the following DTS Package succeeded: ...
      (microsoft.public.sqlserver.dts)
    • Re: Dream-com scripter and Server 2003
      ... > (No eXecution) Flag supported by SP2 on a newer CPU/BIOS. ... > The NX flag marks data segments as no executable for security reasons. ... > is stored in data segments, the NX flag will hinder the CPU ...
      (borland.public.delphi.thirdpartytools.general)
    • Re: Fill blanks with value from previous record
      ... I need to pull all the records where Execution ID Is Not Null, ... blank values in field Flag with the nonblank values according to Ticket ID? ... thinking, not relational thinking, and it *will* get you in trouble! ...
      (microsoft.public.access.queries)