1224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef _ASM_GENERIC_FCNTL_H 2224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define _ASM_GENERIC_FCNTL_H 3224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 4224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#include <linux/types.h> 5224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 6224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 7224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FMODE_EXEC is 0x20 8224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * FMODE_NONOTIFY is 0x1000000 9224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * These cannot be used by userspace O_* until internal and external open 10224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * flags are split. 11224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * -Eric Paris 12224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 13224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 14224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 15224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * When introducing new O_* bits, please check its uniqueness in fcntl_init(). 16224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 17224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 18224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_ACCMODE 00000003 19224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_RDONLY 00000000 20224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_WRONLY 00000001 21224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_RDWR 00000002 22224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_CREAT 23224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_CREAT 00000100 /* not fcntl */ 24224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 25224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_EXCL 26224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_EXCL 00000200 /* not fcntl */ 27224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 28224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_NOCTTY 29224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_NOCTTY 00000400 /* not fcntl */ 30224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 31224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_TRUNC 32224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_TRUNC 00001000 /* not fcntl */ 33224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 34224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_APPEND 35224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_APPEND 00002000 36224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 37224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_NONBLOCK 38224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_NONBLOCK 00004000 39224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 40224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_DSYNC 41224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_DSYNC 00010000 /* used to be O_SYNC, see below */ 42224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 43224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef FASYNC 44224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FASYNC 00020000 /* fcntl, for BSD compatibility */ 45224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 46224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_DIRECT 47224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_DIRECT 00040000 /* direct disk access hint */ 48224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 49224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_LARGEFILE 50224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_LARGEFILE 00100000 51224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 52224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_DIRECTORY 53224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_DIRECTORY 00200000 /* must be a directory */ 54224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 55224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_NOFOLLOW 56224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_NOFOLLOW 00400000 /* don't follow links */ 57224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 58224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_NOATIME 59224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_NOATIME 01000000 60224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 61224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_CLOEXEC 62224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_CLOEXEC 02000000 /* set close_on_exec */ 63224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 64224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 65224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* 66224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Before Linux 2.6.33 only O_DSYNC semantics were implemented, but using 67224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * the O_SYNC flag. We continue to use the existing numerical value 68224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * for O_DSYNC semantics now, but using the correct symbolic name for it. 69224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This new value is used to request true Posix O_SYNC semantics. It is 70224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * defined in this strange way to make sure applications compiled against 71224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * new headers get at least O_DSYNC semantics on older kernels. 72224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 73224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * This has the nice side-effect that we can simply test for O_DSYNC 74224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * wherever we do not care if O_DSYNC or O_SYNC is used. 75224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * 76224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng * Note: __O_SYNC must never be used directly. 77224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng */ 78224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_SYNC 79224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define __O_SYNC 04000000 80224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_SYNC (__O_SYNC|O_DSYNC) 81224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 82224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 83224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_PATH 84224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_PATH 010000000 85224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 86224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 87e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#ifndef __O_TMPFILE 88e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define __O_TMPFILE 020000000 89e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#endif 90e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl 91e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl/* a horrid kludge trying to make sure that this will fail on old kernels */ 92e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define O_TMPFILE (__O_TMPFILE | O_DIRECTORY) 93e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl#define O_TMPFILE_MASK (__O_TMPFILE | O_DIRECTORY | O_CREAT) 94e87eaf040ab639e94ed0a58ff0eac68d1d38fb0aEd Heyl 95224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef O_NDELAY 96224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define O_NDELAY O_NONBLOCK 97224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 98224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 99224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_DUPFD 0 /* dup */ 100224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETFD 1 /* get close_on_exec */ 101224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETFD 2 /* set/clear close_on_exec */ 102224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETFL 3 /* get file->f_flags */ 103224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETFL 4 /* set file->f_flags */ 104224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_GETLK 105224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETLK 5 106224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETLK 6 107224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETLKW 7 108224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 109224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_SETOWN 110224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETOWN 8 /* for sockets. */ 111224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETOWN 9 /* for sockets. */ 112224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 113224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_SETSIG 114224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETSIG 10 /* for sockets. */ 115224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETSIG 11 /* for sockets. */ 116224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 117224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 118224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef CONFIG_64BIT 119224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_GETLK64 120224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETLK64 12 /* using 'struct flock64' */ 121224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETLK64 13 122224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETLKW64 14 123224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 124224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 125224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 126224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_SETOWN_EX 127224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SETOWN_EX 15 128224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETOWN_EX 16 129224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 130224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 131224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_GETOWNER_UIDS 132224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_GETOWNER_UIDS 17 133224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 134224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 135224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_OWNER_TID 0 136224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_OWNER_PID 1 137224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_OWNER_PGRP 2 138224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 139224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct f_owner_ex { 140224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng int type; 141224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __kernel_pid_t pid; 142224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 143224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 144224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* for F_[GET|SET]FL */ 145224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define FD_CLOEXEC 1 /* actually anything with low bit set goes */ 146224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 147224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* for posix fcntl() and lockf() */ 148224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_RDLCK 149224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_RDLCK 0 150224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_WRLCK 1 151224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_UNLCK 2 152224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 153224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 154224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* for old implementation of bsd flock () */ 155224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef F_EXLCK 156224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_EXLCK 4 /* or 3 */ 157224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_SHLCK 8 /* or 4 */ 158224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 159224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 160224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng/* operations for bsd flock(), also used by the kernel implementation */ 161224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_SH 1 /* shared lock */ 162224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_EX 2 /* exclusive lock */ 163224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_NB 4 /* or'd with one of the above to prevent 164224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng blocking */ 165224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_UN 8 /* remove lock */ 166224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 167224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_MAND 32 /* This is a mandatory flock ... */ 168224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_READ 64 /* which allows concurrent read operations */ 169224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_WRITE 128 /* which allows concurrent write operations */ 170224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define LOCK_RW 192 /* which allows concurrent read & write ops */ 171224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 172224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define F_LINUX_SPECIFIC_BASE 1024 173224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 174224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef HAVE_ARCH_STRUCT_FLOCK 175224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __ARCH_FLOCK_PAD 176224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define __ARCH_FLOCK_PAD 177224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 178224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 179224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct flock { 180224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng short l_type; 181224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng short l_whence; 182224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __kernel_off_t l_start; 183224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __kernel_off_t l_len; 184224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __kernel_pid_t l_pid; 185224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __ARCH_FLOCK_PAD 186224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 187224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 188224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 189224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef CONFIG_64BIT 190224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 191224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef HAVE_ARCH_STRUCT_FLOCK64 192224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#ifndef __ARCH_FLOCK64_PAD 193224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#define __ARCH_FLOCK64_PAD 194224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 195224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 196224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Chengstruct flock64 { 197224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng short l_type; 198224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng short l_whence; 199224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __kernel_loff_t l_start; 200224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __kernel_loff_t l_len; 201224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __kernel_pid_t l_pid; 202224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng __ARCH_FLOCK64_PAD 203224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng}; 204224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif 205224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* !CONFIG_64BIT */ 206224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng 207224b54f69543a5c0ec18f99bd717d2b724582eb6Ben Cheng#endif /* _ASM_GENERIC_FCNTL_H */ 208