From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (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 2DA2540D562 for ; Tue, 4 Aug 2026 23:14:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785885296; cv=none; b=bMmVjgc/KDxw4N5nVl3nCirsor/V/pvRR5XH7c6r+tQ6W07GO5yi8NcZuBHMkhbFtddWTgBSw3Oz8itv7Peu+LHIrV8FQM9QEI5YYGSHsRC2ICskeTffgVHDW/0X4zLl0hc1LbhJ/DjFSus9oeP1eBuI+gm4BckeSIFW2oenQYo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1785885296; c=relaxed/simple; bh=hBd3RdRcpdWDMej8R9gqEnTAx/TbgteZ2Rw9RGFLABs=; h=Message-ID:Date:MIME-Version:Subject:To:Cc:References:From: In-Reply-To:Content-Type; b=vGE8IvlaHPBkWSXuaKkAn/FIAty6Brz+Q1M13daOs4RY1KpZhh3wKrtGXkqXXkqKDXzvoMIHjmgKZXfXo2ZX10rQyZO3WrHMtbp2+9srBKOuxwcIpka1SBQJndERasaMiqw+W21XUcbuVeyK0NgqDxDjXqPJCUS/PEDlGBNypxI= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com; spf=pass smtp.mailfrom=suse.com; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b=ENge3ARZ; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=suse.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=suse.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=suse.com header.i=@suse.com header.b="ENge3ARZ" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4956869750eso2138895e9.2 for ; Tue, 04 Aug 2026 16:14:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1785885292; x=1786490092; darn=vger.kernel.org; h=content-transfer-encoding:content-type:in-reply-to:autocrypt:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:from:to:cc:subject:date:message-id:reply-to :content-type; bh=gVO0lbq+F7w1lPsidYYPIHS+lLaDCUZ+ohMwanJ7ycE=; b=ENge3ARZN+BKEEQdQYEeJrwO5LJ7XqwRQYhKCSy0KvpvWqZTiAsEuZ/2uz3qvn5xXi lWZFmDgLJsFP534nPQjW5YSI/22VV6z8jqReoRV6ne+/rVrvYsUt+cjXsZCppeR7XXq3 JL6qY68esMcdnSBymJ55ETtGbhbJV309837Ro5mL2fkXTApJyhRWj6SbbS5XHq1yTsqA 2KJLJRpUOB7DOpuQsF/gj5nt5uANHZ9lXJkrFkxPGHZA+2bS/ZrwcpECIXprBHr/nYna SqnSQmTXjL9mbGnlaPVubpOCowQpws8QHe48FsWyh7lBsagOzUNyNwlAlvTb0C6OLyGu 0mZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1785885292; x=1786490092; h=content-transfer-encoding:content-type:in-reply-to:autocrypt:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=gVO0lbq+F7w1lPsidYYPIHS+lLaDCUZ+ohMwanJ7ycE=; b=XBleWty92FcgCWX3KsjNlEFtDAVM/DJBK4gehEGQKLBpAF6XsPDK/2Gcg+wpFY+am4 DIs3cZvWXuBAmIAOBHhA0sp20516YzzrDWOymYU5Np374uZ8Zv09rAuE48bn9AvKSp0u sVbzSHAvFw/ZE/iYJIesB5uA12HvY3qUEIVCuFPlUQ+Ooj9QjNjjvnukHu8vkBWOeur/ ucoPUrAVg6sco5sY+tk5acu7Ka4/IJAjpKlCTLjw30Uolk+g/yKxkjVTVpQ8Rva1CqeY +TX+VGZ1JIgZXVFLphNP7OcHsGaaQ99xvaZC2PFhp9v32rprkxmqUDXFMeGOrkm/83xx YbWg== X-Forwarded-Encrypted: i=1; AHgh+Rormylo3iB7jQ2CuW03B3+2M3hG40KE3EmR4eyPG/bcpzwvim+Qbs4T7xUbiitbIP3PvT0Wdi2rJsRhw94=@vger.kernel.org X-Gm-Message-State: AOJu0YyAk7ubzS+U29uLXXEe32GiVN3bkXKWCkl0FHp+k4Gqc7hsZ+Mb aBBHR5kJcQ95HrbXGVFIQHvS7XHvGaLvXwYAmZh2h2xvqaifK62YDJ59KZU17F/WZWI= X-Gm-Gg: AR+sD13q2MuZ48wCe8gjOCN4EkxrOoCztm8e+Z/1NxyqCeVbKhC51c0ayA58JV0AeSi S7n/8XStWJf+HCIPcl0EGjHZlyDk5aLYV9zGJ/srLkkl4iD3UWM07umAd7uVAz2FKhoWKloA+8A R7cCrdaAFTCHYFzkqJRwxA2POtRXLPjYHMZY6ybuOhzpNtVjepm9zlcl2ijcMAwWbwE//rScYBT 2aipa3788L/fOodjG0q1lbzF7/K/JUqWrJ4e3RxDiw9q6qAJsG8+rLJYKE4oIBQQUd3bFwPX7Rl lYRwRKGt94puG32tB1FDMb/Qxwzei0hq6bMVi55STo9Dk9mFZ1PBXbSme1+nTNqN2vBMgfapqaw x9gJjA5Ol0KtgxXPGpe59HXSjFrCL2MkEHAvIPlD2vs/kA3uyQPZ/YdfTCwtOY3FD1YFO2ekWZ4 2FlDrjCg3JmwvlVmsp4YaS3ZOLCAuMk07p44mRSJZvr7ceiPKBB56tzw== X-Received: by 2002:a05:600c:5686:b0:493:a623:d090 with SMTP id 5b1f17b1804b1-4994e7c60c2mr12748495e9.10.1785885292390; Tue, 04 Aug 2026 16:14:52 -0700 (PDT) Received: from [172.16.0.229] ([159.196.52.54]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-315867a96e4sm8360255eec.26.2026.08.04.16.14.46 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 04 Aug 2026 16:14:51 -0700 (PDT) Message-ID: <8b16c994-b322-42c9-b134-47dca5f2682e@suse.com> Date: Wed, 5 Aug 2026 08:44:43 +0930 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 2/5] btrfs: split btrfs_insert_delayed_dir_index() into prealloc and commit phases To: Jeff Layton , Chris Mason , David Sterba Cc: linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org, kernel-team@fb.com References: <20260804-btrfs-enomem-v2-0-4d923170e8c1@kernel.org> <20260804-btrfs-enomem-v2-2-4d923170e8c1@kernel.org> Content-Language: en-US From: Qu Wenruo Autocrypt: addr=wqu@suse.com; keydata= xsBNBFnVga8BCACyhFP3ExcTIuB73jDIBA/vSoYcTyysFQzPvez64TUSCv1SgXEByR7fju3o 8RfaWuHCnkkea5luuTZMqfgTXrun2dqNVYDNOV6RIVrc4YuG20yhC1epnV55fJCThqij0MRL 1NxPKXIlEdHvN0Kov3CtWA+R1iNN0RCeVun7rmOrrjBK573aWC5sgP7YsBOLK79H3tmUtz6b 9Imuj0ZyEsa76Xg9PX9Hn2myKj1hfWGS+5og9Va4hrwQC8ipjXik6NKR5GDV+hOZkktU81G5 gkQtGB9jOAYRs86QG/b7PtIlbd3+pppT0gaS+wvwMs8cuNG+Pu6KO1oC4jgdseFLu7NpABEB AAHNGFF1IFdlbnJ1byA8d3F1QHN1c2UuY29tPsLAlAQTAQgAPgIbAwULCQgHAgYVCAkKCwIE FgIDAQIeAQIXgBYhBC3fcuWlpVuonapC4cI9kfOhJf6oBQJnEXVgBQkQ/lqxAAoJEMI9kfOh Jf6o+jIH/2KhFmyOw4XWAYbnnijuYqb/obGae8HhcJO2KIGcxbsinK+KQFTSZnkFxnbsQ+VY fvtWBHGt8WfHcNmfjdejmy9si2jyy8smQV2jiB60a8iqQXGmsrkuR+AM2V360oEbMF3gVvim 2VSX2IiW9KERuhifjseNV1HLk0SHw5NnXiWh1THTqtvFFY+CwnLN2GqiMaSLF6gATW05/sEd V17MdI1z4+WSk7D57FlLjp50F3ow2WJtXwG8yG8d6S40dytZpH9iFuk12Sbg7lrtQxPPOIEU rpmZLfCNJJoZj603613w/M8EiZw6MohzikTWcFc55RLYJPBWQ+9puZtx1DopW2jOwE0EWdWB rwEIAKpT62HgSzL9zwGe+WIUCMB+nOEjXAfvoUPUwk+YCEDcOdfkkM5FyBoJs8TCEuPXGXBO Cl5P5B8OYYnkHkGWutAVlUTV8KESOIm/KJIA7jJA+Ss9VhMjtePfgWexw+P8itFRSRrrwyUf E+0WcAevblUi45LjWWZgpg3A80tHP0iToOZ5MbdYk7YFBE29cDSleskfV80ZKxFv6koQocq0 vXzTfHvXNDELAuH7Ms/WJcdUzmPyBf3Oq6mKBBH8J6XZc9LjjNZwNbyvsHSrV5bgmu/THX2n g/3be+iqf6OggCiy3I1NSMJ5KtR0q2H2Nx2Vqb1fYPOID8McMV9Ll6rh8S8AEQEAAcLAfAQY AQgAJgIbDBYhBC3fcuWlpVuonapC4cI9kfOhJf6oBQJnEXWBBQkQ/lrSAAoJEMI9kfOhJf6o cakH+QHwDszsoYvmrNq36MFGgvAHRjdlrHRBa4A1V1kzd4kOUokongcrOOgHY9yfglcvZqlJ qfa4l+1oxs1BvCi29psteQTtw+memmcGruKi+YHD7793zNCMtAtYidDmQ2pWaLfqSaryjlzR /3tBWMyvIeWZKURnZbBzWRREB7iWxEbZ014B3gICqZPDRwwitHpH8Om3eZr7ygZck6bBa4MU o1XgbZcspyCGqu1xF/bMAY2iCDcq6ULKQceuKkbeQ8qxvt9hVxJC2W3lHq8dlK1pkHPDg9wO JoAXek8MF37R8gpLoGWl41FIUb3hFiu3zhDDvslYM4BmzI18QgQTQnotJH8= In-Reply-To: <20260804-btrfs-enomem-v2-2-4d923170e8c1@kernel.org> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit 在 2026/8/5 01:14, Jeff Layton 写道: > Split btrfs_insert_delayed_dir_index() into three functions using a new > btrfs_dir_index_prealloc struct to bundle the pre-allocated resources: > > - btrfs_prealloc_delayed_dir_index(): performs the two GFP_NOFS > allocations (delayed node + delayed item) that can fail with -ENOMEM. > - btrfs_insert_delayed_dir_index_prealloc(): populates the item data, > inserts into the rb-tree, and reserves metadata space. Cannot fail > with -ENOMEM since all allocations were done in the prealloc step. > - btrfs_free_delayed_dir_index_prealloc(): frees pre-allocated > resources when the caller's btree insertion fails. > > The original btrfs_insert_delayed_dir_index() is refactored into a thin > wrapper that calls the prealloc and commit functions. > > This split allows callers to move the fallible memory allocations before > the point of no return (the DIR_ITEM btree insertion), so that -ENOMEM > can be returned cleanly without aborting the transaction. > > Assisted-by: LLM > Signed-off-by: Jeff Layton > --- > fs/btrfs/delayed-inode.c | 111 +++++++++++++++++++++++++++++++++++++---------- > fs/btrfs/delayed-inode.h | 17 ++++++++ > 2 files changed, 104 insertions(+), 24 deletions(-) > > diff --git a/fs/btrfs/delayed-inode.c b/fs/btrfs/delayed-inode.c > index db2ffab0941a..95d2dca80444 100644 > --- a/fs/btrfs/delayed-inode.c > +++ b/fs/btrfs/delayed-inode.c > @@ -6,6 +6,7 @@ > > #include > #include > +#include > #include "ctree.h" > #include "fs.h" > #include "messages.h" > @@ -1469,35 +1470,74 @@ static void btrfs_release_dir_index_item_space(struct btrfs_trans_handle *trans) > trans->bytes_reserved -= bytes; > } > > -/* Will return 0, -ENOMEM or -EEXIST (index number collision, unexpected). */ > -int btrfs_insert_delayed_dir_index(struct btrfs_trans_handle *trans, > - const char *name, int name_len, > - struct btrfs_inode *dir, > - const struct btrfs_disk_key *disk_key, u8 flags, > - u64 index) > +/* > + * Pre-allocate a delayed node and delayed item for a dir index insertion. > + * Call this before modifying the btree so that ENOMEM can be returned > + * before any on-disk state has changed. > + * > + * Returns 0 on success, -ENOMEM on allocation failure. > + */ > +int btrfs_prealloc_delayed_dir_index(struct btrfs_inode *dir, > + const char *name, int name_len, > + struct btrfs_dir_index_prealloc *prealloc) We can directly return a btrfs_dir_index_prealloc pointer, which reduce the parameter list. Otherwise looks good to me. Reviewed-by: Qu Wenruo Thanks, Qu