mirror of
				https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
				synced 2025-10-30 18:47:25 +00:00 
			
		
		
		
	 ef3daeda7b
			
		
	
	
		ef3daeda7b
		
	
	
	
	
		
			
			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. Signed-off-by: Yoav Zach <yoav.zach@intel.com> Acked-by: Tony Luck <tony.luck@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
		
			
				
	
	
		
			55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| #ifndef _LINUX_FCNTL_H
 | |
| #define _LINUX_FCNTL_H
 | |
| 
 | |
| #include <asm/fcntl.h>
 | |
| 
 | |
| #define F_SETLEASE	(F_LINUX_SPECIFIC_BASE+0)
 | |
| #define F_GETLEASE	(F_LINUX_SPECIFIC_BASE+1)
 | |
| 
 | |
| /*
 | |
|  * Request nofications on a directory.
 | |
|  * See below for events that may be notified.
 | |
|  */
 | |
| #define F_NOTIFY	(F_LINUX_SPECIFIC_BASE+2)
 | |
| 
 | |
| /*
 | |
|  * Types of directory notifications that may be requested.
 | |
|  */
 | |
| #define DN_ACCESS	0x00000001	/* File accessed */
 | |
| #define DN_MODIFY	0x00000002	/* File modified */
 | |
| #define DN_CREATE	0x00000004	/* File created */
 | |
| #define DN_DELETE	0x00000008	/* File removed */
 | |
| #define DN_RENAME	0x00000010	/* File renamed */
 | |
| #define DN_ATTRIB	0x00000020	/* File changed attibutes */
 | |
| #define DN_MULTISHOT	0x80000000	/* Don't remove notifier */
 | |
| 
 | |
| #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)
 | |
| #define IS_SETLKW32(cmd)	((cmd) == F_SETLKW)
 | |
| #define IS_GETLK64(cmd)		((cmd) == F_GETLK64)
 | |
| #define IS_SETLK64(cmd)		((cmd) == F_SETLK64)
 | |
| #define IS_SETLKW64(cmd)	((cmd) == F_SETLKW64)
 | |
| #else
 | |
| #define IS_GETLK32(cmd)		(0)
 | |
| #define IS_SETLK32(cmd)		(0)
 | |
| #define IS_SETLKW32(cmd)	(0)
 | |
| #define IS_GETLK64(cmd)		((cmd) == F_GETLK)
 | |
| #define IS_SETLK64(cmd)		((cmd) == F_SETLK)
 | |
| #define IS_SETLKW64(cmd)	((cmd) == F_SETLKW)
 | |
| #endif /* BITS_PER_LONG == 32 */
 | |
| 
 | |
| #define IS_GETLK(cmd)	(IS_GETLK32(cmd)  || IS_GETLK64(cmd))
 | |
| #define IS_SETLK(cmd)	(IS_SETLK32(cmd)  || IS_SETLK64(cmd))
 | |
| #define IS_SETLKW(cmd)	(IS_SETLKW32(cmd) || IS_SETLKW64(cmd))
 | |
| 
 | |
| #endif /* __KERNEL__ */
 | |
| 
 | |
| #endif
 |