From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.openvz.org (unknown [69.168.225.77]) by lore.virtuozzo.com (Postfix) with ESMTPS id 3C9368015C for ; Tue, 8 Sep 2026 13:40:17 +0000 (UTC) Received: from mail.openvz.org (localhost [127.0.0.1]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 688Dd1Km006066; Tue, 8 Sep 2026 16:39:02 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 688Dd1Km006066 Authentication-Results: mail.openvz.org; dkim=fail reason="signature verification failed" (2048-bit key) header.d=virtuozzo.com header.i=@virtuozzo.com header.b="FwxZZ3S0" Received: from mail-wr1-f69.google.com (mail-wr1-f69.google.com [209.85.221.69]) by mail.openvz.org (8.14.4/8.14.4) with ESMTP id 688DcwdS006062 (version=TLSv1/SSLv3 cipher=AES128-GCM-SHA256 bits=128 verify=FAIL) for ; Tue, 8 Sep 2026 16:38:59 +0300 DKIM-Filter: OpenDKIM Filter v2.11.0 mail.openvz.org 688DcwdS006062 Received: by mail-wr1-f69.google.com with SMTP id ffacd0b85a97d-4843dc86dddso3612879f8f.0 for ; Tue, 08 Sep 2026 06:38:59 -0700 (PDT) X-Forwarded-Encrypted: i=2; AKwUvBxfqP3TG2akTOrt1kutgpGwp1uFJWyzy+1fX3ueaYaL070Zf0CdCDfJBnGJGRrzptec1Tp4ng==@openvz.org X-Gm-Message-State: AFuF++kfMi5gU6xE9NSnh+4w43NqlTADEUEpz5tE3DcNObYWHrwSLBF9 T2QFF1KOycF//MVBMRmHFzt+6jHyKLGHlj8chqOHicMefhUDSqk/shyZHnxB7hospN9M50VS8OK gSWnqNYW6AlPMs4CpSLEITRgE8GFiyGPKrnAG8+kHSDI6VsZMcXiEIA== X-Gm-Gg: AYBFou2Medd//hOAoj7kMmH0cc1oYEdc57uaZNxDMvdnKWdIY/HgKUgIvj/yN7bj7ga wrej1Ijip/jFJU0Bd/5PwnsmTgTCzO6EZnol4/WrvQ6sdJJFsBwQqmzT4aFcXtK5dO+sumF7a3Y nQqW5YV9Sg9B5rs11hqI8SfY1BIbCBE7b/itRR9hmZraL9aTTNsPr+YIF+9fPDRK469AYWn6Od3 VGjYs0qfI1JKtQPc3gB2YeSDLVcgWvP8vlBI/96FZLGHY7WmuQJl7JBl4aKimyn8xcX1d/rOyHa Le515Cc2eaExViyULiRnpX2Sp+tIoDO4QDo77GMQpGYBfuukQ1072wGZBzKiSVRc//Zsv2afI7+ nt+OO/c7HBMtl4/Rg X-Received: by 2002:adf:e199:0:b0:485:8a46:7052 with SMTP id ffacd0b85a97d-4858a4671ffmr27924578f8f.36.1788874738729; Tue, 08 Sep 2026 06:38:58 -0700 (PDT) X-Received: by 2002:adf:e199:0:b0:485:8a46:7052 with SMTP id ffacd0b85a97d-4858a4671ffmr27924505f8f.36.1788874738143; Tue, 08 Sep 2026 06:38:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1788874738; cv=none; d=google.com; s=arc-20260327; b=GjQij0Td0FAwnM4JiSj6e21qyWKmhvHayORKmfD0Xi/g+M9VuQWVrQEMU0RIvyGjTh Zm3GyLrZ7dZ7amkTtrg2oYPrE/cPjA3BvPGSn1Uf7i0c0YPnGBPLsOt7Jls0CF9Amvza mpTSVla52pIjxFmeeVdCnRz6jUSVTk0eZFjbggOZbJpeF0Q3SIx2g++hu3BclCECic9O 0chi8G5tS+cajlyjQwC6FqXl0g7G3v2gMyoLITsSynQsC5po4TW+sv5rBgxtbRS83bqo 1o0C0VQ8xvjnnUVsSNmq8oRKsUEhVFJ5QoycHpjjKqQPK5fMNaVNJ7aIvTkUVc0dHUW/ DCog== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20260327; h=cc:to:message-id:content-transfer-encoding:mime-version:subject :date:from:dkim-signature; bh=iLPsEzz8DjDNFQRoRezWBACReOBKYkhu8Gp/sAN37L8=; fh=ZflIpicFxcSKqpKYxiroCc3TPYKPcDQwM82jGI2KMTA=; b=bmM9Z5LfYcS4MCn5btjASGDi7In+H8HGCFAo15pYpYItjQ23slcKemGSAWMdkbsNhO jJnB3RmPRkmAI/4kOZjK2SWZ307V0R4/hcUYlOKdufX3W1bejIOtfky8i3RBxnfDD7NC 0Z5kcuG+fMR03B6j80Dd0HVOYrXO/yapUFn/XRhzw5LEnOyDfr2UvEqhCDgw0Ek/Cp+l 7nOtFEDBiSg9ZxNRMSRlpHIJyjPhe9OmDoEYFRmU/D3CbUQz+iJGoX7hX6QWTuVVd3uI zgvCetPul5WQt0DfC9WhHALlQGjSQiXhceSSMvszPQ1Xzvyw0/UE+D+rbkbXxawWStmt SeRQ==; dara=google.com ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=FwxZZ3S0; spf=pass (google.com: domain of khorenko@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=khorenko@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com Received: from relay.virtuozzo.com (relay.virtuozzo.com. [130.117.225.111]) by mx.google.com with ESMTPS id ffacd0b85a97d-4858bcf2c07si24795073f8f.234.2026.09.08.06.38.58 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 08 Sep 2026 06:38:58 -0700 (PDT) Received-SPF: pass (google.com: domain of khorenko@virtuozzo.com designates 130.117.225.111 as permitted sender) client-ip=130.117.225.111; Authentication-Results: mx.google.com; dkim=pass header.i=@virtuozzo.com header.s=relay header.b=FwxZZ3S0; spf=pass (google.com: domain of khorenko@virtuozzo.com designates 130.117.225.111 as permitted sender) smtp.mailfrom=khorenko@virtuozzo.com; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=virtuozzo.com DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=Message-Id:Content-Type:MIME-Version:Subject:Date :From; bh=iLPsEzz8DjDNFQRoRezWBACReOBKYkhu8Gp/sAN37L8=; b=FwxZZ3S0gdtSRkWKdcE UJ+Ffl5GGctqsrpeCk3pO7YtWZ+Sx5XWDqdOcPtjSbusfDZHsVacE6QnQnCCW8HfPO2D/Arg4aYFO 0uFjJAcbV4N09zhqkFTlKbFeHO4DQEt4XLg20XroHjzcC5y80s6dRvWG49DjENADX/nMiSR+CrezA eIjOn40I9st8nO6V6rW5NxSS50gYUzADWLyFLqUYW5efLAvqkykngNMtAgd39duEiHgmD6Rn8zjEx r/R/4QcZzb0RJ4MBwBMnksekHZr0vkADxV4dkvl/HXJ99O933vaoR+PREjbbJkKpBMVHAJu6wXnEW DORUXGLabRKnP1g==; Received: from ch-demo-asa.virtuozzo.com ([130.117.225.8] helo=f0.sw.ru) by relay.virtuozzo.com with esmtp (Exim 4.96) (envelope-from ) id 1x3vzn-00Ah6q-12; Tue, 08 Sep 2026 15:38:47 +0200 From: Konstantin Khorenko Date: Tue, 08 Sep 2026 15:38:18 +0200 MIME-Version: 1.0 Message-Id: <20260908-pr-khorenko-vstor-144521-falloc_fl_preallocate-v1-1-f14f74322d0c@virtuozzo.com> X-B4-Tracking: v=1; b=H4sIAMkPoGoC/yWNUQ7CIBBEr9Lst5sspCp6FWMaxMViCTSAxNj07 mL9mzeTzFsgc3Kc4dwtkLi67GJoIHYdmFGHB6O7NwZJ8kAnUjgnnMaYOEwRay4xoej7vRRotff RDNYPc+It68Jo2CgyrI5EBO20bda9N+EF6kcQXP9tft2ebMrPBev6BRddN+6YAAAA X-Change-ID: 20260908-pr-khorenko-vstor-144521-falloc_fl_preallocate-cec80ce87000 To: Alexey Kuznetsov X-Mailer: b4 0.16.0 X-OZ-Fwd: true Cc: "Denis V. Lunev" , devel@openvz.org Subject: [Devel] [PATCH vz10] fs: move FALLOC_FL_PREALLOCATE to a bit upstream has not taken X-BeenThere: devel@openvz.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: OpenVZ development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: devel-bounces@openvz.org Errors-To: devel-bounces@openvz.org We had FALLOC_FL_PREALLOCATE == 0x80. Upstream commit 7bd43cc79cab ("fs: introduce FALLOC_FL_WRITE_ZEROES to fallocate"), released in v6.17, gives 0x80 to a mode of its own and adds it to FALLOC_FL_MODE_MASK. Move the mode to 0x00100000, well above the range upstream allocates modes from and away from the top of the word, where a future user is just as likely to start. The number cannot simply change, though, because userspace carries its own copy of it. Export the value as a read-only ext4 module parameter, /sys/module/ext4/parameters/falloc_fl_preallocate, and let userspace read the mode from there. The old value stays accepted as FALLOC_FL_PREALLOCATE_OLD, so that userspace built before this change keeps working. It has to be dropped before the rebase onto v6.17 or later, otherwise we would take FALLOC_FL_WRITE_ZEROES requests for our own mode. Feature: ext4: preallocation flag for small fallocates https://virtuozzo.atlassian.net/browse/VSTOR-144521 Signed-off-by: Konstantin Khorenko --- Follow-up to the v3 thread of "fs/ext4: let FALLOC_FL_PREALLOCATE through the vfs_fallocate mode switch": 0x80 is FALLOC_FL_WRITE_ZEROES upstream since v6.17, so our mode has to move before we rebase onto it, and the value has to become discoverable instead of hardcoded on both sides. --- fs/ext4/extents.c | 14 ++++++++++---- fs/open.c | 1 + include/linux/falloc.h | 3 ++- include/uapi/linux/falloc.h | 15 ++++++++++++++- 4 files changed, 27 insertions(+), 6 deletions(-) diff --git a/fs/ext4/extents.c b/fs/ext4/extents.c index 38f50770f6585..eca3f0312ac53 100644 --- a/fs/ext4/extents.c +++ b/fs/ext4/extents.c @@ -39,6 +39,10 @@ static unsigned int falloc_prealloc; module_param(falloc_prealloc, uint, 0644); MODULE_PARM_DESC(falloc_prealloc, "Preallocate fallocate like it is a write for smaller sizes"); +static unsigned int falloc_fl_preallocate = FALLOC_FL_PREALLOCATE; +module_param(falloc_fl_preallocate, uint, 0444); +MODULE_PARM_DESC(falloc_fl_preallocate, "fallocate() mode value asking for preallocation"); + /* * used by extent splitting. */ @@ -4514,8 +4518,8 @@ static int ext4_alloc_file_blocks(struct file *file, ext4_lblk_t offset, * that it doesn't get unnecessarily split into multiple * extents. */ - if (!(mode & FALLOC_FL_PREALLOCATE) && len <= EXT_UNWRITTEN_MAX_LEN && - len > falloc_prealloc) + if (!(mode & (FALLOC_FL_PREALLOCATE | FALLOC_FL_PREALLOCATE_OLD)) && + len <= EXT_UNWRITTEN_MAX_LEN && len > falloc_prealloc) flags |= EXT4_GET_BLOCKS_NO_NORMALIZE; /* @@ -4754,7 +4758,8 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len) /* Return error if mode is not supported */ if (mode & ~(FALLOC_FL_KEEP_SIZE | FALLOC_FL_PUNCH_HOLE | FALLOC_FL_COLLAPSE_RANGE | FALLOC_FL_ZERO_RANGE | - FALLOC_FL_INSERT_RANGE | FALLOC_FL_PREALLOCATE)) + FALLOC_FL_INSERT_RANGE | FALLOC_FL_PREALLOCATE | + FALLOC_FL_PREALLOCATE_OLD)) return -EOPNOTSUPP; inode_lock(inode); @@ -4770,7 +4775,8 @@ long ext4_fallocate(struct file *file, int mode, loff_t offset, loff_t len) goto out_inode_lock; if ((mode & FALLOC_FL_MODE_MASK) == FALLOC_FL_ALLOCATE_RANGE || - (mode & FALLOC_FL_MODE_MASK) == FALLOC_FL_PREALLOCATE) { + (mode & FALLOC_FL_MODE_MASK) == FALLOC_FL_PREALLOCATE || + (mode & FALLOC_FL_MODE_MASK) == FALLOC_FL_PREALLOCATE_OLD) { ret = ext4_do_fallocate(file, offset, len, mode); goto out_inode_lock; } diff --git a/fs/open.c b/fs/open.c index fc72ad09e7e81..65c96bf03dc93 100644 --- a/fs/open.c +++ b/fs/open.c @@ -268,6 +268,7 @@ int vfs_fallocate(struct file *file, int mode, loff_t offset, loff_t len) case FALLOC_FL_UNSHARE_RANGE: case FALLOC_FL_ZERO_RANGE: case FALLOC_FL_PREALLOCATE: + case FALLOC_FL_PREALLOCATE_OLD: break; case FALLOC_FL_PUNCH_HOLE: if (!(mode & FALLOC_FL_KEEP_SIZE)) diff --git a/include/linux/falloc.h b/include/linux/falloc.h index f6eee099b3fca..58e991ea6771f 100644 --- a/include/linux/falloc.h +++ b/include/linux/falloc.h @@ -37,7 +37,8 @@ struct space_resv { FALLOC_FL_ZERO_RANGE | \ FALLOC_FL_INSERT_RANGE | \ FALLOC_FL_UNSHARE_RANGE | \ - FALLOC_FL_PREALLOCATE) + FALLOC_FL_PREALLOCATE | \ + FALLOC_FL_PREALLOCATE_OLD) /* on ia32 l_start is on a 32-bit boundary */ #if defined(CONFIG_X86_64) diff --git a/include/uapi/linux/falloc.h b/include/uapi/linux/falloc.h index 7ac8ffb8e6523..49aa826ad8f8a 100644 --- a/include/uapi/linux/falloc.h +++ b/include/uapi/linux/falloc.h @@ -78,6 +78,19 @@ */ #define FALLOC_FL_UNSHARE_RANGE 0x40 -#define FALLOC_FL_PREALLOCATE 0x80 +/* + * FALLOC_FL_PREALLOCATE tells the filesystem to allocate the range the way a + * write would, with mballoc preallocation, rather than trimming the request + * down to a single unwritten extent. + * + * Userspace may read the mode value from + * /sys/module/ext4/parameters/falloc_fl_preallocate. + * + * FALLOC_FL_PREALLOCATE_OLD is the value used before upstream v6.17 claimed + * 0x80 for FALLOC_FL_WRITE_ZEROES. It is accepted as an alias of the above, + * and has to be dropped before a rebase onto v6.17 or later. + */ +#define FALLOC_FL_PREALLOCATE_OLD 0x80 +#define FALLOC_FL_PREALLOCATE 0x00100000 #endif /* _UAPI_FALLOC_H_ */ --- base-commit: 3466ec0b2cdf9d49dbb36d7b5ed9b36dfb2fb04d change-id: 20260908-pr-khorenko-vstor-144521-falloc_fl_preallocate-cec80ce87000 Best regards, -- Konstantin Khorenko _______________________________________________ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel