
D front-end changes: - Import dmd v2.101.0-beta.1. - Add predefined version `D_Optimized' when compiling with `-O'. - Shortened method syntax (DIP1043) is now enabled by default. - Array literals assigned to `scope' array variables are now allocated on the stack. - Implement `@system' variables (DIP1035), available behind the preview feature flag `-fpreview=systemvariables'. D runtime changes: - Import druntime v2.101.0-beta.1. Phobos changes: - Import phobos v2.101.0-beta.1. - Added `std.typecons.SafeRefCounted', that can be used in `@safe' code with `-fpreview=dip1000'. gcc/d/ChangeLog: * d-attribs.cc (apply_user_attributes): Update for new front-end interface. * d-builtins.cc (d_init_versions): Predefine `D_Optimized' with compiling with optimizations enabled. * d-lang.cc (d_handle_option): Update for new front-end interface. Handle new option `-fpreview=systemvariables'. * dmd/MERGE: Merge upstream dmd e4f8919591. * dmd/VERSION: Bump version to v2.101.0-beta.1. * expr.cc (ExprVisitor::visit (AssignExp *)): Treat construction of static arrays from a call expression as a simple assignment. (ExprVisitor::visit (ArrayLiteralExp *)): Handle array literals with `scope' storage. * gdc.texi: Update documentation of `-fpreview=' options. * lang.opt (fpreview=shortenedmethods): Remove. (fpreview=systemvariables): New option. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime e4f8919591. * src/MERGE: Merge upstream phobos 3ad507b51. gcc/testsuite/ChangeLog: * gdc.dg/simd19630.d: Move tests with errors to ... * gdc.dg/simd19630b.d: ... here. New test. * gdc.dg/simd19630c.d: New test. * gdc.dg/simd_ctfe.d: Removed. * gdc.dg/simd18867.d: New test. * gdc.dg/simd19788.d: New test. * gdc.dg/simd21469.d: New test. * gdc.dg/simd21672.d: New test. * gdc.dg/simd23077.d: New test. * gdc.dg/simd23084.d: New test. * gdc.dg/simd23085.d: New test. * gdc.dg/torture/simd19632.d: New test. * gdc.dg/torture/simd20041.d: New test. * gdc.dg/torture/simd21673.d: New test. * gdc.dg/torture/simd21676.d: New test. * gdc.dg/torture/simd22438.d: New test. * gdc.dg/torture/simd23009.d: New test. * gdc.dg/torture/simd23077.d: New test. * gdc.dg/torture/simd8.d: New test. * gdc.dg/torture/simd9.d: New test. * gdc.dg/torture/simd_prefetch.d: New test.
267 lines
9 KiB
D
267 lines
9 KiB
D
/**
|
|
* D header file for the linux/fs.h interface.
|
|
*
|
|
* This file has definitions for some important file table structures
|
|
* and constants and structures used by various generic file system
|
|
* ioctl's.
|
|
*
|
|
* Copyright: The D Language Foundation 2021.
|
|
* License : $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost License 1.0)
|
|
* Authors : Luís Ferreira
|
|
*/
|
|
module core.sys.linux.fs;
|
|
|
|
version (linux):
|
|
|
|
public import core.sys.posix.sys.ioctl;
|
|
|
|
import core.stdc.config : c_ulong, c_long;
|
|
|
|
extern (C):
|
|
@nogc:
|
|
nothrow:
|
|
|
|
enum INR_OPEN_CUR = 1024; /// Initial setting for nfile rlimits
|
|
enum INR_OPEN_MAX = 4096; /// Hard limit for nfile rlimits
|
|
|
|
enum BLOCK_SIZE_BITS = 10; ///
|
|
enum BLOCK_SIZE = 1 << BLOCK_SIZE_BITS; ///
|
|
|
|
enum
|
|
{
|
|
SEEK_SET = 0, /// seek relative to beginning of file
|
|
SEEK_CUR = 1, /// seek relative to current file position
|
|
SEEK_END = 2, /// seek relative to end of file
|
|
SEEK_DATA = 3, /// seek to the next data
|
|
SEEK_HOLE = 4, /// seek to the next hole
|
|
SEEK_MAX = SEEK_HOLE, ///
|
|
}
|
|
|
|
enum
|
|
{
|
|
RENAME_NOREPLACE = 1 << 0, /// Don't overwrite target
|
|
RENAME_EXCHANGE = 1 << 1, /// Exchange source and dest
|
|
RENAME_WHITEOUT = 1 << 2, /// Whiteout source
|
|
}
|
|
|
|
struct file_clone_range
|
|
{
|
|
long src_fd;
|
|
ulong src_offset;
|
|
ulong src_length;
|
|
ulong dest_offset;
|
|
}
|
|
|
|
struct fstrim_range
|
|
{
|
|
ulong start;
|
|
ulong len;
|
|
ulong minlen;
|
|
}
|
|
|
|
/**
|
|
* extent-same (dedupe) ioctls; these MUST match the btrfs ioctl definitions
|
|
*/
|
|
enum
|
|
{
|
|
FILE_DEDUPE_RANGE_SAME = 0,
|
|
FILE_DEDUPE_RANGE_DIFFERS = 1,
|
|
}
|
|
|
|
/**
|
|
* from struct btrfs_ioctl_file_extent_same_info
|
|
*/
|
|
struct file_dedupe_range_info
|
|
{
|
|
long dest_fd; /// in - destination file
|
|
ulong dest_offset; /// in - start of extent in destination
|
|
ulong bytes_deduped; /// out - total # of bytes we were able to dedupe from this file.
|
|
/** status of this dedupe operation:
|
|
* < 0 for error
|
|
* == FILE_DEDUPE_RANGE_SAME if dedupe succeeds
|
|
* == FILE_DEDUPE_RANGE_DIFFERS if data differs
|
|
*/
|
|
int status;
|
|
uint reserved; /// must be zero
|
|
}
|
|
|
|
/**
|
|
* from struct btrfs_ioctl_file_extent_same_args
|
|
*/
|
|
struct file_dedupe_range
|
|
{
|
|
ulong src_offset; /// in - start of extent in source
|
|
ulong src_length; /// in - length of extent
|
|
ushort dest_count; /// in - total elements in info array
|
|
ushort reserved1; /// must be zero
|
|
uint reserved2; /// must be zero
|
|
file_dedupe_range_info[0] info;
|
|
}
|
|
|
|
/**
|
|
* And dynamically-tunable limits and defaults:
|
|
*/
|
|
struct files_stat_struct
|
|
{
|
|
c_ulong nr_files; /// read only
|
|
c_ulong nr_free_files; /// read only
|
|
c_ulong max_files; /// tunable
|
|
}
|
|
|
|
struct inodes_stat_t
|
|
{
|
|
c_long nr_inodes;
|
|
c_long nr_unused;
|
|
c_long[5] dummy; /// padding for sysctl ABI compatibility
|
|
}
|
|
|
|
enum NR_FILE = 8192;
|
|
|
|
/**
|
|
* Structure for FS_IOC_FSGETXATTR[A] and FS_IOC_FSSETXATTR.
|
|
*/
|
|
struct fsxattr
|
|
{
|
|
uint fsx_xflags;
|
|
uint fsx_extsize;
|
|
uint fsx_nextents;
|
|
uint fsx_projid; /// project identifier
|
|
uint fsx_cowextsize; /// CoW extsize
|
|
ubyte[8] fsx_pad;
|
|
}
|
|
|
|
/*
|
|
* Flags for the fsx_xflags field
|
|
*/
|
|
enum {
|
|
S_XFLAG_REALTIME = 0x00000001, /// data in realtime volume
|
|
S_XFLAG_PREALLOC = 0x00000002, /// preallocated file extents
|
|
S_XFLAG_IMMUTABLE = 0x00000008, /// file cannot be modified
|
|
S_XFLAG_APPEND = 0x00000010, /// all writes append
|
|
S_XFLAG_SYNC = 0x00000020, /// all writes synchronous
|
|
S_XFLAG_NOATIME = 0x00000040, /// do not update access time
|
|
S_XFLAG_NODUMP = 0x00000080, /// do not include in backups
|
|
S_XFLAG_RTINHERIT = 0x00000100, /// create with rt bit set
|
|
S_XFLAG_PROJINHERIT = 0x00000200, /// create with parents projid
|
|
S_XFLAG_NOSYMLINKS = 0x00000400, /// disallow symlink creation
|
|
S_XFLAG_EXTSIZE = 0x00000800, /// extent size allocator hint
|
|
S_XFLAG_EXTSZINHERIT = 0x00001000, /// inherit inode extent size
|
|
S_XFLAG_NODEFRAG = 0x00002000, /// do not defragment
|
|
S_XFLAG_FILESTREAM = 0x00004000, /// use filestream allocator
|
|
S_XFLAG_DAX = 0x00008000, /// use DAX for IO
|
|
S_XFLAG_COWEXTSIZE = 0x00010000, /// CoW extent size allocator hint
|
|
S_XFLAG_HASATTR = 0x80000000, /// no DIFLAG for this
|
|
}
|
|
|
|
static if (__traits(compiles, _IO(1, 2)))
|
|
{
|
|
enum BLKROSET = _IO(0x12, 93); /// set device read-only
|
|
enum BLKROGET = _IO(0x12, 94); /// get read-only status
|
|
enum BLKRRPART = _IO(0x12, 95); /// re-read partition table
|
|
enum BLKGETSIZE = _IO(0x12, 96); /// return device size
|
|
enum BLKFLSBUF = _IO(0x12, 97); /// flush buffer cache
|
|
enum BLKRASET = _IO(0x12, 98); /// set read ahead for block device
|
|
enum BLKRAGET = _IO(0x12, 99); /// get current read ahead setting
|
|
enum BLKFRASET = _IO(0x12, 100); /// set filesystem
|
|
enum BLKFRAGET = _IO(0x12, 101); /// get filesystem
|
|
enum BLKSECTSET = _IO(0x12, 102); /// set max sectors per request
|
|
enum BLKSECTGET = _IO(0x12, 103); /// get max sectors per request
|
|
enum BLKSSZGET = _IO(0x12, 104); /// get block device sector size
|
|
|
|
|
|
enum BLKBSZGET = _IOR!size_t(0x12, 112);
|
|
enum BLKBSZSET = _IOW!size_t(0x12, 113);
|
|
enum BLKGETSIZE64 = _IOR!size_t(0x12, 114);
|
|
enum BLKTRACESTART = _IO(0x12, 116);
|
|
enum BLKTRACESTOP = _IO(0x12, 117);
|
|
enum BLKTRACETEARDOWN = _IO(0x12, 118);
|
|
enum BLKDISCARD = _IO(0x12, 119);
|
|
enum BLKIOMIN = _IO(0x12, 120);
|
|
enum BLKIOOPT = _IO(0x12, 121);
|
|
enum BLKALIGNOFF = _IO(0x12, 122);
|
|
enum BLKPBSZGET = _IO(0x12, 123);
|
|
enum BLKDISCARDZEROES = _IO(0x12, 124);
|
|
enum BLKSECDISCARD = _IO(0x12, 125);
|
|
enum BLKROTATIONAL = _IO(0x12, 126);
|
|
enum BLKZEROOUT = _IO(0x12, 127);
|
|
|
|
enum BMAP_IOCTL = 1; /// obsolete - kept for compatibility
|
|
enum FIBMAP = _IO(0x00, 1); /// bmap access
|
|
enum FIGETBSZ = _IO(0x00, 2); /// get the block size used for bmap
|
|
}
|
|
|
|
enum FSLABEL_MAX = 256; /// Max chars for the interface; each fs may differ
|
|
|
|
/**
|
|
* Inode flags (FS_IOC_GETFLAGS / FS_IOC_SETFLAGS)
|
|
*
|
|
* Note: for historical reasons, these flags were originally used and
|
|
* defined for use by ext2/ext3, and then other file systems started
|
|
* using these flags so they wouldn't need to write their own version
|
|
* of chattr/lsattr (which was shipped as part of e2fsprogs). You
|
|
* should think twice before trying to use these flags in new
|
|
* contexts, or trying to assign these flags, since they are used both
|
|
* as the UAPI and the on-disk encoding for ext2/3/4. Also, we are
|
|
* almost out of 32-bit flags. :-)
|
|
*
|
|
* We have recently hoisted FS_IOC_FSGETXATTR / FS_IOC_FSSETXATTR from
|
|
* XFS to the generic FS level interface. This uses a structure that
|
|
* has padding and hence has more room to grow, so it may be more
|
|
* appropriate for many new use cases.
|
|
*/
|
|
enum {
|
|
FS_SECRM_FL = 0x00000001, /// Secure deletion
|
|
FS_UNRM_FL = 0x00000002, /// Undelete
|
|
FS_COMPR_FL = 0x00000004, /// Compress file
|
|
FS_SYNC_FL = 0x00000008, /// Synchronous updates
|
|
FS_IMMUTABLE_FL = 0x00000010, /// Immutable file
|
|
FS_APPEND_FL = 0x00000020, /// writes to file may only append
|
|
FS_NODUMP_FL = 0x00000040, /// do not dump file
|
|
FS_NOATIME_FL = 0x00000080, /// do not update atime
|
|
FS_DIRTY_FL = 0x00000100, /// Reserved for compression usage
|
|
FS_COMPRBLK_FL = 0x00000200, /// One or more compressed clusters
|
|
FS_NOCOMP_FL = 0x00000400, /// Don't compress
|
|
FS_ENCRYPT_FL = 0x00000800, /// Encrypted file
|
|
FS_BTREE_FL = 0x00001000, /// btree format dir
|
|
FS_INDEX_FL = 0x00001000, /// hash-indexed directory
|
|
FS_IMAGIC_FL = 0x00002000, /// AFS directory
|
|
FS_JOURNAL_DATA_FL = 0x00004000, /// Reserved for ext3
|
|
FS_NOTAIL_FL = 0x00008000, /// file tail should not be merged
|
|
FS_DIRSYNC_FL = 0x00010000, /// dirsync behaviour (directories only)
|
|
FS_TOPDIR_FL = 0x00020000, /// Top of directory hierarchie
|
|
FS_HUGE_FILE_FL = 0x00040000, /// Reserved for ext4
|
|
FS_EXTENT_FL = 0x00080000, /// Extents
|
|
FS_VERITY_FL = 0x00100000, /// Verity protected inode
|
|
FS_EA_INODE_FL = 0x00200000, /// Inode used for large EA
|
|
FS_EOFBLOCKS_FL = 0x00400000, /// Reserved for ext4
|
|
FS_NOCOW_FL = 0x00800000, /// Do not cow file
|
|
FS_DAX_FL = 0x02000000, /// Inode is DAX
|
|
FS_INLINE_DATA_FL = 0x10000000, /// Reserved for ext4
|
|
FS_PROJINHERIT_FL = 0x20000000, /// Create with parents projid
|
|
FS_CASEFOLD_FL = 0x40000000, /// Folder is case insensitive
|
|
FS_RESERVED_FL = 0x80000000, /// reserved for ext2 lib
|
|
}
|
|
|
|
enum FS_FL_USER_VISIBLE = 0x0003DFFF; /// User visible flags
|
|
enum FS_FL_USER_MODIFIABLE = 0x000380FF; /// User modifiable flags
|
|
|
|
enum SYNC_FILE_RANGE_WAIT_BEFORE = 1;
|
|
enum SYNC_FILE_RANGE_WRITE = 2;
|
|
enum SYNC_FILE_RANGE_WAIT_AFTER = 4;
|
|
enum SYNC_FILE_RANGE_WRITE_AND_WAIT = SYNC_FILE_RANGE_WRITE | SYNC_FILE_RANGE_WAIT_BEFORE | SYNC_FILE_RANGE_WAIT_AFTER;
|
|
|
|
alias __kernel_rwf_t = int;
|
|
|
|
/**
|
|
* Flags for preadv2/pwritev2:
|
|
*/
|
|
enum : __kernel_rwf_t {
|
|
RWF_HIPRI = 0x00000001, /// high priority request, poll if possible
|
|
RWF_DSYNC = 0x00000002, /// per-IO O_DSYNC
|
|
RWF_SYNC = 0x00000004, /// per-IO O_SYNC
|
|
RWF_NOWAIT = 0x00000008, /// per-IO, return -EAGAIN if operation would block
|
|
RWF_APPEND = 0x00000010, /// per-IO O_APPEND
|
|
}
|
|
|
|
/// mask of flags supported by the kernel
|
|
enum RWF_SUPPORTED = RWF_HIPRI | RWF_DSYNC | RWF_SYNC | RWF_NOWAIT | RWF_APPEND;
|