From patchwork Wed Jul 13 10:29:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sweet Tea Dorminy X-Patchwork-Id: 12916513 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 13DF5C43334 for ; Wed, 13 Jul 2022 10:30:45 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236020AbiGMKao (ORCPT ); Wed, 13 Jul 2022 06:30:44 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54540 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236034AbiGMKan (ORCPT ); Wed, 13 Jul 2022 06:30:43 -0400 Received: from box.fidei.email (box.fidei.email [71.19.144.250]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7CD7CFC997 for ; Wed, 13 Jul 2022 03:30:42 -0700 (PDT) Received: from authenticated-user (box.fidei.email [71.19.144.250]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) by box.fidei.email (Postfix) with ESMTPSA id 8AFE9806E0; Wed, 13 Jul 2022 06:30:41 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=dorminy.me; s=mail; t=1657708242; bh=KRDfQQ1XpGCjjKVjRpwiQNGfKQ8imAWi4dsTAgZ/0Cc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=RAjgSe9Tr3AzSUqx84Sbh5Qw1HnjTbkWQRPEcUVMh3sHd6KZLbUH/ozT8FxwNaGfk Q/IiP4jeMbGyPh8dRGWsBoCelWj1iJ+JlhGbrwbvT8C1NtQaJWWkgCMUCCCFu3qsVT Np9Qim9B8UxAQ3Tn84O1rjhhkSQtxiIfrOBzP/wW+YV4s98QoyeHHjtbA5iU4398ND cDFKVN3lVpNnhPKvCHshZuUM+0tLRU72JLUSO5P8cQBtotrHfe8oOP+nyroApkyk3Y 0h9TliE9yysjT18XN8uvV+t/b4Lwx6f9kj7FqmWSPGEoB8bideZRgFJnNaTz0Zk+C5 n0vCQzSGg4jmg== From: Sweet Tea Dorminy To: Chris Mason , Josef Bacik , David Sterba , linux-btrfs@vger.kernel.org Cc: Omar Sandoval , Sweet Tea Dorminy Subject: [RFC ONLY 04/23] btrfs: explicitly keep track of file extent item size. Date: Wed, 13 Jul 2022 06:29:37 -0400 Message-Id: <1683e20a7e9827a8197c15d006c78ea278641182.1657707686.git.sweettea-kernel@dorminy.me> In-Reply-To: References: MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: linux-btrfs@vger.kernel.org From: Omar Sandoval Previously, file extents were always of constant size. However, for fscrypt, they will need to store an IV, and this IV varies in length according to the encryption algorithm, making the file extent items also of variable length. Therefore, this begins passing around the actual file extent item size instead of assuming it is merely the size of the item in memory. Signed-off-by: Sweet Tea Dorminy --- fs/btrfs/ctree.h | 1 + fs/btrfs/file.c | 4 ++-- fs/btrfs/inode.c | 1 + fs/btrfs/reflink.c | 1 + 4 files changed, 5 insertions(+), 2 deletions(-) diff --git a/fs/btrfs/ctree.h b/fs/btrfs/ctree.h index 538a1f357e59..ddff384604ee 100644 --- a/fs/btrfs/ctree.h +++ b/fs/btrfs/ctree.h @@ -1355,6 +1355,7 @@ struct btrfs_replace_extent_info { u64 file_offset; /* Pointer to a file extent item of type regular or prealloc. */ char *extent_buf; + u32 extent_buf_size; /* * Set to true when attempting to replace a file range with a new extent * described by this structure, set to false when attempting to clone an diff --git a/fs/btrfs/file.c b/fs/btrfs/file.c index d0172cb54d9f..a93b205c663b 100644 --- a/fs/btrfs/file.c +++ b/fs/btrfs/file.c @@ -2687,14 +2687,14 @@ static int btrfs_insert_replace_extent(struct btrfs_trans_handle *trans, key.type = BTRFS_EXTENT_DATA_KEY; key.offset = extent_info->file_offset; ret = btrfs_insert_empty_item(trans, root, path, &key, - sizeof(struct btrfs_file_extent_item)); + extent_info->extent_buf_size); if (ret) return ret; leaf = path->nodes[0]; slot = path->slots[0]; write_extent_buffer(leaf, extent_info->extent_buf, btrfs_item_ptr_offset(leaf, slot), - sizeof(struct btrfs_file_extent_item)); + extent_info->extent_buf_size); extent = btrfs_item_ptr(leaf, slot, struct btrfs_file_extent_item); ASSERT(btrfs_file_extent_type(leaf, extent) != BTRFS_FILE_EXTENT_INLINE); btrfs_set_file_extent_offset(leaf, extent, extent_info->data_offset); diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 057744b8815c..43ebf37a156e 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -9966,6 +9966,7 @@ static struct btrfs_trans_handle *insert_prealloc_file_extent( extent_info.data_len = len; extent_info.file_offset = file_offset; extent_info.extent_buf = (char *)&stack_fi; + extent_info.extent_buf_size = sizeof(stack_fi); extent_info.is_new_extent = true; extent_info.update_times = true; extent_info.qgroup_reserved = qgroup_released; diff --git a/fs/btrfs/reflink.c b/fs/btrfs/reflink.c index 9acf47b11fe6..e5c2616a486e 100644 --- a/fs/btrfs/reflink.c +++ b/fs/btrfs/reflink.c @@ -495,6 +495,7 @@ static int btrfs_clone(struct inode *src, struct inode *inode, clone_info.data_len = datal; clone_info.file_offset = new_key.offset; clone_info.extent_buf = buf; + clone_info.extent_buf_size = size; clone_info.is_new_extent = false; clone_info.update_times = !no_time_update; ret = btrfs_replace_file_extents(BTRFS_I(inode), path,