| /* SPDX-License-Identifier: LGPL-2.1 */ |
| /* |
| * Copyright (c) 1995-2005 Silicon Graphics, Inc. |
| * All Rights Reserved. |
| */ |
| #ifndef __XFS_FS_COMPAT_H__ |
| #define __XFS_FS_COMPAT_H__ |
| |
| /* |
| * Backwards-compatible definitions and structures for public kernel interfaces |
| */ |
| |
| /* |
| * Flags for the bs_xflags/fsx_xflags field in XFS_IOC_FS[GS]ETXATTR[A] |
| * These are for backwards compatibility only. New code should |
| * use the kernel [4.5 onwards] defined FS_XFLAG_* definitions directly. |
| */ |
| #define XFS_XFLAG_REALTIME FS_XFLAG_REALTIME |
| #define XFS_XFLAG_PREALLOC FS_XFLAG_PREALLOC |
| #define XFS_XFLAG_IMMUTABLE FS_XFLAG_IMMUTABLE |
| #define XFS_XFLAG_APPEND FS_XFLAG_APPEND |
| #define XFS_XFLAG_SYNC FS_XFLAG_SYNC |
| #define XFS_XFLAG_NOATIME FS_XFLAG_NOATIME |
| #define XFS_XFLAG_NODUMP FS_XFLAG_NODUMP |
| #define XFS_XFLAG_RTINHERIT FS_XFLAG_RTINHERIT |
| #define XFS_XFLAG_PROJINHERIT FS_XFLAG_PROJINHERIT |
| #define XFS_XFLAG_NOSYMLINKS FS_XFLAG_NOSYMLINKS |
| #define XFS_XFLAG_EXTSIZE FS_XFLAG_EXTSIZE |
| #define XFS_XFLAG_EXTSZINHERIT FS_XFLAG_EXTSZINHERIT |
| #define XFS_XFLAG_NODEFRAG FS_XFLAG_NODEFRAG |
| #define XFS_XFLAG_FILESTREAM FS_XFLAG_FILESTREAM |
| #define XFS_XFLAG_HASATTR FS_XFLAG_HASATTR |
| |
| /* |
| * Don't use this. |
| * Use struct file_clone_range |
| */ |
| struct xfs_clone_args { |
| __s64 src_fd; |
| __u64 src_offset; |
| __u64 src_length; |
| __u64 dest_offset; |
| }; |
| |
| /* |
| * Don't use these. |
| * Use FILE_DEDUPE_RANGE_SAME / FILE_DEDUPE_RANGE_DIFFERS |
| */ |
| #define XFS_EXTENT_DATA_SAME 0 |
| #define XFS_EXTENT_DATA_DIFFERS 1 |
| |
| /* Don't use this. Use file_dedupe_range_info */ |
| struct xfs_extent_data_info { |
| __s64 fd; /* in - destination file */ |
| __u64 logical_offset; /* in - start of extent in destination */ |
| __u64 bytes_deduped; /* out - total # of bytes we were able |
| * to dedupe from this file */ |
| /* status of this dedupe operation: |
| * < 0 for error |
| * == XFS_EXTENT_DATA_SAME if dedupe succeeds |
| * == XFS_EXTENT_DATA_DIFFERS if data differs |
| */ |
| __s32 status; /* out - see above description */ |
| __u32 reserved; |
| }; |
| |
| /* |
| * Don't use this. |
| * Use struct file_dedupe_range |
| */ |
| struct xfs_extent_data { |
| __u64 logical_offset; /* in - start of extent in source */ |
| __u64 length; /* in - length of extent */ |
| __u16 dest_count; /* in - total elements in info array */ |
| __u16 reserved1; |
| __u32 reserved2; |
| struct xfs_extent_data_info info[0]; |
| }; |
| |
| /* |
| * Don't use these. |
| * Use FICLONE/FICLONERANGE/FIDEDUPERANGE |
| */ |
| #define XFS_IOC_CLONE _IOW (0x94, 9, int) |
| #define XFS_IOC_CLONE_RANGE _IOW (0x94, 13, struct xfs_clone_args) |
| #define XFS_IOC_FILE_EXTENT_SAME _IOWR(0x94, 54, struct xfs_extent_data) |
| |
| /* 64-bit seconds counter that works independently of the C library time_t. */ |
| typedef long long int time64_t; |
| |
| struct timespec64 { |
| time64_t tv_sec; /* seconds */ |
| long tv_nsec; /* nanoseconds */ |
| }; |
| |
| #define U32_MAX ((uint32_t)~0U) |
| #define S32_MAX ((int32_t)(U32_MAX >> 1)) |
| #define S32_MIN ((int32_t)(-S32_MAX - 1)) |
| |
| #endif /* __XFS_FS_COMPAT_H__ */ |