On 10/4/18 5:27 PM, Darrick J. Wong wrote: > From: Darrick J. Wong <darrick.wong@xxxxxxxxxx> > > The dedupe command should only complain about non-matching extents if > the kernel hasn't managed to dedupe /any/ of the input range. > > Signed-off-by: Darrick J. Wong <darrick.wong@xxxxxxxxxx> Should it be "no extents matched" then perhaps? I mean xfs_io is not exactly-quite a purpose-built dedupe tool, but should we be a bit more specific if we're issuing a message at all? if (info->status == XFS_EXTENT_DATA_DIFFERS) { if (deduped == 0) fprintf(stderr, "XFS_IOC_FILE_EXTENT_SAME: %s\n", _("No extents matched.")); else fprintf(stderr, "XFS_IOC_FILE_EXTENT_SAME: %s\n", _("Some extents did not match.")); } And the manpage implies that any difference will make it fail: > map length bytes at offset dst_offset in the open file to the same physical > blocks that are mapped at offset src_offset in the file src_file, but only > if the contents of both ranges are identical. now you're telling me it'll make a best effort? ;) I think the manpage needs clarification too ... > --- > io/reflink.c | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/io/reflink.c b/io/reflink.c > index 26eb2e32..72dfe32d 100644 > --- a/io/reflink.c > +++ b/io/reflink.c > @@ -70,7 +70,8 @@ dedupe_ioctl( > _(strerror(-info->status))); > goto done; > } > - if (info->status == XFS_EXTENT_DATA_DIFFERS) { > + if (deduped == 0 && > + info->status == XFS_EXTENT_DATA_DIFFERS) { > fprintf(stderr, "XFS_IOC_FILE_EXTENT_SAME: %s\n", > _("Extents did not match.")); > goto done; >