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) 130bfa4d74bSDmitry Chagin #define LINUX_F_CANCELLK (LINUX_F_SPECIFIC_BASE + 5) 131bfa4d74bSDmitry Chagin #define LINUX_F_DUPFD_CLOEXEC (LINUX_F_SPECIFIC_BASE + 6) 132bfa4d74bSDmitry Chagin #define LINUX_F_NOTIFY (LINUX_F_SPECIFIC_BASE + 2) 133bfa4d74bSDmitry Chagin #define LINUX_F_SETPIPE_SZ (LINUX_F_SPECIFIC_BASE + 7) 134bfa4d74bSDmitry Chagin #define LINUX_F_GETPIPE_SZ (LINUX_F_SPECIFIC_BASE + 8) 135bfa4d74bSDmitry Chagin 1365403f186SKyle Evans #define LINUX_F_ADD_SEALS (LINUX_F_SPECIFIC_BASE + 9) 1375403f186SKyle Evans #define LINUX_F_GET_SEALS (LINUX_F_SPECIFIC_BASE + 10) 1385403f186SKyle Evans 139bfa4d74bSDmitry Chagin #define LINUX_F_GETLKP 36 140bfa4d74bSDmitry Chagin #define LINUX_F_SETLKP 37 141bfa4d74bSDmitry Chagin #define LINUX_F_SETLKPW 38 142bfa4d74bSDmitry Chagin 143bfa4d74bSDmitry Chagin #define LINUX_F_OWNER_TID 0 144bfa4d74bSDmitry Chagin #define LINUX_F_OWNER_PID 1 145bfa4d74bSDmitry Chagin #define LINUX_F_OWNER_PGRP 2 1464d0f380dSDmitry Chagin 1474d0f380dSDmitry Chagin #ifndef LINUX_F_RDLCK 1484d0f380dSDmitry Chagin #define LINUX_F_RDLCK 0 1494d0f380dSDmitry Chagin #define LINUX_F_WRLCK 1 1504d0f380dSDmitry Chagin #define LINUX_F_UNLCK 2 1514d0f380dSDmitry Chagin #endif 1524d0f380dSDmitry Chagin 15301b9ee4cSEd Maste /* 15401b9ee4cSEd Maste * renameat2 flags 15501b9ee4cSEd Maste */ 15601b9ee4cSEd Maste #define LINUX_RENAME_NOREPLACE 0x00000001 15701b9ee4cSEd Maste #define LINUX_RENAME_EXCHANGE 0x00000002 15801b9ee4cSEd Maste #define LINUX_RENAME_WHITEOUT 0x00000004 15901b9ee4cSEd Maste 160cf69fe66SEdward Tomasz Napierala /* 161cf69fe66SEdward Tomasz Napierala * sync_file_range flags 162cf69fe66SEdward Tomasz Napierala */ 163cf69fe66SEdward Tomasz Napierala #define LINUX_SYNC_FILE_RANGE_WAIT_BEFORE 1 164cf69fe66SEdward Tomasz Napierala #define LINUX_SYNC_FILE_RANGE_WRITE 2 165cf69fe66SEdward Tomasz Napierala #define LINUX_SYNC_FILE_RANGE_WAIT_AFTER 4 166cf69fe66SEdward Tomasz Napierala 1675403f186SKyle Evans #define LINUX_F_SEAL_SEAL 0x0001 1685403f186SKyle Evans #define LINUX_F_SEAL_SHRINK 0x0002 1695403f186SKyle Evans #define LINUX_F_SEAL_GROW 0x0004 1705403f186SKyle Evans #define LINUX_F_SEAL_WRITE 0x0008 1715403f186SKyle Evans 1725403f186SKyle Evans #define LINUX_MFD_CLOEXEC 0x0001 1735403f186SKyle Evans #define LINUX_MFD_ALLOW_SEALING 0x0002 1745403f186SKyle Evans #define LINUX_MFD_HUGETLB 0x0004 1755403f186SKyle Evans 1765403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_SHIFT 26 1775403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_MASK 0x3f 1785403f186SKyle Evans 1795403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_64KB (16 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1805403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_512KB (19 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1815403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_1MB (20 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1825403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_2MB (21 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1835403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_8MB (23 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1845403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_16MB (24 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1855403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_32MB (25 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1865403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_256MB (28 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1875403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_512MB (29 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1885403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_1GB (30 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1895403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_2GB (31 << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1905403f186SKyle Evans #define LINUX_HUGETLB_FLAG_ENCODE_16GB (34U << LINUX_HUGETLB_FLAG_ENCODE_SHIFT) 1915403f186SKyle Evans 192e58ff664SDmitry Chagin #if defined(_KERNEL) 193de774e42SConrad Meyer struct l_file_handle { 194de774e42SConrad Meyer l_uint handle_bytes; 195de774e42SConrad Meyer l_int handle_type; 196de774e42SConrad Meyer unsigned char f_handle[0]; 197de774e42SConrad Meyer }; 198de774e42SConrad Meyer 199e58ff664SDmitry Chagin int linux_enobufs2eagain(struct thread *, int, int); 200*9c7b1bf2SRicardo Branco int linux_common_openflags(int); 201e58ff664SDmitry Chagin #endif 202e58ff664SDmitry Chagin 20371bc1780SDmitry Chagin /* 20471bc1780SDmitry Chagin * Look at linux_close_range() for an explanation. 20571bc1780SDmitry Chagin * 20671bc1780SDmitry Chagin * #define LINUX_CLOSE_RANGE_UNSHARE (1U << 1) 20771bc1780SDmitry Chagin */ 20871bc1780SDmitry Chagin #define LINUX_CLOSE_RANGE_CLOEXEC (1U << 2) 20971bc1780SDmitry Chagin 21048b05c3fSKonstantin Belousov #endif /* !_LINUX_FILE_H_ */ 211