From nobody Tue Sep 29 00:32:59 2026 Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4532F43F09F for ; Fri, 14 Aug 2026 08:23:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786695819; cv=none; b=tLU8mqfZwESpFyiFLjPgy0Xniyj/RrR0S8h7wLZj7cTy4VbRzh8OYaq6gPPVUjcedUtzkyMa9GYr+Usn3OxHa+n71mgeCMvgUQ1AfIQsTe+n/e8FEd0CjF0TguTLcEmI9C9AbR41Pmh9g9/JZ71oa/tfgW6MCvhpdLpgs3FYDFE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786695819; c=relaxed/simple; bh=/d5UaxWRRebSUX1yWVvOqKotoQ8sdFO8+5euVROcwF4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YSL8sZlGETbl/dx1yRMUk/r0u26jRKMIIQOX/0rpdQeqZQiX7eJkphXI2QQFglWiICA/fie1o43KAAro2RzTpGosjXMMD343DcbsMWqyKUaKjnd3Qy2C0euGToiTlyN8AtF5NuLYB+5zYcmklmNNoVud6R3lK7ZNhbl+UsDnD6w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Uc3kg0NI; arc=none smtp.client-ip=209.85.216.44 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Uc3kg0NI" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-3811f512167so926796a91.3 for ; Fri, 14 Aug 2026 01:23:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1786695813; x=1787300613; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=PWjXRu/ESGgkh0xA8ezmxXOb+ei9vpWmx/ory7FD4Z0=; b=Uc3kg0NIuy4lVcNAJMTue4q4XUViig7JWAc0up2SJ7kw9EEk4Pq4ctwA/l351s0mMa kkVELK1dHXM2ntgMAjlKBKqbeBs4Usajn3InZ+mmLi3V632fOo4rwM6OWMIk+3OZW7tQ LscWOpS218h8CmlfoX5ElmkWnJ3LQ+uf5ydir6yHEHPPfC7v2pKbHKYZ1HJvrzA0iApy BU4XJlSGNJX+ZCP5ufSOfVSui8IqW6Sn41fSGugshuR3yhW384cY8UNfsg97GDVjZ/0S y//77GGa9y0s535UL752s7UTXBF5J+Z1zrNeJ/+pB7nJyZIECYoRJd0WsmeJpTZAf9Ub KtTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1786695813; x=1787300613; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=PWjXRu/ESGgkh0xA8ezmxXOb+ei9vpWmx/ory7FD4Z0=; b=DciTGt822EIfuBkIwe1EHWC28uwPJzQ9Z+ZPjQp7LIltmRXnGTn4xzbWHy5MZCSbi5 l6pbANfIE9/SOnEWSDtc9Rf6ihDtDLT+EYa+KbUAhWIgS7e4NNa+2AJdqDjF20qttZnM zatOk9u4NMpdhq3QoLym/HUABoYc/nDmdOB0cyr88p8qXoqSg9Rad/l405zTO5BxLxeZ TmttwHS8YP6ChIOoa1ICxWRq1cSh6Ch8z5zH0y2m13iUAaR9q+C8BDBcPkl0FaL5NPcA A+3JFEsiwroDG2gxh1WYe5HG0h1reIFvPoP0xjEQ4dRr0KT23j6eLh+ScQAjuWTOLa8/ DCLg== X-Forwarded-Encrypted: i=1; AHgh+RqCdtQbtVPz395N55q+31sJzqISEDX6RXqF3I2sa3t3kZ7FnXLWam/A3AzDn+ELisuEPVt0pB3MINksrXs=@vger.kernel.org X-Gm-Message-State: AOJu0YxJcDB1uNbW6X8kW2JBNxsTD2gjIOWSXdzcLuZcAOE0SnBWwYWS 2BkPT2WoEIWk/eeUFbVdtc0WT7qYuEq4KfvxSbJ2v4XaaGySagnyw7fqttcrZOjSnhg= X-Gm-Gg: AR+sD13IHMRFxoc5Wz0lsRitOVUM2s+JiniWhbJ4+AyDEFKs0Iult7+NLhpyNFNEkBR /EmAe7iazFXdvP4HAriCBq0heBDAjy5W7W3jlT0saXqR/zEZq5c560nvcCBsRdPkKmxePhnvYQL qlJ/lXQOvdZ9V8J8vGg+02DfuXRoJ6fxlF6LqtX4/C51VaGjiJHuK7kg9D2rzOLnQ1nQDKAVklK t3Zs0QwT9QpFmV3QTeW9oK43qIXYIxCyh3OLP+iDCPkuU3j22k3WkoGBmxHqH3xRWJRipTm+4Sh sZwGSDPqLbfjQ71EEJxUCElRmNu2OT4LCM1Uy0N7VY3g+X3UXNoc2CqsvYgXc4beGJVPZIkgnRT wGgRvUO2bAmy3ReVIZg3j13EesiX+r71P3vuD1IHGUMW61rEy9uFRnK8Nq0CsTYXHI3q6nrel1r 1Cp7w01HqfW817I6ISEnsPgKsyn3cNJsQQsQvaBFEe905pX431MdGB+0dk7DkaSr2gxdvwHL9Kl Tqsjavir1Bhrgrc3AdTnvNGhAxQF6atmuk54NGPSTibsHUWoly5nNCOWzepD2OzZFp6Zr5d5m6V r1eoX5W7mfQl1D41T096x42YQJruLABAbjEr8K1UdAABstFO62sR X-Received: by 2002:a17:90b:1a87:b0:38e:57a3:f218 with SMTP id 98e67ed59e1d1-3933b956294mr4159956a91.13.1786695812875; Fri, 14 Aug 2026 01:23:32 -0700 (PDT) Received: from spider.bream-herring.ts.net ([103.252.203.158]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-394ebb888cbsm1588075a91.9.2026.08.14.01.23.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 14 Aug 2026 01:23:32 -0700 (PDT) From: Matthias Goergens To: linux-fsdevel@vger.kernel.org Cc: viro@zeniv.linux.org.uk, brauner@kernel.org, jack@suse.cz, linux-kernel@vger.kernel.org, ansgar.loesser@kom.tu-darmstadt.de, djwong@kernel.org, david@fromorbit.com, amir73il@gmail.com Subject: [PATCH v2] vfs: add FILE_DEDUPE_RANGE_REPORT_PROGRESS flag to FIDEDUPERANGE Date: Fri, 14 Aug 2026 16:23:26 +0800 Message-ID: <20260814082326.3756669-2-matthias.goergens@gmail.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260814082326.3756669-1-matthias.goergens@gmail.com> References: <20260805071414.3414870-1-matthias.goergens@gmail.com> <20260814082326.3756669-1-matthias.goergens@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" FIDEDUPERANGE reports the requested length in bytes_deduped even when the filesystem shortens a destination range and deduplicates fewer bytes. This predates the VFS hoisting of the ioctl (the btrfs ioctl behaved the same way), and changing the default would change an ABI that deployed consumers such as duperemove depend on: they advance their offsets by bytes_deduped and expect the historical semantics. Add a flag to opt into the truthful behaviour: with FILE_DEDUPE_RANGE_REPORT_PROGRESS set, bytes_deduped reports the bytes actually deduplicated, and a non-zero request shortened to zero fails per destination with -EINVAL instead of reporting success with no progress. Unknown flag bits are rejected. The flag leaves every existing caller's behaviour unchanged and lets new callers request accurate progress reporting. Suggested-by: Darrick J. Wong Link: https://lore.kernel.org/linux-fsdevel/20260805071414.3414870-1-matthi= as.goergens@gmail.com/ Signed-off-by: Matthias Goergens --- fs/remap_range.c | 7 ++++++- include/uapi/linux/fs.h | 4 +++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/fs/remap_range.c b/fs/remap_range.c index 26afbbbfb10c2..16192ec19bb6d 100644 --- a/fs/remap_range.c +++ b/fs/remap_range.c @@ -503,7 +503,7 @@ int vfs_dedupe_file_range(struct file *file, struct fil= e_dedupe_range *same) if (!(file->f_mode & FMODE_READ)) return -EINVAL; =20 - if (same->reserved1 || same->reserved2) + if (same->reserved1 || (same->flags & ~FILE_DEDUPE_RANGE_REPORT_PROGRESS)) return -EINVAL; =20 off =3D same->src_offset; @@ -555,6 +555,11 @@ int vfs_dedupe_file_range(struct file *file, struct fi= le_dedupe_range *same) info->status =3D FILE_DEDUPE_RANGE_DIFFERS; else if (deduped < 0) info->status =3D deduped; + else if ((same->flags & FILE_DEDUPE_RANGE_REPORT_PROGRESS) && + !deduped && len) + info->status =3D -EINVAL; + else if (same->flags & FILE_DEDUPE_RANGE_REPORT_PROGRESS) + info->bytes_deduped =3D deduped; else info->bytes_deduped =3D len; =20 diff --git a/include/uapi/linux/fs.h b/include/uapi/linux/fs.h index bd87262f2e349..abee40359bfd5 100644 --- a/include/uapi/linux/fs.h +++ b/include/uapi/linux/fs.h @@ -179,12 +179,14 @@ struct file_dedupe_range_info { }; =20 /* from struct btrfs_ioctl_file_extent_same_args */ +#define FILE_DEDUPE_RANGE_REPORT_PROGRESS 0x1 + struct file_dedupe_range { __u64 src_offset; /* in - start of extent in source */ __u64 src_length; /* in - length of extent */ __u16 dest_count; /* in - total elements in info array */ __u16 reserved1; /* must be zero */ - __u32 reserved2; /* must be zero */ + __u32 flags; /* FILE_DEDUPE_RANGE_* flags; was reserved2 */ struct file_dedupe_range_info info[]; }; =20 --=20 2.55.0