148b05c3fSKonstantin Belousov /*- 24d846d26SWarner Losh * SPDX-License-Identifier: BSD-2-Clause 37f2d13d6SPedro F. Giffuni * 448b05c3fSKonstantin Belousov * Copyright (c) 2007 Roman Divacky 548b05c3fSKonstantin Belousov * All rights reserved. 648b05c3fSKonstantin Belousov * 748b05c3fSKonstantin Belousov * Redistribution and use in source and binary forms, with or without 848b05c3fSKonstantin Belousov * modification, are permitted provided that the following conditions 948b05c3fSKonstantin Belousov * are met: 1048b05c3fSKonstantin Belousov * 1. Redistributions of source code must retain the above copyright 1148b05c3fSKonstantin Belousov * notice, this list of conditions and the following disclaimer. 1248b05c3fSKonstantin Belousov * 2. Redistributions in binary form must reproduce the above copyright 1348b05c3fSKonstantin Belousov * notice, this list of conditions and the following disclaimer in the 1448b05c3fSKonstantin Belousov * documentation and/or other materials provided with the distribution. 1548b05c3fSKonstantin Belousov * 1648b05c3fSKonstantin Belousov * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 1748b05c3fSKonstantin Belousov * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 1848b05c3fSKonstantin Belousov * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 1948b05c3fSKonstantin Belousov * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 2048b05c3fSKonstantin Belousov * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 2148b05c3fSKonstantin Belousov * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 2248b05c3fSKonstantin Belousov * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 2348b05c3fSKonstantin Belousov * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 2448b05c3fSKonstantin Belousov * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 2548b05c3fSKonstantin Belousov * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 2648b05c3fSKonstantin Belousov * SUCH DAMAGE. 2748b05c3fSKonstantin Belousov */ 2848b05c3fSKonstantin Belousov 2948b05c3fSKonstantin Belousov #ifndef _LINUX_FILE_H_ 3048b05c3fSKonstantin Belousov #define _LINUX_FILE_H_ 3148b05c3fSKonstantin Belousov 3248b05c3fSKonstantin Belousov #define LINUX_AT_FDCWD -100 3348b05c3fSKonstantin Belousov #define LINUX_AT_SYMLINK_NOFOLLOW 0x100 34767a3264SEd Schouten #define LINUX_AT_EACCESS 0x200 3548b05c3fSKonstantin Belousov #define LINUX_AT_REMOVEDIR 0x200 36767a3264SEd Schouten #define LINUX_AT_SYMLINK_FOLLOW 0x400 37ff39d74aSDmitry Chagin #define LINUX_AT_NO_AUTOMOUNT 0x800 38ff39d74aSDmitry Chagin /* 39ff39d74aSDmitry Chagin * Specific to Linux AT_NO_AUTOMOUNT flag tells the kernel to 40ff39d74aSDmitry Chagin * not automount the terminal component of pathname if it is a 41ff39d74aSDmitry Chagin * directory that is an automount point. As FreeBSD does not 42ff39d74aSDmitry Chagin * have such facility (automount), we can simply ignore this flag. 43ff39d74aSDmitry Chagin */ 44de774e42SConrad Meyer #define LINUX_AT_EMPTY_PATH 0x1000 4548b05c3fSKonstantin Belousov 46d825ce0aSJohn Baldwin /* 47d825ce0aSJohn Baldwin * posix_fadvise advice 48d825ce0aSJohn Baldwin */ 49d825ce0aSJohn Baldwin #define LINUX_POSIX_FADV_NORMAL 0 50d825ce0aSJohn Baldwin #define LINUX_POSIX_FADV_RANDOM 1 51d825ce0aSJohn Baldwin #define LINUX_POSIX_FADV_SEQUENTIAL 2 52d825ce0aSJohn Baldwin #define LINUX_POSIX_FADV_WILLNEED 3 53d825ce0aSJohn Baldwin #define LINUX_POSIX_FADV_DONTNEED 4 54d825ce0aSJohn Baldwin #define LINUX_POSIX_FADV_NOREUSE 5 55d825ce0aSJohn Baldwin 56d825ce0aSJohn Baldwin /* 57d825ce0aSJohn Baldwin * mount flags 58d825ce0aSJohn Baldwin */ 59d825ce0aSJohn Baldwin #define LINUX_MS_RDONLY 0x0001 60d825ce0aSJohn Baldwin #define LINUX_MS_NOSUID 0x0002 61d825ce0aSJohn Baldwin #define LINUX_MS_NODEV 0x0004 62d825ce0aSJohn Baldwin #define LINUX_MS_NOEXEC 0x0008 63d825ce0aSJohn Baldwin #define LINUX_MS_REMOUNT 0x0020 64d825ce0aSJohn Baldwin 654d0f380dSDmitry Chagin /* 6666632fe7SEdward Tomasz Napierala * umount2 flags 6766632fe7SEdward Tomasz Napierala */ 6866632fe7SEdward Tomasz Napierala #define LINUX_MNT_FORCE 0x0001 6966632fe7SEdward Tomasz Napierala 7066632fe7SEdward Tomasz Napierala /* 714d0f380dSDmitry Chagin * common open/fcntl flags 724d0f380dSDmitry Chagin */ 731b11173cSEdward Tomasz Napierala #define LINUX_O_RDONLY 000000000 741b11173cSEdward Tomasz Napierala #define LINUX_O_WRONLY 000000001 751b11173cSEdward Tomasz Napierala #define LINUX_O_RDWR 000000002 761b11173cSEdward Tomasz Napierala #define LINUX_O_ACCMODE 000000003 771b11173cSEdward Tomasz Napierala #define LINUX_O_CREAT 000000100 781b11173cSEdward Tomasz Napierala #define LINUX_O_EXCL 000000200 791b11173cSEdward Tomasz Napierala #define LINUX_O_NOCTTY 000000400 801b11173cSEdward Tomasz Napierala #define LINUX_O_TRUNC 000001000 811b11173cSEdward Tomasz Napierala #define LINUX_O_APPEND 000002000 821b11173cSEdward Tomasz Napierala #define LINUX_O_NONBLOCK 000004000 834d0f380dSDmitry Chagin #define LINUX_O_NDELAY LINUX_O_NONBLOCK 841b11173cSEdward Tomasz Napierala #define LINUX_O_SYNC 000010000 851b11173cSEdward Tomasz Napierala #define LINUX_O_ASYNC 000020000 86fc37be24SDmitry Chagin #ifndef LINUX_O_DIRECT 871b11173cSEdward Tomasz Napierala #define LINUX_O_DIRECT 000040000 /* Direct disk access hint */ 88fc37be24SDmitry Chagin #endif 89fc37be24SDmitry Chagin #ifndef LINUX_O_LARGEFILE 901b11173cSEdward Tomasz Napierala #define LINUX_O_LARGEFILE 000100000 91fc37be24SDmitry Chagin #endif 92fc37be24SDmitry Chagin #ifndef LINUX_O_DIRECTORY 931b11173cSEdward Tomasz Napierala #define LINUX_O_DIRECTORY 000200000 /* Must be a directory */ 94fc37be24SDmitry Chagin #endif 95fc37be24SDmitry Chagin #ifndef LINUX_O_NOFOLLOW 961b11173cSEdward Tomasz Napierala #define LINUX_O_NOFOLLOW 000400000 /* Do not follow links */ 97fc37be24SDmitry Chagin #endif 981b11173cSEdward Tomasz Napierala #define LINUX_O_NOATIME 001000000 991b11173cSEdward Tomasz Napierala #define LINUX_O_CLOEXEC 002000000 1001663120aSEdward Tomasz Napierala #define LINUX_O_PATH 010000000 1014d0f380dSDmitry Chagin 1024d0f380dSDmitry Chagin #define LINUX_F_DUPFD 0 1034d0f380dSDmitry Chagin #define LINUX_F_GETFD 1 1044d0f380dSDmitry Chagin #define LINUX_F_SETFD 2 1054d0f380dSDmitry Chagin #define LINUX_F_GETFL 3 1064d0f380dSDmitry Chagin #define LINUX_F_SETFL 4 1074d0f380dSDmitry Chagin #ifndef LINUX_F_GETLK 1084d0f380dSDmitry Chagin #define LINUX_F_GETLK 5 1094d0f380dSDmitry Chagin #define LINUX_F_SETLK 6 1104d0f380dSDmitry Chagin #define LINUX_F_SETLKW 7 1114d0f380dSDmitry Chagin #endif 1124d0f380dSDmitry Chagin #ifndef LINUX_F_SETOWN 1134d0f380dSDmitry Chagin #define LINUX_F_SETOWN 8 1144d0f380dSDmitry Chagin #define LINUX_F_GETOWN 9 1154d0f380dSDmitry Chagin #endif 116bfa4d74bSDmitry Chagin #ifndef LINUX_F_SETSIG 117bfa4d74bSDmitry Chagin #define LINUX_F_SETSIG 10 118bfa4d74bSDmitry Chagin #define LINUX_F_GETSIG 11 119bfa4d74bSDmitry Chagin #endif 120bfa4d74bSDmitry Chagin #ifndef LINUX_F_SETOWN_EX 121bfa4d74bSDmitry Chagin #define LINUX_F_SETOWN_EX 15 122bfa4d74bSDmitry Chagin #define LINUX_F_GETOWN_EX 16 123bfa4d74bSDmitry Chagin #define LINUX_F_GETOWNER_UIDS 17 124bfa4d74bSDmitry Chagin #endif 125bfa4d74bSDmitry Chagin 126bfa4d74bSDmitry Chagin #define LINUX_F_SPECIFIC_BASE 1024 127bfa4d74bSDmitry Chagin 128bfa4d74bSDmitry Chagin #define LINUX_F_SETLEASE (LINUX_F_SPECIFIC_BASE + 0) 129bfa4d74bSDmitry Chagin #define LINUX_F_GETLEASE (LINUX_F_SPECIFIC_BASE + 1) 130fe21dbf7SRicardo Branco #define LINUX_F_DUPFD_QUERY (LINUX_F_SPECIFIC_BASE + 3) 131bfa4d74bSDmitry Chagin #define LINUX_F_CANCELLK (LINUX_F_SPECIFIC_BASE + 5) 132bfa4d74bSDmitry Chagin #define LINUX_F_DUPFD_CLOEXEC (LINUX_F_SPECIFIC_BASE + 6) 133bfa4d74bSDmitry Chagin #define LINUX_F_NOTIFY (LINUX_F_SPECIFIC_BASE + 2) 134bfa4d74bSDmitry Chagin #define LINUX_F_SETPIPE_SZ (LINUX_F_SPECIFIC_BASE + 7) 135bfa4d74bSDmitry Chagin #define LINUX_F_GETPIPE_SZ (LINUX_F_SPECIFIC_BASE + 8) 136bfa4d74bSDmitry Chagin 1375403f186SKyle Evans #define LINUX_F_ADD_SEALS (LINUX_F_SPECIFIC_BASE + 9) 1385403f186SKyle Evans #define LINUX_F_GET_SEALS (LINUX_F_SPECIFIC_BASE + 10) 1395403f186SKyle Evans 140bfa4d74bSDmitry Chagin #define LINUX_F_GETLKP 36 141bfa4d74bSDmitry Chagin #define LINUX_F_SETLKP 37 142bfa4d74bSDmitry Chagin #define LINUX_F_SETLKPW 38 143bfa4d74bSDmitry Chagin 144bfa4d74bSDmitry Chagin #define LINUX_F_OWNER_TID 0 145bfa4d74bSDmitry Chagin #define LINUX_F_OWNER_PID 1 146bfa4d74bSDmitry Chagin #define LINUX_F_OWNER_PGRP 2 1474d0f380dSDmitry Chagin 1484d0f380dSDmitry Chagin #ifndef LINUX_F_RDLCK 1494d0f380dSDmitry Chagin #define LINUX_F_RDLCK 0 1504d0f380dSDmitry Chagin #define LINUX_F_WRLCK 1 1514d0f380dSDmitry Chagin #define LINUX_F_UNLCK 2 1524d0f380dSDmitry Chagin #endif 1534d0f380dSDmitry Chagin 15401b9ee4cSEd Maste /* 15501b9ee4cSEd Maste * renameat2 flags 15601b9ee4cSEd Maste */ 15701b9ee4cSEd Maste #define LINUX_RENAME_NOREPLACE 0x00000001 15801b9ee4cSEd Maste #define LINUX_RENAME_EXCHANGE 0x00000002 15901b9ee4cSEd Maste #define LINUX_RENAME_WHITEOUT 0x00000004 16001b9ee4cSEd Maste 161cf69fe66SEdward Tomasz Napierala /* 162cf69fe66SEdward Tomasz Napierala * sync_file_range flags 163cf69fe66SEdward Tomasz Napierala */ 164cf69fe66SEdward Tomasz Napierala #define LINUX_SYNC_FILE_RANGE_WAIT_BEFORE 1 165cf69fe66SEdward Tomasz Napierala #define LINUX_SYNC_FILE_RANGE_WRITE 2 166cf69fe66SEdward Tomasz Napierala #define LINUX_SYNC_FILE_RANGE_WAIT_AFTER 4 167cf69fe66SEdward Tomasz Napierala 1685403f186SKyle Evans #define LINUX_F_SEAL_SEAL 0x0001 1695403f186SKyle Evans #define LINUX_F_SEAL_SHRINK 0x0002 1705403f186SKyle Evans #define LINUX_F_SEAL_GROW 0x0004 1715403f186SKyle Evans #define LINUX_F_SEAL_WRITE 0x0008 1725403f186SKyle Evans 1735403f186SKyle Evans #define LINUX_MFD_CLOEXEC 0x0001 1745403f186SKyle Evans #define LINUX_MFD_ALLOW_SEALING 0x0002 1755403f186SKyle Evans #define LINUX_MFD_HUGETLB 0x0004 1765403f186SKyle Evans 1775403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_SHIFT 26 1785403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_MASK 0x3f 1795403f186SKyle Evans 1805403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_64KB (16 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1815403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_512KB (19 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1825403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_1MB (20 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1835403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_2MB (21 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1845403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_8MB (23 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1855403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_16MB (24 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1865403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_32MB (25 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1875403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_256MB (28 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1885403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_512MB (29 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1895403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_1GB (30 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1905403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_2GB (31 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1915403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_16GB (34U << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1925403f186SKyle Evans 1933965de64SMark Johnston /* inotify flags */ 1943965de64SMark Johnston #define LINUX_IN_ACCESS 0x00000001 1953965de64SMark Johnston #define LINUX_IN_MODIFY 0x00000002 1963965de64SMark Johnston #define LINUX_IN_ATTRIB 0x00000004 1973965de64SMark Johnston #define LINUX_IN_CLOSE_WRITE 0x00000008 1983965de64SMark Johnston #define LINUX_IN_CLOSE_NOWRITE 0x00000010 1993965de64SMark Johnston #define LINUX_IN_OPEN 0x00000020 2003965de64SMark Johnston #define LINUX_IN_MOVED_FROM 0x00000040 2013965de64SMark Johnston #define LINUX_IN_MOVED_TO 0x00000080 2023965de64SMark Johnston #define LINUX_IN_CREATE 0x00000100 2033965de64SMark Johnston #define LINUX_IN_DELETE 0x00000200 2043965de64SMark Johnston #define LINUX_IN_DELETE_SELF 0x00000400 2053965de64SMark Johnston #define LINUX_IN_MOVE_SELF 0x00000800 2063965de64SMark Johnston 2073965de64SMark Johnston #define LINUX_IN_UNMOUNT 0x00002000 2083965de64SMark Johnston #define LINUX_IN_Q_OVERFLOW 0x00004000 2093965de64SMark Johnston #define LINUX_IN_IGNORED 0x00008000 2103965de64SMark Johnston 2113965de64SMark Johnston #define LINUX_IN_ONLYDIR 0x01000000 2123965de64SMark Johnston #define LINUX_IN_DONT_FOLLOW 0x02000000 2133965de64SMark Johnston #define LINUX_IN_EXCL_UNLINK 0x04000000 2143965de64SMark Johnston #define LINUX_IN_MASK_CREATE 0x10000000 2153965de64SMark Johnston #define LINUX_IN_MASK_ADD 0x20000000 2163965de64SMark Johnston #define LINUX_IN_ISDIR 0x40000000 2173965de64SMark Johnston #define LINUX_IN_ONESHOT 0x80000000 2183965de64SMark Johnston 2193965de64SMark Johnston #define LINUX_IN_ALL_EVENTS 0x00000fff 2203965de64SMark Johnston #define LINUX_IN_ALL_FLAGS 0xf700e000 2213965de64SMark Johnston 2223965de64SMark Johnston #define LINUX_IN_NONBLOCK 0x00000800 2233965de64SMark Johnston #define LINUX_IN_CLOEXEC 0x00080000 2243965de64SMark Johnston 225e58ff664SDmitry Chagin #if defined(_KERNEL) 226de774e42SConrad Meyer struct l_file_handle { 227de774e42SConrad Meyer l_uint handle_bytes; 228de774e42SConrad Meyer l_int handle_type; 229de774e42SConrad Meyer unsigned char f_handle[0]; 230de774e42SConrad Meyer }; 231de774e42SConrad Meyer 232e58ff664SDmitry Chagin int linux_enobufs2eagain(struct thread *, int, int); 2339c7b1bf2SRicardo Branco int linux_common_openflags(int); 234e58ff664SDmitry Chagin #endif 235e58ff664SDmitry Chagin 23671bc1780SDmitry Chagin /* 23771bc1780SDmitry Chagin * Look at linux_close_range() for an explanation. 23871bc1780SDmitry Chagin * 23971bc1780SDmitry Chagin * #define LINUX_CLOSE_RANGE_UNSHARE (1U << 1) 24071bc1780SDmitry Chagin */ 24171bc1780SDmitry Chagin #define LINUX_CLOSE_RANGE_CLOEXEC (1U << 2) 24271bc1780SDmitry Chagin 24348b05c3fSKonstantin Belousov #endif /* !_LINUX_FILE_H_ */ 244