| From b2b9ff44580b4184f82bf0df2a7b285a993fb8de Mon Sep 17 00:00:00 2001 |
| From: Xiaoli Feng <fengxiaoli0714@gmail.com> |
| Date: Sat, 16 Mar 2019 09:43:30 +0800 |
| Subject: Fix nfs4.2 return -EINVAL when do dedupe operation |
| |
| [ Upstream commit ce96e888fe48ecfa868c9a39adc03292c78a80ff ] |
| |
| dedupe_file_range operations is combiled into remap_file_range. |
| But in nfs42_remap_file_range, it's skiped for dedupe operations. |
| Before this patch: |
| # dd if=/dev/zero of=nfs/file bs=1M count=1 |
| # xfs_io -c "dedupe nfs/file 4k 64k 4k" nfs/file |
| XFS_IOC_FILE_EXTENT_SAME: Invalid argument |
| After this patch: |
| # dd if=/dev/zero of=nfs/file bs=1M count=1 |
| # xfs_io -c "dedupe nfs/file 4k 64k 4k" nfs/file |
| deduped 4096/4096 bytes at offset 65536 |
| 4 KiB, 1 ops; 0.0046 sec (865.988 KiB/sec and 216.4971 ops/sec) |
| |
| Signed-off-by: Xiaoli Feng <fengxiaoli0714@gmail.com> |
| Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| fs/nfs/nfs4file.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/fs/nfs/nfs4file.c b/fs/nfs/nfs4file.c |
| index 00d17198ee12a..f10b660805fc4 100644 |
| --- a/fs/nfs/nfs4file.c |
| +++ b/fs/nfs/nfs4file.c |
| @@ -187,7 +187,7 @@ static loff_t nfs42_remap_file_range(struct file *src_file, loff_t src_off, |
| bool same_inode = false; |
| int ret; |
| |
| - if (remap_flags & ~REMAP_FILE_ADVISORY) |
| + if (remap_flags & ~(REMAP_FILE_DEDUP | REMAP_FILE_ADVISORY)) |
| return -EINVAL; |
| |
| /* check alignment w.r.t. clone_blksize */ |
| -- |
| 2.20.1 |
| |