1c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef _ASM_GENERIC_FCNTL_H 2c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define _ASM_GENERIC_FCNTL_H 3c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 4c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#include <linux/types.h> 5c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev/* 792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * FMODE_EXEC is 0x20 892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * FMODE_NONOTIFY is 0x1000000 992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * These cannot be used by userspace O_* until internal and external open 1092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * flags are split. 1192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * -Eric Paris 1292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev */ 1392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 1492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev/* 1592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * When introducing new O_* bits, please check its uniqueness in fcntl_init(). 1692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev */ 1792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 18c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_ACCMODE 00000003 19c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_RDONLY 00000000 20c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_WRONLY 00000001 21c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_RDWR 00000002 22c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_CREAT 23c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_CREAT 00000100 /* not fcntl */ 24c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 25c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_EXCL 26c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_EXCL 00000200 /* not fcntl */ 27c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 28c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_NOCTTY 29c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_NOCTTY 00000400 /* not fcntl */ 30c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 31c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_TRUNC 32c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_TRUNC 00001000 /* not fcntl */ 33c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 34c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_APPEND 35c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_APPEND 00002000 36c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 37c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_NONBLOCK 38c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_NONBLOCK 00004000 39c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 4092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#ifndef O_DSYNC 4192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define O_DSYNC 00010000 /* used to be O_SYNC, see below */ 42c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 43c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef FASYNC 44c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define FASYNC 00020000 /* fcntl, for BSD compatibility */ 45c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 46c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_DIRECT 47c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_DIRECT 00040000 /* direct disk access hint */ 48c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 49c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_LARGEFILE 50c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_LARGEFILE 00100000 51c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 52c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_DIRECTORY 53c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_DIRECTORY 00200000 /* must be a directory */ 54c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 55c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_NOFOLLOW 56c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_NOFOLLOW 00400000 /* don't follow links */ 57c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 58c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_NOATIME 59c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_NOATIME 01000000 60c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 6192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#ifndef O_CLOEXEC 6292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define O_CLOEXEC 02000000 /* set close_on_exec */ 6392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#endif 6492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 6592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev/* 6692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * Before Linux 2.6.33 only O_DSYNC semantics were implemented, but using 6792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * the O_SYNC flag. We continue to use the existing numerical value 6892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * for O_DSYNC semantics now, but using the correct symbolic name for it. 6992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * This new value is used to request true Posix O_SYNC semantics. It is 7092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * defined in this strange way to make sure applications compiled against 7192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * new headers get at least O_DSYNC semantics on older kernels. 7292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * 7392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * This has the nice side-effect that we can simply test for O_DSYNC 7492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * wherever we do not care if O_DSYNC or O_SYNC is used. 7592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * 7692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev * Note: __O_SYNC must never be used directly. 7792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev */ 7892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#ifndef O_SYNC 7992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define __O_SYNC 04000000 8092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define O_SYNC (__O_SYNC|O_DSYNC) 8192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#endif 8292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 8392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#ifndef O_PATH 8492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define O_PATH 010000000 8592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#endif 8692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 87c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef O_NDELAY 88c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define O_NDELAY O_NONBLOCK 89c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 90c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 91c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_DUPFD 0 /* dup */ 92c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_GETFD 1 /* get close_on_exec */ 93c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_SETFD 2 /* set/clear close_on_exec */ 94c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_GETFL 3 /* get file->f_flags */ 95c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_SETFL 4 /* set file->f_flags */ 96c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef F_GETLK 97c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_GETLK 5 98c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_SETLK 6 99c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_SETLKW 7 100c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 101c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef F_SETOWN 102c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_SETOWN 8 /* for sockets. */ 103c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_GETOWN 9 /* for sockets. */ 104c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 105c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef F_SETSIG 106c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_SETSIG 10 /* for sockets. */ 107c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_GETSIG 11 /* for sockets. */ 108c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 109c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 11092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#ifndef CONFIG_64BIT 11192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#ifndef F_GETLK64 11292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define F_GETLK64 12 /* using 'struct flock64' */ 11392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define F_SETLK64 13 11492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define F_SETLKW64 14 11592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#endif 11692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#endif 11792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 11892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#ifndef F_SETOWN_EX 11992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define F_SETOWN_EX 15 12092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define F_GETOWN_EX 16 12192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#endif 12292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 12392a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define F_OWNER_TID 0 12492a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define F_OWNER_PID 1 12592a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev#define F_OWNER_PGRP 2 12692a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 12792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchevstruct f_owner_ex { 12892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev int type; 12992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __kernel_pid_t pid; 13092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev}; 13192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev 132c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* for F_[GET|SET]FL */ 133c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ 134c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 135c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* for posix fcntl() and lockf() */ 136c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef F_RDLCK 137c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_RDLCK 0 138c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_WRLCK 1 139c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_UNLCK 2 140c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 141c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 142c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* for old implementation of bsd flock () */ 143c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef F_EXLCK 144c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_EXLCK 4 /* or 3 */ 145c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_SHLCK 8 /* or 4 */ 146c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 147c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 148c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru/* operations for bsd flock(), also used by the kernel implementation */ 149c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define LOCK_SH 1 /* shared lock */ 150c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define LOCK_EX 2 /* exclusive lock */ 151c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define LOCK_NB 4 /* or'd with one of the above to prevent 152c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru blocking */ 153c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define LOCK_UN 8 /* remove lock */ 154c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 155c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define LOCK_MAND 32 /* This is a mandatory flock ... */ 156c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define LOCK_READ 64 /* which allows concurrent read operations */ 157c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define LOCK_WRITE 128 /* which allows concurrent write operations */ 158c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define LOCK_RW 192 /* which allows concurrent read & write ops */ 159c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 160c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define F_LINUX_SPECIFIC_BASE 1024 161c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 162c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef HAVE_ARCH_STRUCT_FLOCK 163c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef __ARCH_FLOCK_PAD 164c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __ARCH_FLOCK_PAD 165c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 166c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 167c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct flock { 168c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru short l_type; 169c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru short l_whence; 17092a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __kernel_off_t l_start; 17192a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __kernel_off_t l_len; 17292a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __kernel_pid_t l_pid; 173c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __ARCH_FLOCK_PAD 174c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 175c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 176c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 177c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef CONFIG_64BIT 178c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 179c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef HAVE_ARCH_STRUCT_FLOCK64 180c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#ifndef __ARCH_FLOCK64_PAD 181c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#define __ARCH_FLOCK64_PAD 182c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 183c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 184c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Querustruct flock64 { 185c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru short l_type; 186c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru short l_whence; 18792a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __kernel_loff_t l_start; 18892a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __kernel_loff_t l_len; 18992a0538051ff3deeda67521c966f476bed90d23bIliyan Malchev __kernel_pid_t l_pid; 190c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru __ARCH_FLOCK64_PAD 191c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru}; 192c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif 193c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* !CONFIG_64BIT */ 194c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru 195c559cd81139f97cecad1ad91a0b2e25a5936d53Jean-Baptiste Queru#endif /* _ASM_GENERIC_FCNTL_H */ 196