blob: 0077f00cb9490421ca5a348f07e2d82fc6508e65 [file] [log] [blame]
/* 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__ */