From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=100.103.45.18 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1794591169; b=vXaWKWosI7CXGzgJKRjzY3QhbEHBP0Xp4pJUGI5vvfMCrVyXp5CZXToDI8+T8BdFUuD+ HYWsNyhy/w06rOazUIQwoWg+GVlX2u0CWbOZ8a8F2ks2Cg9cC2TdNxrjpPw5cx3cNCIfy 8TjhH5chjNa8aPZkVL55Cwvv+ZpwYM36UBb61c1WTAdA0GIRpAhGp11wHGr+UBOVZeVcn Gsy/6M5aAj1SQZ/0Lyntg0nyABY/HZMnf3z4Sorvo75SKm/vrYY3wtoeyaAZJBzxeyNnQ 5uTUeiM0/n1fYuLgKnZ8tU3Eu8KxyatL1+VZ9rKw5xnqpe+ze8kFFXJjxLmUGqGd5xw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1794591169; h=Received:DKIM-Signature:From:To:Cc:Subject:Date:Message-ID:X-Mailer: In-Reply-To:References:User-Agent:X-stable:X-Patchwork-Hint: MIME-Version:Content-Transfer-Encoding; bh=HZLL76h+IKudMONbxCD0Ho1WhXd9FBmFlUx/i4YU96k=; b=M2lumhdF92/Pjhhx5kVCO/31hiZHC5VGqX9BkESzJzUqsudW12fvO9rIgAeRZO1T5ZGY NBNfvJt3v/du7WVseYWyNhYcZHgVxd/Su5BQoz3jf5PWzOWUTUUZmntqqcDVzAs45WpDe vDmX9HXMVegDULfCO+uU72Q3xpKKXKNk11s62kZCmDe9jBvaLzkf/JtaHxL7dqZ8h8x3K eOHIDsPMf7qA5xTymMiVGZ6CuXzt2vZkTFWr1Mu2aGT3COb+lOGlTLDH7+hvP+bNglpUd ZL0QbI+IeJUpRJbcdwDPrmCXCFI/9imKWrbuvET0IvvdC81puOid7+SOqm1JKDqrXvw== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=1NsXRn5B; arc=none smtp.remote-ip=100.103.45.18 Received: from smtp.kernel.org (quasi.space.kernel.org [100.103.45.18]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9AA16606C0B4; Fri, 13 Nov 2026 17:32:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linuxfoundation.org header.i=@linuxfoundation.org header.a=rsa-sha256 header.s=korg header.b=1NsXRn5B Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4AA561F000C8; Fri, 13 Nov 2026 17:32:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linuxfoundation.org; s=korg; t=1794591169; bh=HZLL76h+IKudMONbxCD0Ho1WhXd9FBmFlUx/i4YU96k=; h=From:To:Cc:Subject:Date:In-Reply-To:References; b=1NsXRn5BuQSV2TU2S7KHaHKcoTS3AQg8CiyuaZ0WCtVMt+5YcQrd/vahjBdaXKMVb TH7/abYPRsrXKYGArwEXC7IJkX4jKFf1Q0GiUa463T5XnUg7zhNo7bjfq0dyv0/pNQ JRoLTSulCFwATGn54AxqsTy4yeTVuOIlxql++9vg= From: Greg Kroah-Hartman To: stable@vger.kernel.org Cc: Greg Kroah-Hartman , patches@lists.linux.dev, Chuck Lever , Daejun Park , Christoph Hellwig , Pankaj Raghav , Carlos Maiolino , Sasha Levin Subject: [PATCH 6.12 310/670] xfs: mark the inode preallocated for pNFS write layouts past EOF Date: Fri, 13 Nov 2026 10:47:54 -0500 Message-ID: <20261113153822.414431483@linuxfoundation.org> X-Mailer: git-send-email 2.56.0 In-Reply-To: <20261113153811.177190860@linuxfoundation.org> References: <20261113153811.177190860@linuxfoundation.org> User-Agent: quilt/0.69 X-stable: review X-Patchwork-Hint: ignore X-Mailing-List: stable@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 6.12-stable review patch. If anyone has any objections, please let me know. ------------------ From: Daejun Park [ Upstream commit 8b8e265991556d99b6d721697f148975a7c68767 ] xfs_fs_map_blocks() marks the inode XFS_DIFLAG_PREALLOC only when it allocates blocks for a write layout. A write layout past EOF can also hand out allocated blocks, such as speculative preallocation. blockgc then frees them under the layout, and another file may get them. Mark the inode whenever a write mapping ends past EOF. Fixes: 527851124d10 ("xfs: implement pNFS export operations") Cc: stable@vger.kernel.org Reported-by: Chuck Lever Link: https://lore.kernel.org/r/4de5356f-bc4d-4f1a-9c81-fce09b1b46fd@slotpi15m67 Signed-off-by: Daejun Park Reviewed-by: Christoph Hellwig Reviewed-by: Pankaj Raghav Signed-off-by: Carlos Maiolino Signed-off-by: Sasha Levin --- fs/xfs/xfs_pnfs.c | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/fs/xfs/xfs_pnfs.c b/fs/xfs/xfs_pnfs.c index 23d16186e1a34..ca3d085a3e781 100644 --- a/fs/xfs/xfs_pnfs.c +++ b/fs/xfs/xfs_pnfs.c @@ -101,7 +101,15 @@ xfs_fs_map_update_inode( ip->i_diflags |= XFS_DIFLAG_PREALLOC; xfs_trans_log_inode(tp, ip, XFS_ILOG_CORE); - return xfs_trans_commit(tp); + error = xfs_trans_commit(tp); + if (error) + return error; + + /* + * Force the log so that the blocks handed out to the client are + * guaranteed to be present even after a server crash. + */ + return xfs_log_force_inode(ip); } /* @@ -126,6 +134,7 @@ xfs_fs_map_blocks( uint lock_flags; int error = 0; u64 seq; + bool update_inode = false; if (xfs_is_shutdown(mp)) return -EIO; @@ -194,20 +203,27 @@ xfs_fs_map_blocks( end_fsb - offset_fsb, 0, &imap, &seq); if (error) goto out_unlock; + update_inode = true; + } else { + xfs_iunlock(ip, lock_flags); /* - * Ensure the next transaction is committed synchronously so - * that the blocks allocated and handed out to the client are - * guaranteed to be present even after a server crash. + * Blocks past EOF that were allocated for buffered writes, such + * as speculative preallocation, can be freed by + * xfs_free_eofblocks() without breaking the layout unless the + * inode is marked as preallocated. Mark it before handing them + * out for writing, as for blocks allocated above. */ + if (write && !(ip->i_diflags & XFS_DIFLAG_PREALLOC) && + imap.br_startoff + imap.br_blockcount > + XFS_B_TO_FSB(mp, XFS_ISIZE(ip))) + update_inode = true; + } + + if (update_inode) { error = xfs_fs_map_update_inode(ip); - if (!error) - error = xfs_log_force_inode(ip); if (error) goto out_unlock; - - } else { - xfs_iunlock(ip, lock_flags); } xfs_iunlock(ip, XFS_IOLOCK_EXCL); -- 2.53.0