|  | /* 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__ */ |