Skip to content

Commit 4800181

Browse files
authored
ioctl: remove FICLONE/FICLONERANGE/FIDEDUPERANGE compat
These are only required to support these ioctls on Linux <4.5. Since 4.18 is our cutoff, we don't need this code anymore. Also removing related test things that will never match again. Sponsored-by: https://despairlabs.com/sponsor/ Reviewed-by: Alexander Motin <[email protected]> Reviewed-by: Tony Hutter <[email protected]> Signed-off-by: Rob Norris <[email protected]> Closes #17308
1 parent 78628a5 commit 4800181

32 files changed

+0
-196
lines changed

include/os/linux/zfs/sys/zpl.h

Lines changed: 0 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -123,41 +123,6 @@ extern int zpl_clone_file_range(struct file *src_file, loff_t src_off,
123123
extern int zpl_dedupe_file_range(struct file *src_file, loff_t src_off,
124124
struct file *dst_file, loff_t dst_off, uint64_t len);
125125

126-
/* compat for FICLONE/FICLONERANGE/FIDEDUPERANGE ioctls */
127-
typedef struct {
128-
int64_t fcr_src_fd;
129-
uint64_t fcr_src_offset;
130-
uint64_t fcr_src_length;
131-
uint64_t fcr_dest_offset;
132-
} zfs_ioc_compat_file_clone_range_t;
133-
134-
typedef struct {
135-
int64_t fdri_dest_fd;
136-
uint64_t fdri_dest_offset;
137-
uint64_t fdri_bytes_deduped;
138-
int32_t fdri_status;
139-
uint32_t fdri_reserved;
140-
} zfs_ioc_compat_dedupe_range_info_t;
141-
142-
typedef struct {
143-
uint64_t fdr_src_offset;
144-
uint64_t fdr_src_length;
145-
uint16_t fdr_dest_count;
146-
uint16_t fdr_reserved1;
147-
uint32_t fdr_reserved2;
148-
zfs_ioc_compat_dedupe_range_info_t fdr_info[];
149-
} zfs_ioc_compat_dedupe_range_t;
150-
151-
#define ZFS_IOC_COMPAT_FICLONE _IOW(0x94, 9, int)
152-
#define ZFS_IOC_COMPAT_FICLONERANGE \
153-
_IOW(0x94, 13, zfs_ioc_compat_file_clone_range_t)
154-
#define ZFS_IOC_COMPAT_FIDEDUPERANGE \
155-
_IOWR(0x94, 54, zfs_ioc_compat_dedupe_range_t)
156-
157-
extern long zpl_ioctl_ficlone(struct file *filp, void *arg);
158-
extern long zpl_ioctl_ficlonerange(struct file *filp, void *arg);
159-
extern long zpl_ioctl_fideduperange(struct file *filp, void *arg);
160-
161126

162127
#if defined(HAVE_INODE_TIMESTAMP_TRUNCATE)
163128
#define zpl_inode_timestamp_truncate(ts, ip) timestamp_truncate(ts, ip)

module/os/linux/zfs/zpl_file.c

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,12 +1004,6 @@ zpl_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
10041004
return (zpl_ioctl_getdosflags(filp, (void *)arg));
10051005
case ZFS_IOC_SETDOSFLAGS:
10061006
return (zpl_ioctl_setdosflags(filp, (void *)arg));
1007-
case ZFS_IOC_COMPAT_FICLONE:
1008-
return (zpl_ioctl_ficlone(filp, (void *)arg));
1009-
case ZFS_IOC_COMPAT_FICLONERANGE:
1010-
return (zpl_ioctl_ficlonerange(filp, (void *)arg));
1011-
case ZFS_IOC_COMPAT_FIDEDUPERANGE:
1012-
return (zpl_ioctl_fideduperange(filp, (void *)arg));
10131007
default:
10141008
return (-ENOTTY);
10151009
}

module/os/linux/zfs/zpl_file_range.c

Lines changed: 0 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -212,85 +212,3 @@ zpl_dedupe_file_range(struct file *src_file, loff_t src_off,
212212
return (-EOPNOTSUPP);
213213
}
214214
#endif /* HAVE_VFS_DEDUPE_FILE_RANGE */
215-
216-
/* Entry point for FICLONE, before Linux 4.5. */
217-
long
218-
zpl_ioctl_ficlone(struct file *dst_file, void *arg)
219-
{
220-
unsigned long sfd = (unsigned long)arg;
221-
222-
struct file *src_file = fget(sfd);
223-
if (src_file == NULL)
224-
return (-EBADF);
225-
226-
if (dst_file->f_op != src_file->f_op) {
227-
fput(src_file);
228-
return (-EXDEV);
229-
}
230-
231-
size_t len = i_size_read(file_inode(src_file));
232-
233-
ssize_t ret = zpl_clone_file_range_impl(src_file, 0, dst_file, 0, len);
234-
235-
fput(src_file);
236-
237-
if (ret < 0) {
238-
if (ret == -EOPNOTSUPP)
239-
return (-ENOTTY);
240-
return (ret);
241-
}
242-
243-
if (ret != len)
244-
return (-EINVAL);
245-
246-
return (0);
247-
}
248-
249-
/* Entry point for FICLONERANGE, before Linux 4.5. */
250-
long
251-
zpl_ioctl_ficlonerange(struct file *dst_file, void __user *arg)
252-
{
253-
zfs_ioc_compat_file_clone_range_t fcr;
254-
255-
if (copy_from_user(&fcr, arg, sizeof (fcr)))
256-
return (-EFAULT);
257-
258-
struct file *src_file = fget(fcr.fcr_src_fd);
259-
if (src_file == NULL)
260-
return (-EBADF);
261-
262-
if (dst_file->f_op != src_file->f_op) {
263-
fput(src_file);
264-
return (-EXDEV);
265-
}
266-
267-
size_t len = fcr.fcr_src_length;
268-
if (len == 0)
269-
len = i_size_read(file_inode(src_file)) - fcr.fcr_src_offset;
270-
271-
ssize_t ret = zpl_clone_file_range_impl(src_file, fcr.fcr_src_offset,
272-
dst_file, fcr.fcr_dest_offset, len);
273-
274-
fput(src_file);
275-
276-
if (ret < 0) {
277-
if (ret == -EOPNOTSUPP)
278-
return (-ENOTTY);
279-
return (ret);
280-
}
281-
282-
if (ret != len)
283-
return (-EINVAL);
284-
285-
return (0);
286-
}
287-
288-
/* Entry point for FIDEDUPERANGE, before Linux 4.5. */
289-
long
290-
zpl_ioctl_fideduperange(struct file *filp, void *arg)
291-
{
292-
(void) arg;
293-
294-
/* No support for dedup yet */
295-
return (-ENOTTY);
296-
}

tests/zfs-tests/tests/functional/bclone/bclone_common.kshlib

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -31,13 +31,6 @@ export RECORDSIZE=$(zfs get -Hp -o value recordsize $TESTPOOL/$TESTFS)
3131
MINBLKSIZE1=512
3232
MINBLKSIZE2=1024
3333

34-
function verify_block_cloning
35-
{
36-
if is_linux && [[ $(linux_version) -lt $(linux_version "4.5") ]]; then
37-
log_unsupported "copy_file_range not available before Linux 4.5"
38-
fi
39-
}
40-
4134
function verify_crossfs_block_cloning
4235
{
4336
if is_linux && [[ $(linux_version) -lt $(linux_version "5.3") ]]; then

tests/zfs-tests/tests/functional/bclone/bclone_crossfs_corner_cases.ksh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030

3131
verify_runnable "both"
3232

33-
verify_block_cloning
3433
verify_crossfs_block_cloning
3534

3635
log_assert "Verify various corner cases in block cloning across datasets"

tests/zfs-tests/tests/functional/bclone/bclone_crossfs_corner_cases_limited.ksh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030

3131
verify_runnable "both"
3232

33-
verify_block_cloning
3433
verify_crossfs_block_cloning
3534

3635
log_assert "Verify various corner cases in block cloning across datasets"

tests/zfs-tests/tests/functional/bclone/bclone_crossfs_data.ksh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030

3131
verify_runnable "both"
3232

33-
verify_block_cloning
3433
verify_crossfs_block_cloning
3534

3635
log_assert "Verify block cloning properly clones regular files across datasets"

tests/zfs-tests/tests/functional/bclone/bclone_crossfs_embedded.ksh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030

3131
verify_runnable "both"
3232

33-
verify_block_cloning
3433
verify_crossfs_block_cloning
3534

3635
log_assert "Verify block cloning properly clones small files (with embedded blocks) across datasets"

tests/zfs-tests/tests/functional/bclone/bclone_crossfs_hole.ksh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030

3131
verify_runnable "both"
3232

33-
verify_block_cloning
3433
verify_crossfs_block_cloning
3534

3635
log_assert "Verify block cloning properly clones sparse files (files with holes) across datasets"

tests/zfs-tests/tests/functional/bclone/bclone_diffprops_all.ksh

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131

3232
verify_runnable "both"
3333

34-
verify_block_cloning
3534
verify_crossfs_block_cloning
3635

3736
log_assert "Verify block cloning across datasets with different properties"

0 commit comments

Comments
 (0)