From nobody Fri Jul 24 05:23:07 2026 Received: from mail-pj1-f52.google.com (mail-pj1-f52.google.com [209.85.216.52]) (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 BF1BA43BDD9 for ; Thu, 23 Jul 2026 13:36:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784813793; cv=none; b=mXHPrXMlDDuLEDoW6jt6Yson7BQtblIV7x7NgKn6PH0aVCZSlRMcNj5UGRMnUa429n3JPhFwsp/4jE+xd0Y9Xne2u4x8rvIz2JC383yPoWKSSElE/xcmT5dZsYpfqwlEbnJolybBNCrxX6355Vn2dOGV039N8k650Rji3SjpXFU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784813793; c=relaxed/simple; bh=hz40UdeWtCTGsLNpoQ7Qr6nIuTLs01JpJsrvYvYkhBk=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=kXYkOX6Q5aDbizBXBc9hZlnEnRM78Ug3ikgYYFkace15EG2cvDwoZs9WCnWUxj8DFt/HN5QZIz7i5h3a9aggn+w7336s0rUtsg5M+4CN4/tZvtW8OaKlQw3Ypr7OpW54ubRi/iK72nOR5EkRwUmUdwL8yNXXAGhZqiQNX7CCF3o= 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=DVZJ4gQr; arc=none smtp.client-ip=209.85.216.52 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="DVZJ4gQr" Received: by mail-pj1-f52.google.com with SMTP id 98e67ed59e1d1-38e3efab7e0so380796a91.0 for ; Thu, 23 Jul 2026 06:36:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784813786; x=1785418586; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to:content-type; bh=+R+5qfisK2HWKtqmw6UMptSC81Fa7UbtK9+Pm1I6XIw=; b=DVZJ4gQr4Az2W+JgKrxeUFvyLqjSw2qKhdLjksG0M+ybyfYDoesPB6VIYSRr7UWxYm Rzlcdbf0s0G8WwbcDuHJGjrJlQ+spBbGcV9sZcFLoENoCklwhQWWsfO4ZE55MuueHr9M U/oCl+2TOeOVcYE967udLvm93SY5VG+ismGTMUjNUWRlt7sVyCv41cXxQbCDmDusrLrV W6/VVWan9lGhPtMrEhZlXgIMoSMOAN8z7d2FfduWsZphyt9frSYfSWDu6xAyEnQ9MZH0 VN4Am6DUWCO6QtXzaG37a63sy026GQY7l4X1dlgTN6FRoc+11t9ngNj6PEREazXLulrr mnLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784813786; x=1785418586; h=content-transfer-encoding:mime-version: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=+R+5qfisK2HWKtqmw6UMptSC81Fa7UbtK9+Pm1I6XIw=; b=gm5hTCj4zcgeyAx8zjSSnU1Hs7Wtqtt9yade0mJqaH18KBrHAtfjH5wVTDvMlnsUPD +5G6PokhFB1BAqq5lN+WTAR8XXGv1S2BRWH6qAw6pNVS27PBVDRZT/FgJrjbFSPSBCrQ yUb96n00HGN//3Q1Uu2nUVmfmBQJf9Aq3LGPWZ9nBKiLQ6OqLEITgPcom8rXhLvy3egN Asy4/46H/Sb68SbyHphAaNJHhdFepaekluSG1z+EynF50OyvRyhT7xfXZrcW1JO62o3r GcvxFYRDDkVfCxGSHBwD6I0fF9E7VShRFpw71gpQ4170pd0nHLcPuBEeCRe6BkgJeMWR OlSw== X-Forwarded-Encrypted: i=1; AHgh+Rq9O2cn1N6aM1XNsPTKM34G5a+1A8vpyG/Z7a1be/uEQUGfc7TItFphTwKTDp+oL/BVllGILpEGQaj9s7c=@vger.kernel.org X-Gm-Message-State: AOJu0YxCaTFQ4gMqsfGWPI8EqoRU4hThNJ7g9DZ13l3IkR2gT52JGWoB ZMeoFncmjEsa0H23Kc9uHJOUghUAJrLUpni/ebPB91ujTwv3Mu7RA2iy X-Gm-Gg: AR+sD11Jj8P2TbsqgbliK8B605LXpxVf6RLD1Snq3URSrWvYOcZd2Lei3y82ry3JFzg UzWaIQEjQqRjHuQ3U94VHcdM6sEggc5ox/FkeRD4mk3Ho0OoabAZ3jfw2KRmVppjTzQ4Jzv21sw jZWgKrU8nrIfK1hblrh4Ao2n49gdDI+c4aepo8JGqvpnTfqC6vS3uq7W/WcboXyXfrtxpy2QPdw EBvYQdQ3zC8thBvahl9Qx4CKrOlnuNkiv3UHch8n2ao+ps8V9brFev9nXmOdrff5ZbvQJkFXJU4 UbtPAlvVZuiM8V7H9NS4WyOVyzOMMpJIMldCMoxs+6EAHO0UKAWE/I+q9+o+UJNsYFnny2oUVe9 UKkSczc5XCUI/y/hEJtjfPR8UrpAVUrOKZ22ecCOBjNxKj7V2brbEB4Dzsltwi0vGTr2LB10V9T ZWtr7aiYjwgrhONWU777lHGwvAKF6noZ4/TU/U6A== X-Received: by 2002:a17:90b:2e46:b0:38e:7297:a92e with SMTP id 98e67ed59e1d1-38ec841fd7emr2462627a91.9.1784813786002; Thu, 23 Jul 2026 06:36:26 -0700 (PDT) Received: from qiwenjie-ThinkCentre-M760t.mioffice.cn ([43.224.245.241]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-38ecaf51833sm1035279a91.15.2026.07.23.06.36.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 23 Jul 2026 06:36:25 -0700 (PDT) From: Wenjie Qi X-Google-Original-From: Wenjie Qi To: jaegeuk@kernel.org, chao@kernel.org Cc: linux-f2fs-devel@lists.sourceforge.net, linux-kernel@vger.kernel.org, qiwenjie@xiaomi.com, qwjhust@gmail.com, stable@kernel.org Subject: [PATCH] f2fs: keep pinned fallocate failures section-aligned Date: Thu, 23 Jul 2026 21:36:17 +0800 Message-ID: <20260723133617.3841286-1-qiwenjie@xiaomi.com> X-Mailer: git-send-email 2.43.0 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" Pinned fallocate allocates one section at a time. If f2fs_map_blocks() fails after allocating part of the current section, the error path still adds the partial length to expanded and clears FADVISE_TRUNC_BIT. A failed fallocate can then leave a pinned file with a non-section-aligned size. Count only complete sections on failure and keep FADVISE_TRUNC_BIT set until the failed section preallocation has been removed. Fixes: f5a53edcf01e ("f2fs: support aligned pinned file") Cc: stable@kernel.org Signed-off-by: Wenjie Qi --- fs/f2fs/file.c | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/fs/f2fs/file.c b/fs/f2fs/file.c index c54897a25981..83af73f3831e 100644 --- a/fs/f2fs/file.c +++ b/fs/f2fs/file.c @@ -1966,11 +1966,12 @@ static int f2fs_expand_inode_data(struct inode *ino= de, loff_t offset, =20 map.m_seg_type =3D CURSEG_COLD_DATA_PINNED; err =3D f2fs_map_blocks(inode, &map, F2FS_GET_BLOCK_PRE_DIO); - file_dont_truncate(inode); + if (!err) + file_dont_truncate(inode); =20 f2fs_up_write(&sbi->pin_sem); =20 - expanded +=3D map.m_len; + expanded +=3D err ? rounddown(map.m_len, sec_blks) : map.m_len; sec_len -=3D map.m_len; map.m_lblk +=3D map.m_len; if (!err && sec_len) @@ -1986,7 +1987,7 @@ static int f2fs_expand_inode_data(struct inode *inode= , loff_t offset, pgoff_t last_off; =20 if (!expanded) - return err; + goto out; =20 last_off =3D pg_start + expanded - 1; =20 @@ -2004,6 +2005,16 @@ static int f2fs_expand_inode_data(struct inode *inod= e, loff_t offset, f2fs_i_size_write(inode, new_size); } =20 +out: + if (err && f2fs_is_pinned_file(inode) && file_should_truncate(inode)) { + f2fs_down_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]); + filemap_invalidate_lock(inode->i_mapping); + if (!f2fs_truncate(inode)) + file_dont_truncate(inode); + filemap_invalidate_unlock(inode->i_mapping); + f2fs_up_write(&F2FS_I(inode)->i_gc_rwsem[WRITE]); + } + return err; } =20 --=20 2.43.0