| /* SPDX-License-Identifier: GPL-2.0-or-later */ | |
| /* | |
| * Copyright (c) 2020-2024 Oracle. All Rights Reserved. | |
| * Author: Darrick J. Wong <djwong@kernel.org> | |
| */ | |
| #ifndef __XFS_EXCHRANGE_H__ | |
| #define __XFS_EXCHRANGE_H__ | |
| /* Update the mtime/cmtime of file1 and file2 */ | |
| #define __XFS_EXCHANGE_RANGE_UPD_CMTIME1 (1ULL << 63) | |
| #define __XFS_EXCHANGE_RANGE_UPD_CMTIME2 (1ULL << 62) | |
| /* Freshness check required */ | |
| #define __XFS_EXCHANGE_RANGE_CHECK_FRESH2 (1ULL << 61) | |
| #define XFS_EXCHANGE_RANGE_PRIV_FLAGS (__XFS_EXCHANGE_RANGE_UPD_CMTIME1 | \ | |
| __XFS_EXCHANGE_RANGE_UPD_CMTIME2 | \ | |
| __XFS_EXCHANGE_RANGE_CHECK_FRESH2) | |
| struct xfs_exchrange { | |
| struct file *file1; | |
| struct file *file2; | |
| loff_t file1_offset; | |
| loff_t file2_offset; | |
| u64 length; | |
| u64 flags; /* XFS_EXCHANGE_RANGE flags */ | |
| /* file2 metadata for freshness checks */ | |
| u64 file2_ino; | |
| struct timespec64 file2_mtime; | |
| struct timespec64 file2_ctime; | |
| u32 file2_gen; | |
| }; | |
| long xfs_ioc_exchange_range(struct file *file, | |
| struct xfs_exchange_range __user *argp); | |
| long xfs_ioc_start_commit(struct file *file, | |
| struct xfs_commit_range __user *argp); | |
| long xfs_ioc_commit_range(struct file *file, | |
| struct xfs_commit_range __user *argp); | |
| struct xfs_exchmaps_req; | |
| void xfs_exchrange_ilock(struct xfs_trans *tp, struct xfs_inode *ip1, | |
| struct xfs_inode *ip2); | |
| void xfs_exchrange_iunlock(struct xfs_inode *ip1, struct xfs_inode *ip2); | |
| int xfs_exchrange_estimate(struct xfs_exchmaps_req *req); | |
| #endif /* __XFS_EXCHRANGE_H__ */ |