From nobody Sat Feb 7 23:24:09 2026 Received: from sender8.mail.selcloud.ru (sender8.mail.selcloud.ru [5.8.75.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A13A934888E; Wed, 12 Nov 2025 19:07:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=5.8.75.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974469; cv=none; b=ZGeH1zd2Ks/D6R/jLnfFzXaktB+5xk3lvfwfXNbD1gQ3BMozdZlTl0OX9lFLLcPzEefNLrzZvBAc3yu4533xk58onmkTkR6rrU1P7wD2NsU/J1rNWBRkJ5zOa0/j4wn9GF87X4IdQbzmpJMTKUaCNhNfIVkW28wNW9tVK9wvV/Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974469; c=relaxed/simple; bh=onFtvHF637PkHfokYGmMMhhMnra8N2YkWhTjb4IwbhM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=VlIwem7zjWbOwoBIfHBLutU+WWlo5Ee7IrJVKIIx5NvUXbkGB6jXN0T9Kbm+t5eu1OyjPVTK2N+ecdzOlbTiMu1glwsI/MtfpVLJ6n9udz6elONh11RLDRdxOleUMHacvAGuriO42aoigRo+bct4V/3HuLEWYQwmSppllwmv6ws= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev; spf=pass smtp.mailfrom=mail.selcloud.ru; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b=AON2eK7/; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=qfmc4ERz; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=bU5gDKsc; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=2MTf/o/z; arc=none smtp.client-ip=5.8.75.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mail.selcloud.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b="AON2eK7/"; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="qfmc4ERz"; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="bU5gDKsc"; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="2MTf/o/z" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.selcloud.ru; s=selcloud; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:List-id: List-Unsubscribe:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Help:List-Subscribe:List-Post:List-Owner:List-Archive; bh=om8sf8stEkxllM3ntHfWOkinWEynYIsowhngY8eZid4=; t=1762974465; x=1763147265; b=AON2eK7/BhFNG60+PVnMj+De+IymPmCZWx7bOvHc0r8bnXF0Gdo8/Cdz1PhUxx2OziRdaAjDqY l4ChkdgvOEygpFTlcmFNj3HbuHnHOShMWkdfGuuljR/UhQNPQlYM4niuIov8gj08XDMSJA18rYOF5 4xG3xVXE0kpEAVWAWD1k=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=foxido.dev; s=selcloud; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:List-id:List-Unsubscribe:Sender:Reply-To: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Help:List-Subscribe: List-Post:List-Owner:List-Archive; bh=om8sf8stEkxllM3ntHfWOkinWEynYIsowhngY8eZid4=; t=1762974465; x=1763147265; b=qfmc4ERzZ2P9TfIaVsJZFY6WEc6eln5f51TE0mNnEuV8su8hXxrWSziPxT8jUtD4ieaB0eFfUc F/HhnibIfVpQC1GXhYAk6SFSnhea9UPxCLmSco51hpkrGJYXo+nxiKToEccgmPWrO9imk2cZliHZO K0S6GcBQ9mW2CuUXS0/M=; Precedence: bulk X-Issuen: 1428244 X-User: 149890965 X-Postmaster-Msgtype: 3849 Feedback-ID: 1428244:15965:3849:samotpravil X-From: foxido.dev X-from-id: 15965 X-MSG-TYPE: bulk List-Unsubscribe-Post: List-Unsubscribe=One-Click X-blist-id: 3849 X-Gungo: 20251107.120132 X-SMTPUID: mlgnr62 DKIM-Signature: v=1; a=rsa-sha256; s=202508r; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973418; bh=om8sf8stEkxllM3ntHfWOki nWEynYIsowhngY8eZid4=; b=bU5gDKsculcs8v3vKqFw0Afw+hnvhS2luuDKGls2snVuqiaydm 7rrmKqbS6UyuMSGIe2AU4fcKVDJgTAP30/SJIIuW67AxeP7WZVPwQXr12kprzjrZuVmcryLZC0F ZPAjkvbfIjWNLiENV9OqGLSRhyEj9gXSSicWXMWlRMkHCNBAQeULcUFC/goGfETtnwOYI1nWZWO cjVxDcFLVHPrCNZjGYRVpNoTP5PSkr1LrAz6EkougAXgZL79SccmN+2qQPQNO0r3znknqxtj1Ln Pc2Fo2hE0SDD2zDUIa+1aiFgpjHeDCEXS/IUcFXbeZICe3SCuYhwxf767hKPV6InKYA==; DKIM-Signature: v=1; a=ed25519-sha256; s=202508e; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973418; bh=om8sf8stEkxllM3ntHfWOki nWEynYIsowhngY8eZid4=; b=2MTf/o/zVzkWKZf5S66bhosjObwo8Tb3T3OG4Wb7bZIuWKVydX O/u9d8ezEMgk6At6dHLpek5Nl0EbtDpgeeCQ==; From: Gladyshev Ilya To: foxido@foxido.dev Cc: Chris Mason , David Sterba , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 1/8] btrfs: remove redundant label in __del_qgroup_relation Date: Wed, 12 Nov 2025 21:49:37 +0300 Message-ID: <0893b79051c610f44757521a42f410ebdcf48282.1762972845.git.foxido@foxido.dev> X-Mailer: git-send-email 2.51.1.dirty In-Reply-To: References: 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" The 'out' label in __del_qgroup_relation only contains a direct return, with no actual cleanup operations. Replace all 'goto out' statements with direct return statements to improve readability. Signed-off-by: Gladyshev Ilya --- fs/btrfs/qgroup.c | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 31ad8580322a..9904bcfd3a60 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -1600,10 +1600,8 @@ static int __del_qgroup_relation(struct btrfs_trans_= handle *trans, u64 src, int ret =3D 0; int ret2; =20 - if (!fs_info->quota_root) { - ret =3D -ENOTCONN; - goto out; - } + if (!fs_info->quota_root) + return -ENOTCONN; =20 member =3D find_qgroup_rb(fs_info, src); parent =3D find_qgroup_rb(fs_info, dst); @@ -1625,10 +1623,10 @@ static int __del_qgroup_relation(struct btrfs_trans= _handle *trans, u64 src, delete_item: ret =3D del_qgroup_relation_item(trans, src, dst); if (ret < 0 && ret !=3D -ENOENT) - goto out; + return ret; ret2 =3D del_qgroup_relation_item(trans, dst, src); if (ret2 < 0 && ret2 !=3D -ENOENT) - goto out; + return ret; =20 /* At least one deletion succeeded, return 0 */ if (!ret || !ret2) @@ -1640,7 +1638,6 @@ static int __del_qgroup_relation(struct btrfs_trans_h= andle *trans, u64 src, ret =3D quick_update_accounting(fs_info, src, dst, -1); spin_unlock(&fs_info->qgroup_lock); } -out: return ret; } =20 --=20 2.51.1.dirty From nobody Sat Feb 7 23:24:09 2026 Received: from sender5.mail.selcloud.ru (sender5.mail.selcloud.ru [5.8.75.168]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 27A3234CFC7; Wed, 12 Nov 2025 19:07:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=5.8.75.168 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974473; cv=none; b=tkAMoQLmB4fV/HAp2wWAgUHV/z6kWZIMK7qrkhQ7fBACaYb/c6xaPNQ0qO4pdtD3DC2fHj4srR3+i84CnIsHOIBVCry0x5IPuqe0GS1yudp2Dzyl0bd1Fct0iWg+yIPmCnTjy+Df/1Jyv/f91fBVwIIV0fFLbIcYSPnFtNZ74ck= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974473; c=relaxed/simple; bh=/8NP+cn6CMnb3MgbdAiFJH1QRsNs+3tMSoD4DezBpr8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CbWEokKlUSLu962D7mjxscRH9yi6Y87Llf9icaQcK2AMfOZUXPRI60KGy2mxRoTFdmwZJgj7twVTd/x6CCiacR5Zkd8gyEji//GbSMNcCnr+tE+bDCoYd2GQKIT7dArV6AXj7gqt01iEr+Ve/XpZew0ZAKeBvjl71lxiAKxSNvw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev; spf=pass smtp.mailfrom=mail.selcloud.ru; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b=rwGqUiyo; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=D6+zALl1; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=lp3AFDfG; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=YqTiiJ/D; arc=none smtp.client-ip=5.8.75.168 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mail.selcloud.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b="rwGqUiyo"; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="D6+zALl1"; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="lp3AFDfG"; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="YqTiiJ/D" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.selcloud.ru; s=selcloud; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:List-id: List-Unsubscribe:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Help:List-Subscribe:List-Post:List-Owner:List-Archive; bh=LLj21esqm3R2LJZDtbLCVJhszRnRQfTTEwvoExcwbOk=; t=1762974469; x=1763147269; b=rwGqUiyopWuh+6k70n4AS1LBR4DqF//7tBhxNiKeK8qa3yC3pj1/PbyVE9EfN3uiohWEm5WY3Z bV8Mv9GSR2gc7+t94ZSIMeyFG5KC04lBEf0NYWJFrGHK60Ka6v4ui0zKcM8bTFEYYRSCak7hjjBAd kwSLH31+qK0wa7GVUBtk=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=foxido.dev; s=selcloud; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:List-id:List-Unsubscribe:Sender:Reply-To: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Help:List-Subscribe: List-Post:List-Owner:List-Archive; bh=LLj21esqm3R2LJZDtbLCVJhszRnRQfTTEwvoExcwbOk=; t=1762974469; x=1763147269; b=D6+zALl1Bh6OAgMr0Ya2bQKT5P+S1I9pqZ9NLM0P2zpAQknku7TTXKbaq0s7bXBty46damnOMC lkSf15CHho+vWH8obPEt1+fAl8BUM9zCxQ/Todb/e0WsQiaPb3s2iUWx4pXKZ1pi7Ut5rYIofjWHO ZcU23KASQQ8kPIIfZVFg=; Precedence: bulk X-Issuen: 1428244 X-User: 149890965 X-Postmaster-Msgtype: 3849 Feedback-ID: 1428244:15965:3849:samotpravil X-From: foxido.dev X-from-id: 15965 X-MSG-TYPE: bulk List-Unsubscribe-Post: List-Unsubscribe=One-Click X-blist-id: 3849 X-Gungo: 20251107.120132 X-SMTPUID: mlgnr59 DKIM-Signature: v=1; a=rsa-sha256; s=202508r; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=LLj21esqm3R2LJZDtbLCVJh szRnRQfTTEwvoExcwbOk=; b=lp3AFDfGAiLVvVpQ05fmi6m59+1mJXTr7hj1tvSaP/8AhiUyoT YhnjrTFmm8B/SKfidH2GBp/edS7i6XyhugnkejqOeGZO5m5oJ7yRVL1pkl75xipAkYUL2PsNo1q +DRkJJNR2hFl8DVNAkroaotZNVhi+gUUk/C1sQ/gmcP8DuL4O2yn+z069IwpyRo7DF3uT7hADpM GmcyB14f/xLpYei49Vi2Yoe+aPsHx+nkREVVa6BKSvINsdilXkbEZbV9J5i+AuMLZKIXiGPWey2 MCeD8aoi3WIaZ0N3kS3+i5rcoiKcW2dC7cimmWG5DphrA/18w03Z3Q+Bk1EQKSDIkIg==; DKIM-Signature: v=1; a=ed25519-sha256; s=202508e; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=LLj21esqm3R2LJZDtbLCVJh szRnRQfTTEwvoExcwbOk=; b=YqTiiJ/D6bJVhf6Ihe7IuV6TefJR8aDBQj1BbA1Xnbl2pldU/U xvML7JiQeqWGYf4VJJNSsI3VQFjcrWNM6bCQ==; From: Gladyshev Ilya To: foxido@foxido.dev Cc: Chris Mason , David Sterba , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 2/8] btrfs: move kfree out of btrfs_create_qgroup's cleanup path Date: Wed, 12 Nov 2025 21:49:38 +0300 Message-ID: <79f3f83eb5f693ad88b0cad9d37e2db214ba1491.1762972845.git.foxido@foxido.dev> X-Mailer: git-send-email 2.51.1.dirty In-Reply-To: References: 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" Relocate kfree() from the generic cleanup path to the specific error exit where the allocation could leak. This prepares for future simplification by allowing removal of the 'out' label and use of mutex_guard for cleaner resource management. Signed-off-by: Gladyshev Ilya --- fs/btrfs/qgroup.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 9904bcfd3a60..a8474d0a9c58 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -1659,7 +1659,7 @@ int btrfs_create_qgroup(struct btrfs_trans_handle *tr= ans, u64 qgroupid) struct btrfs_fs_info *fs_info =3D trans->fs_info; struct btrfs_root *quota_root; struct btrfs_qgroup *qgroup; - struct btrfs_qgroup *prealloc =3D NULL; + struct btrfs_qgroup *prealloc; int ret =3D 0; =20 mutex_lock(&fs_info->qgroup_ioctl_lock); @@ -1681,18 +1681,18 @@ int btrfs_create_qgroup(struct btrfs_trans_handle *= trans, u64 qgroupid) } =20 ret =3D add_qgroup_item(trans, quota_root, qgroupid); - if (ret) + if (ret) { + kfree(prealloc); goto out; + } =20 spin_lock(&fs_info->qgroup_lock); qgroup =3D add_qgroup_rb(fs_info, prealloc, qgroupid); spin_unlock(&fs_info->qgroup_lock); - prealloc =3D NULL; =20 ret =3D btrfs_sysfs_add_one_qgroup(fs_info, qgroup); out: mutex_unlock(&fs_info->qgroup_ioctl_lock); - kfree(prealloc); return ret; } =20 --=20 2.51.1.dirty From nobody Sat Feb 7 23:24:09 2026 Received: from sender5.mail.selcloud.ru (sender5.mail.selcloud.ru [5.8.75.168]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3788934CFBA; Wed, 12 Nov 2025 19:08:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=5.8.75.168 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974485; cv=none; b=B25Rb8NwPzlgQBFMzrsg5NfZhLIaplukz+9IMvsPFxMw15dtU7Yv3+eo92SMfyQgAs6p4I/3/zoGVd1Jy2pg6HhQQVR0uCyTOODvyPLE8s9cw6weh+zZuCfy26PrCTci5c7nDvfh6celthEA5rRyGpCIfyCximlBNJn6lgHKWog= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974485; c=relaxed/simple; bh=H3JOqqmt+1fG3hT7keMlacoJDCKNtISkT/vLwvm69+g=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Yn/oYq2h1Mpzra6Z12BP8gF1VPcZ/gTTXNp6NfUog8abxIrau8avUjl+WmeSxfgvkSTP1Zl0P9aaBRnZp9dQdHxf+WgbQC7yCCOqGsDOXmXmhs+KxghE0vA9K1wLoa5RIOan/BbZ525JWVZ/6ZDqO/OGPQPZ5Pzp7O/Xw5ZwDCE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev; spf=pass smtp.mailfrom=mail.selcloud.ru; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b=hVpXgeiu; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=FdSY0h7F; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=QhRV8soy; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=IbfBZsk3; arc=none smtp.client-ip=5.8.75.168 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mail.selcloud.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b="hVpXgeiu"; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="FdSY0h7F"; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="QhRV8soy"; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="IbfBZsk3" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.selcloud.ru; s=selcloud; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:List-id: List-Unsubscribe:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Help:List-Subscribe:List-Post:List-Owner:List-Archive; bh=QG2I65kYf3DvIF6rGWtUyx74i3yvRyAiTrmBUA2bRsE=; t=1762974483; x=1763147283; b=hVpXgeiuJCSIpRFOOlCwvwsaj7RZ+Uko1X9+aaJzqfKcVLcwFd0nLTlRyLAv9AwXCL2GgrqAip pl+bNEV7UeqwJUje/wERBzZ77dRYC94jL8HyCewLPQl3bFvpZZ2+7Zp0doF5KcXNJ1oh65a+WZrAs xCLcLxVQ8b0WroO4bBtg=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=foxido.dev; s=selcloud; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:List-id:List-Unsubscribe:Sender:Reply-To: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Help:List-Subscribe: List-Post:List-Owner:List-Archive; bh=QG2I65kYf3DvIF6rGWtUyx74i3yvRyAiTrmBUA2bRsE=; t=1762974483; x=1763147283; b=FdSY0h7FedZNVREYoGsKCHhA6HRsfxS+Oc3HkTyrA4qsGWFWfAWP8ENu70/e+ep0bMGZN10j4Z 787Fam65wK51Ia2zdFrA+tPd3k3AiBfMN6R3dQ2M79F5F8kgk83hspMHkSSB0eBxaMbUooU65Q8R6 hD8fOwOnq/63ceJ+A1oQ=; Precedence: bulk X-Issuen: 1428244 X-User: 149890965 X-Postmaster-Msgtype: 3849 Feedback-ID: 1428244:15965:3849:samotpravil X-From: foxido.dev X-from-id: 15965 X-MSG-TYPE: bulk List-Unsubscribe-Post: List-Unsubscribe=One-Click X-blist-id: 3849 X-Gungo: 20251107.120132 X-SMTPUID: mlgnr59 DKIM-Signature: v=1; a=rsa-sha256; s=202508r; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=QG2I65kYf3DvIF6rGWtUyx7 4i3yvRyAiTrmBUA2bRsE=; b=QhRV8soydkWEbXUaDKh6KEdhaPSfd3/IetrX58pw02dbuF7kh5 uwjNdg9sfGR8InfnnO7dz+5tJcBFeRc5YV5bU1WTCy2bKMOBf/8XSkDZQ5UTJodqW8YCjPUy8mL b1sj7NH6MOpm/CUthe4XInU1kRGmWXeKfBK76rSzdZt0Og0vW+0RdbQJaJsoVv7YETcH3Qj9GCT /IWfkEhLHxjK7GanXkeA2XNbX5yS/IGNIjcv9eHYB96mMlhMza5k+Ybj85VNbEzMxGIfkKZIDPt 0O9WPUmxXqz/K2kOPGWEkrB2/EwWutt7DeWvNXNBomz8CmkArYOb5IDLInGIINURLHA==; DKIM-Signature: v=1; a=ed25519-sha256; s=202508e; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=QG2I65kYf3DvIF6rGWtUyx7 4i3yvRyAiTrmBUA2bRsE=; b=IbfBZsk30duP3rbRi7vY0NSWbijiAeabgULamR9ddya4+MfW6e 8H7kOiKwLSisdZdWyUyb0xDKcX5u9Vxf5WAg==; From: Gladyshev Ilya To: foxido@foxido.dev Cc: Chris Mason , David Sterba , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 3/8] btrfs: simplify control flow in scrub_simple_mirror Date: Wed, 12 Nov 2025 21:49:39 +0300 Message-ID: X-Mailer: git-send-email 2.51.1.dirty In-Reply-To: References: 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" Replace 'ret =3D VAL; break;' pattern with direct return statements to reduce indirection and improve code clarity. Signed-off-by: Gladyshev Ilya --- fs/btrfs/scrub.c | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/fs/btrfs/scrub.c b/fs/btrfs/scrub.c index ba20d9286a34..dd4e6d20e35f 100644 --- a/fs/btrfs/scrub.c +++ b/fs/btrfs/scrub.c @@ -2253,7 +2253,7 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx, struct btrfs_fs_info *fs_info =3D sctx->fs_info; const u64 logical_end =3D logical_start + logical_length; u64 cur_logical =3D logical_start; - int ret =3D 0; + int ret; =20 /* The range must be inside the bg */ ASSERT(logical_start >=3D bg->start && logical_end <=3D bg->start + bg->l= ength); @@ -2265,10 +2265,9 @@ static int scrub_simple_mirror(struct scrub_ctx *sct= x, =20 /* Canceled? */ if (atomic_read(&fs_info->scrub_cancel_req) || - atomic_read(&sctx->cancel_req)) { - ret =3D -ECANCELED; - break; - } + atomic_read(&sctx->cancel_req)) + return -ECANCELED; + /* Paused? */ if (atomic_read(&fs_info->scrub_pause_req)) { /* Push queued extents */ @@ -2278,8 +2277,7 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx, spin_lock(&bg->lock); if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &bg->runtime_flags)) { spin_unlock(&bg->lock); - ret =3D 0; - break; + return 0; } spin_unlock(&bg->lock); =20 @@ -2291,11 +2289,10 @@ static int scrub_simple_mirror(struct scrub_ctx *sc= tx, spin_lock(&sctx->stat_lock); sctx->stat.last_physical =3D physical + logical_length; spin_unlock(&sctx->stat_lock); - ret =3D 0; - break; + return 0; } if (ret < 0) - break; + return ret; =20 /* queue_scrub_stripe() returned 0, @found_logical must be updated. */ ASSERT(found_logical !=3D U64_MAX); @@ -2304,7 +2301,7 @@ static int scrub_simple_mirror(struct scrub_ctx *sctx, /* Don't hold CPU for too long time */ cond_resched(); } - return ret; + return 0; } =20 /* Calculate the full stripe length for simple stripe based profiles */ --=20 2.51.1.dirty From nobody Sat Feb 7 23:24:09 2026 Received: from sender5.mail.selcloud.ru (sender5.mail.selcloud.ru [5.8.75.168]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 40CFA350A2D; Wed, 12 Nov 2025 19:08:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=5.8.75.168 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974490; cv=none; b=J//ggGC8omR7M52DPRK7T+p1UmmWETiqI9nZn14fOEsYV1mnh4ICc8FUXt8FyZwIFzC1mEJ1LzQSJM8lkSEivmL7OjHFiXWMODszKJ6tggTIiH2z3Dym+CGVcBKugRADiNCRMxaDcm0+Y5AKw1dnhxz6He7ykmJH0pA5IdtHVnc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974490; c=relaxed/simple; bh=fQrGJE+8X2FBwbWDg/ghnYhMj5f7Jspd7XTALwJr9W0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=C5Mpxch/h1gRXz1rPc5zbxCcl3MqBKcd4/sZ+mAdjGxRsFSx2EJ711qm0EGOLOjyBA9o9Qq95FFHFcjeCr6WPweBpH5YL4lCUxV9jqRzES0JGVjqHdslV6rcDNbU2qC/9LsjgBSR5rmpsiF4ee8vxkx3Ip3eYr7IuYiOyr7VBKA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev; spf=pass smtp.mailfrom=mail.selcloud.ru; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b=ac6Alm3g; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=oMWL5IJs; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=EfKOa9ta; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=ETns0IkT; arc=none smtp.client-ip=5.8.75.168 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mail.selcloud.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b="ac6Alm3g"; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="oMWL5IJs"; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="EfKOa9ta"; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="ETns0IkT" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.selcloud.ru; s=selcloud; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:List-id: List-Unsubscribe:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Help:List-Subscribe:List-Post:List-Owner:List-Archive; bh=n8R0rxbpTLCew8mahpHy82EY2jf6N1sgnYoOqfypFzM=; t=1762974488; x=1763147288; b=ac6Alm3goki3ihJSD6lldnEdvgTR8fm1+5BsFwehcTzPeeuA4H0ljvwVjzykDM6G9todLysrOg zwLG/vJ5H5r03lyOPYOw+vgVVPY6viOT/b7SOb4qh+PbmQs76f7CAAtFec1Ws3m2TCPxEK7+S7m/A W/LoyQxyevPAvT8+VSgY=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=foxido.dev; s=selcloud; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:List-id:List-Unsubscribe:Sender:Reply-To: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Help:List-Subscribe: List-Post:List-Owner:List-Archive; bh=n8R0rxbpTLCew8mahpHy82EY2jf6N1sgnYoOqfypFzM=; t=1762974488; x=1763147288; b=oMWL5IJsc/5IZisrWRLUW2OWuexBDJJ+8g/+pvwoIAxRWr9XPD217jWy5v4vN5NvO6nSAi5F/Q ENpqtbwAcB/rcDfXurWwNjY7YgkmnaASJwCyowehaVcw7Sdeyd8VBRWphibViEJJgevDROmiXdHUp qrwFCWWUgSyCRLOtuMHQ=; Precedence: bulk X-Issuen: 1428244 X-User: 149890965 X-Postmaster-Msgtype: 3849 Feedback-ID: 1428244:15965:3849:samotpravil X-From: foxido.dev X-from-id: 15965 X-MSG-TYPE: bulk List-Unsubscribe-Post: List-Unsubscribe=One-Click X-blist-id: 3849 X-Gungo: 20251107.120132 X-SMTPUID: mlgnr59 DKIM-Signature: v=1; a=rsa-sha256; s=202508r; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=n8R0rxbpTLCew8mahpHy82E Y2jf6N1sgnYoOqfypFzM=; b=EfKOa9taXJLq9903nx2dl4LgMNbXjeZBPqFhxykk6bSeKXldL/ KDPSWFysNGmfcbeP67EtmYawzCQGSydZhadswxuSWrFiyIzA3t792GC91LlKOYaooZqyewc7in6 UF7sQ3IKdk43lzQ4/hs5Dx+00H9/w/U+3hS7EZEp9oI3XR5Gu+Vn5CkJhXA0NKKBvVym0JOfp2S /hDifwiMqOldTwn41RV5XO27XoJO5SNkZ1zi2gtKe6Zgwr2AyFPj2vTL0Kj21R8ku6qXv7yB6QN K6y4vAxV1BH6oriuYmGXjD6dfst6gBy5VsIzTZdRuoOzxZDjde9hX/Vd0MeufhIo3Hw==; DKIM-Signature: v=1; a=ed25519-sha256; s=202508e; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=n8R0rxbpTLCew8mahpHy82E Y2jf6N1sgnYoOqfypFzM=; b=ETns0IkTqnWNGMgCHcvrYq8EY/t6wgmCPgD96oHvZgUjZ2sW0C LlPODLpjY1RGqMRkBxhxTj7JKJwpnLQJiCCQ==; From: Gladyshev Ilya To: foxido@foxido.dev Cc: Chris Mason , David Sterba , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 4/8] btrfs: simplify function protections with guards Date: Wed, 12 Nov 2025 21:49:40 +0300 Message-ID: X-Mailer: git-send-email 2.51.1.dirty In-Reply-To: References: 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" Replaces cases like void foo() { spin_lock(&lock); ... some code ... spin_unlock(&lock) } with void foo() { guard(spinlock)(&lock); ... some code ... } While it doesn't has any measurable impact, it makes clear that whole function body is protected under lock and removes future errors with additional cleanup paths. Signed-off-by: Gladyshev Ilya --- fs/btrfs/discard.c | 10 +++------- fs/btrfs/disk-io.c | 3 +-- fs/btrfs/extent-io-tree.c | 15 +++++---------- fs/btrfs/free-space-cache.c | 4 +--- fs/btrfs/inode.c | 3 +-- fs/btrfs/ordered-data.c | 6 ++---- fs/btrfs/qgroup.c | 9 +++------ fs/btrfs/raid56.c | 7 ++----- fs/btrfs/send.c | 3 +-- fs/btrfs/subpage.c | 36 +++++++++--------------------------- fs/btrfs/volumes.c | 3 +-- 11 files changed, 29 insertions(+), 70 deletions(-) diff --git a/fs/btrfs/discard.c b/fs/btrfs/discard.c index 89fe85778115..9bd7a8ad45c4 100644 --- a/fs/btrfs/discard.c +++ b/fs/btrfs/discard.c @@ -158,7 +158,7 @@ static bool remove_from_discard_list(struct btrfs_disca= rd_ctl *discard_ctl, bool running =3D false; bool queued =3D false; =20 - spin_lock(&discard_ctl->lock); + guard(spinlock)(&discard_ctl->lock); =20 if (block_group =3D=3D discard_ctl->block_group) { running =3D true; @@ -171,8 +171,6 @@ static bool remove_from_discard_list(struct btrfs_disca= rd_ctl *discard_ctl, if (queued) btrfs_put_block_group(block_group); =20 - spin_unlock(&discard_ctl->lock); - return running; } =20 @@ -236,7 +234,7 @@ static struct btrfs_block_group *peek_discard_list( { struct btrfs_block_group *block_group; =20 - spin_lock(&discard_ctl->lock); + guard(spinlock)(&discard_ctl->lock); again: block_group =3D find_next_block_group(discard_ctl, now); =20 @@ -276,7 +274,6 @@ static struct btrfs_block_group *peek_discard_list( *discard_state =3D block_group->discard_state; *discard_index =3D block_group->discard_index; } - spin_unlock(&discard_ctl->lock); =20 return block_group; } @@ -694,7 +691,7 @@ void btrfs_discard_punt_unused_bgs_list(struct btrfs_fs= _info *fs_info) { struct btrfs_block_group *block_group, *next; =20 - spin_lock(&fs_info->unused_bgs_lock); + guard(spinlock)(&fs_info->unused_bgs_lock); /* We enabled async discard, so punt all to the queue */ list_for_each_entry_safe(block_group, next, &fs_info->unused_bgs, bg_list) { @@ -706,7 +703,6 @@ void btrfs_discard_punt_unused_bgs_list(struct btrfs_fs= _info *fs_info) */ btrfs_put_block_group(block_group); } - spin_unlock(&fs_info->unused_bgs_lock); } =20 /* diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 0aa7e5d1b05f..55c29557c26c 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -4759,7 +4759,7 @@ static void btrfs_free_all_qgroup_pertrans(struct btr= fs_fs_info *fs_info) int i; int ret; =20 - spin_lock(&fs_info->fs_roots_radix_lock); + guard(spinlock)(&fs_info->fs_roots_radix_lock); while (1) { ret =3D radix_tree_gang_lookup_tag(&fs_info->fs_roots_radix, (void **)gang, 0, @@ -4776,7 +4776,6 @@ static void btrfs_free_all_qgroup_pertrans(struct btr= fs_fs_info *fs_info) BTRFS_ROOT_TRANS_TAG); } } - spin_unlock(&fs_info->fs_roots_radix_lock); } =20 void btrfs_cleanup_one_transaction(struct btrfs_transaction *cur_trans) diff --git a/fs/btrfs/extent-io-tree.c b/fs/btrfs/extent-io-tree.c index bb2ca1c9c7b0..3a9774bc714f 100644 --- a/fs/btrfs/extent-io-tree.c +++ b/fs/btrfs/extent-io-tree.c @@ -118,7 +118,7 @@ void btrfs_extent_io_tree_release(struct extent_io_tree= *tree) struct extent_state *state; struct extent_state *tmp; =20 - spin_lock(&tree->lock); + guard(spinlock)(&tree->lock); root =3D tree->state; tree->state =3D RB_ROOT; rbtree_postorder_for_each_entry_safe(state, tmp, &root, rb_node) { @@ -139,7 +139,6 @@ void btrfs_extent_io_tree_release(struct extent_io_tree= *tree) * be accessing the tree anymore. */ ASSERT(RB_EMPTY_ROOT(&tree->state)); - spin_unlock(&tree->lock); } =20 static struct extent_state *alloc_extent_state(gfp_t mask) @@ -958,7 +957,7 @@ bool btrfs_find_contiguous_extent_bit(struct extent_io_= tree *tree, u64 start, =20 ASSERT(!btrfs_fs_incompat(btrfs_extent_io_tree_to_fs_info(tree), NO_HOLES= )); =20 - spin_lock(&tree->lock); + guard(spinlock)(&tree->lock); state =3D find_first_extent_bit_state(tree, start, bits); if (state) { *start_ret =3D state->start; @@ -970,7 +969,6 @@ bool btrfs_find_contiguous_extent_bit(struct extent_io_= tree *tree, u64 start, } ret =3D true; } - spin_unlock(&tree->lock); return ret; } =20 @@ -1757,7 +1755,7 @@ bool btrfs_test_range_bit_exists(struct extent_io_tre= e *tree, u64 start, u64 end =20 ASSERT(is_power_of_2(bit)); =20 - spin_lock(&tree->lock); + guard(spinlock)(&tree->lock); state =3D tree_search(tree, start); while (state) { if (state->start > end) @@ -1772,7 +1770,6 @@ bool btrfs_test_range_bit_exists(struct extent_io_tre= e *tree, u64 start, u64 end break; state =3D next_state(state); } - spin_unlock(&tree->lock); return bitset; } =20 @@ -1790,7 +1787,7 @@ void btrfs_get_range_bits(struct extent_io_tree *tree= , u64 start, u64 end, u32 * =20 *bits =3D 0; =20 - spin_lock(&tree->lock); + guard(spinlock)(&tree->lock); state =3D tree_search(tree, start); if (state && state->start < end) { *cached_state =3D state; @@ -1807,7 +1804,6 @@ void btrfs_get_range_bits(struct extent_io_tree *tree= , u64 start, u64 end, u32 * =20 state =3D next_state(state); } - spin_unlock(&tree->lock); } =20 /* @@ -1931,12 +1927,11 @@ struct extent_state *btrfs_next_extent_state(struct= extent_io_tree *tree, { struct extent_state *next; =20 - spin_lock(&tree->lock); + guard(spinlock)(&tree->lock); ASSERT(extent_state_in_tree(state)); next =3D next_state(state); if (next) refcount_inc(&next->refs); - spin_unlock(&tree->lock); =20 return next; } diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index ab873bd67192..30e361ab02dc 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c @@ -3845,7 +3845,7 @@ static void reset_trimming_bitmap(struct btrfs_free_s= pace_ctl *ctl, u64 offset) { struct btrfs_free_space *entry; =20 - spin_lock(&ctl->tree_lock); + guard(spinlock)(&ctl->tree_lock); entry =3D tree_search_offset(ctl, offset, 1, 0); if (entry) { if (btrfs_free_space_trimmed(entry)) { @@ -3855,8 +3855,6 @@ static void reset_trimming_bitmap(struct btrfs_free_s= pace_ctl *ctl, u64 offset) } entry->trim_state =3D BTRFS_TRIM_STATE_UNTRIMMED; } - - spin_unlock(&ctl->tree_lock); } =20 static void end_trimming_bitmap(struct btrfs_free_space_ctl *ctl, diff --git a/fs/btrfs/inode.c b/fs/btrfs/inode.c index 6282911e536f..fdcf4948fa56 100644 --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -10424,12 +10424,11 @@ void btrfs_update_inode_bytes(struct btrfs_inode = *inode, if (add_bytes =3D=3D del_bytes) return; =20 - spin_lock(&inode->lock); + guard(spinlock)(&inode->lock); if (del_bytes > 0) inode_sub_bytes(&inode->vfs_inode, del_bytes); if (add_bytes > 0) inode_add_bytes(&inode->vfs_inode, add_bytes); - spin_unlock(&inode->lock); } =20 /* diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c index 2829f20d7bb5..27a16bacdf9c 100644 --- a/fs/btrfs/ordered-data.c +++ b/fs/btrfs/ordered-data.c @@ -328,9 +328,8 @@ void btrfs_add_ordered_sum(struct btrfs_ordered_extent = *entry, { struct btrfs_inode *inode =3D entry->inode; =20 - spin_lock_irq(&inode->ordered_tree_lock); + guard(spinlock_irq)(&inode->ordered_tree_lock); list_add_tail(&sum->list, &entry->list); - spin_unlock_irq(&inode->ordered_tree_lock); } =20 void btrfs_mark_ordered_extent_error(struct btrfs_ordered_extent *ordered) @@ -1041,7 +1040,7 @@ void btrfs_get_ordered_extents_for_logging(struct btr= fs_inode *inode, =20 btrfs_assert_inode_locked(inode); =20 - spin_lock_irq(&inode->ordered_tree_lock); + guard(spinlock_irq)(&inode->ordered_tree_lock); for (n =3D rb_first(&inode->ordered_tree); n; n =3D rb_next(n)) { struct btrfs_ordered_extent *ordered; =20 @@ -1055,7 +1054,6 @@ void btrfs_get_ordered_extents_for_logging(struct btr= fs_inode *inode, refcount_inc(&ordered->refs); trace_btrfs_ordered_extent_lookup_for_logging(inode, ordered); } - spin_unlock_irq(&inode->ordered_tree_lock); } =20 /* diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index a8474d0a9c58..683905f4481d 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -3973,7 +3973,7 @@ qgroup_rescan_zero_tracking(struct btrfs_fs_info *fs_= info) struct rb_node *n; struct btrfs_qgroup *qgroup; =20 - spin_lock(&fs_info->qgroup_lock); + guard(spinlock)(&fs_info->qgroup_lock); /* clear all current qgroup tracking information */ for (n =3D rb_first(&fs_info->qgroup_tree); n; n =3D rb_next(n)) { qgroup =3D rb_entry(n, struct btrfs_qgroup, node); @@ -3983,7 +3983,6 @@ qgroup_rescan_zero_tracking(struct btrfs_fs_info *fs_= info) qgroup->excl_cmpr =3D 0; qgroup_dirty(fs_info, qgroup); } - spin_unlock(&fs_info->qgroup_lock); } =20 int @@ -4419,12 +4418,11 @@ static void add_root_meta_rsv(struct btrfs_root *ro= ot, int num_bytes, if (num_bytes =3D=3D 0) return; =20 - spin_lock(&root->qgroup_meta_rsv_lock); + guard(spinlock)(&root->qgroup_meta_rsv_lock); if (type =3D=3D BTRFS_QGROUP_RSV_META_PREALLOC) root->qgroup_meta_rsv_prealloc +=3D num_bytes; else root->qgroup_meta_rsv_pertrans +=3D num_bytes; - spin_unlock(&root->qgroup_meta_rsv_lock); } =20 static int sub_root_meta_rsv(struct btrfs_root *root, int num_bytes, @@ -4436,7 +4434,7 @@ static int sub_root_meta_rsv(struct btrfs_root *root,= int num_bytes, if (num_bytes =3D=3D 0) return 0; =20 - spin_lock(&root->qgroup_meta_rsv_lock); + guard(spinlock)(&root->qgroup_meta_rsv_lock); if (type =3D=3D BTRFS_QGROUP_RSV_META_PREALLOC) { num_bytes =3D min_t(u64, root->qgroup_meta_rsv_prealloc, num_bytes); @@ -4446,7 +4444,6 @@ static int sub_root_meta_rsv(struct btrfs_root *root,= int num_bytes, num_bytes); root->qgroup_meta_rsv_pertrans -=3D num_bytes; } - spin_unlock(&root->qgroup_meta_rsv_lock); return num_bytes; } =20 diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c index 0135dceb7baa..6b9fda36d3c6 100644 --- a/fs/btrfs/raid56.c +++ b/fs/btrfs/raid56.c @@ -516,13 +516,12 @@ static void btrfs_clear_rbio_cache(struct btrfs_fs_in= fo *info) =20 table =3D info->stripe_hash_table; =20 - spin_lock(&table->cache_lock); + guard(spinlock)(&table->cache_lock); while (!list_empty(&table->stripe_cache)) { rbio =3D list_first_entry(&table->stripe_cache, struct btrfs_raid_bio, stripe_cache); __remove_rbio_from_cache(rbio); } - spin_unlock(&table->cache_lock); } =20 /* @@ -1234,11 +1233,9 @@ static void index_rbio_pages(struct btrfs_raid_bio *= rbio) { struct bio *bio; =20 - spin_lock(&rbio->bio_list_lock); + guard(spinlock)(&rbio->bio_list_lock); bio_list_for_each(bio, &rbio->bio_list) index_one_bio(rbio, bio); - - spin_unlock(&rbio->bio_list_lock); } =20 static void bio_get_trace_info(struct btrfs_raid_bio *rbio, struct bio *bi= o, diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index 96a030d28e09..e7e33c9feca0 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -7980,7 +7980,7 @@ static int flush_delalloc_roots(struct send_ctx *sctx) =20 static void btrfs_root_dec_send_in_progress(struct btrfs_root* root) { - spin_lock(&root->root_item_lock); + guard(spinlock)(&root->root_item_lock); root->send_in_progress--; /* * Not much left to do, we don't know why it's unbalanced and @@ -7990,7 +7990,6 @@ static void btrfs_root_dec_send_in_progress(struct bt= rfs_root* root) btrfs_err(root->fs_info, "send_in_progress unbalanced %d root %llu", root->send_in_progress, btrfs_root_id(root)); - spin_unlock(&root->root_item_lock); } =20 static void dedupe_in_progress_warn(const struct btrfs_root *root) diff --git a/fs/btrfs/subpage.c b/fs/btrfs/subpage.c index 5ca8d4db6722..8c8563e87aea 100644 --- a/fs/btrfs/subpage.c +++ b/fs/btrfs/subpage.c @@ -364,13 +364,11 @@ void btrfs_subpage_set_uptodate(const struct btrfs_fs= _info *fs_info, struct btrfs_folio_state *bfs =3D folio_get_private(folio); unsigned int start_bit =3D subpage_calc_start_bit(fs_info, folio, uptodate, start, len); - unsigned long flags; =20 - spin_lock_irqsave(&bfs->lock, flags); + guard(spinlock_irqsave)(&bfs->lock); bitmap_set(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); if (subpage_test_bitmap_all_set(fs_info, folio, uptodate)) folio_mark_uptodate(folio); - spin_unlock_irqrestore(&bfs->lock, flags); } =20 void btrfs_subpage_clear_uptodate(const struct btrfs_fs_info *fs_info, @@ -379,12 +377,10 @@ void btrfs_subpage_clear_uptodate(const struct btrfs_= fs_info *fs_info, struct btrfs_folio_state *bfs =3D folio_get_private(folio); unsigned int start_bit =3D subpage_calc_start_bit(fs_info, folio, uptodate, start, len); - unsigned long flags; =20 - spin_lock_irqsave(&bfs->lock, flags); + guard(spinlock_irqsave)(&bfs->lock); bitmap_clear(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); folio_clear_uptodate(folio); - spin_unlock_irqrestore(&bfs->lock, flags); } =20 void btrfs_subpage_set_dirty(const struct btrfs_fs_info *fs_info, @@ -417,14 +413,12 @@ bool btrfs_subpage_clear_and_test_dirty(const struct = btrfs_fs_info *fs_info, struct btrfs_folio_state *bfs =3D folio_get_private(folio); unsigned int start_bit =3D subpage_calc_start_bit(fs_info, folio, dirty, start, len); - unsigned long flags; bool last =3D false; =20 - spin_lock_irqsave(&bfs->lock, flags); + guard(spinlock_irqsave)(&bfs->lock); bitmap_clear(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); if (subpage_test_bitmap_all_zero(fs_info, folio, dirty)) last =3D true; - spin_unlock_irqrestore(&bfs->lock, flags); return last; } =20 @@ -444,9 +438,8 @@ void btrfs_subpage_set_writeback(const struct btrfs_fs_= info *fs_info, struct btrfs_folio_state *bfs =3D folio_get_private(folio); unsigned int start_bit =3D subpage_calc_start_bit(fs_info, folio, writeback, start, len); - unsigned long flags; =20 - spin_lock_irqsave(&bfs->lock, flags); + guard(spinlock_irqsave)(&bfs->lock); bitmap_set(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); =20 /* @@ -467,7 +460,6 @@ void btrfs_subpage_set_writeback(const struct btrfs_fs_= info *fs_info, xas_clear_mark(&xas, PAGECACHE_TAG_TOWRITE); xas_unlock_irqrestore(&xas, flags); } - spin_unlock_irqrestore(&bfs->lock, flags); } =20 void btrfs_subpage_clear_writeback(const struct btrfs_fs_info *fs_info, @@ -476,15 +468,13 @@ void btrfs_subpage_clear_writeback(const struct btrfs= _fs_info *fs_info, struct btrfs_folio_state *bfs =3D folio_get_private(folio); unsigned int start_bit =3D subpage_calc_start_bit(fs_info, folio, writeback, start, len); - unsigned long flags; =20 - spin_lock_irqsave(&bfs->lock, flags); + guard(spinlock_irqsave)(&bfs->lock); bitmap_clear(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); if (subpage_test_bitmap_all_zero(fs_info, folio, writeback)) { ASSERT(folio_test_writeback(folio)); folio_end_writeback(folio); } - spin_unlock_irqrestore(&bfs->lock, flags); } =20 void btrfs_subpage_set_ordered(const struct btrfs_fs_info *fs_info, @@ -493,12 +483,10 @@ void btrfs_subpage_set_ordered(const struct btrfs_fs_= info *fs_info, struct btrfs_folio_state *bfs =3D folio_get_private(folio); unsigned int start_bit =3D subpage_calc_start_bit(fs_info, folio, ordered, start, len); - unsigned long flags; =20 - spin_lock_irqsave(&bfs->lock, flags); + guard(spinlock_irqsave)(&bfs->lock); bitmap_set(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); folio_set_ordered(folio); - spin_unlock_irqrestore(&bfs->lock, flags); } =20 void btrfs_subpage_clear_ordered(const struct btrfs_fs_info *fs_info, @@ -507,13 +495,11 @@ void btrfs_subpage_clear_ordered(const struct btrfs_f= s_info *fs_info, struct btrfs_folio_state *bfs =3D folio_get_private(folio); unsigned int start_bit =3D subpage_calc_start_bit(fs_info, folio, ordered, start, len); - unsigned long flags; =20 - spin_lock_irqsave(&bfs->lock, flags); + guard(spinlock_irqsave)(&bfs->lock); bitmap_clear(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); if (subpage_test_bitmap_all_zero(fs_info, folio, ordered)) folio_clear_ordered(folio); - spin_unlock_irqrestore(&bfs->lock, flags); } =20 void btrfs_subpage_set_checked(const struct btrfs_fs_info *fs_info, @@ -522,13 +508,11 @@ void btrfs_subpage_set_checked(const struct btrfs_fs_= info *fs_info, struct btrfs_folio_state *bfs =3D folio_get_private(folio); unsigned int start_bit =3D subpage_calc_start_bit(fs_info, folio, checked, start, len); - unsigned long flags; =20 - spin_lock_irqsave(&bfs->lock, flags); + guard(spinlock_irqsave)(&bfs->lock); bitmap_set(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); if (subpage_test_bitmap_all_set(fs_info, folio, checked)) folio_set_checked(folio); - spin_unlock_irqrestore(&bfs->lock, flags); } =20 void btrfs_subpage_clear_checked(const struct btrfs_fs_info *fs_info, @@ -537,12 +521,10 @@ void btrfs_subpage_clear_checked(const struct btrfs_f= s_info *fs_info, struct btrfs_folio_state *bfs =3D folio_get_private(folio); unsigned int start_bit =3D subpage_calc_start_bit(fs_info, folio, checked, start, len); - unsigned long flags; =20 - spin_lock_irqsave(&bfs->lock, flags); + guard(spinlock_irqsave)(&bfs->lock); bitmap_clear(bfs->bitmaps, start_bit, len >> fs_info->sectorsize_bits); folio_clear_checked(folio); - spin_unlock_irqrestore(&bfs->lock, flags); } =20 /* diff --git a/fs/btrfs/volumes.c b/fs/btrfs/volumes.c index 2bec544d8ba3..3ccf6c958388 100644 --- a/fs/btrfs/volumes.c +++ b/fs/btrfs/volumes.c @@ -8152,7 +8152,7 @@ bool btrfs_pinned_by_swapfile(struct btrfs_fs_info *f= s_info, void *ptr) struct btrfs_swapfile_pin *sp; struct rb_node *node; =20 - spin_lock(&fs_info->swapfile_pins_lock); + guard(spinlock)(&fs_info->swapfile_pins_lock); node =3D fs_info->swapfile_pins.rb_node; while (node) { sp =3D rb_entry(node, struct btrfs_swapfile_pin, node); @@ -8163,7 +8163,6 @@ bool btrfs_pinned_by_swapfile(struct btrfs_fs_info *f= s_info, void *ptr) else break; } - spin_unlock(&fs_info->swapfile_pins_lock); return node !=3D NULL; } =20 --=20 2.51.1.dirty From nobody Sat Feb 7 23:24:09 2026 Received: from sender8.mail.selcloud.ru (sender8.mail.selcloud.ru [5.8.75.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6C5B134C83A; Wed, 12 Nov 2025 19:07:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=5.8.75.171 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974477; cv=none; b=E4wL0YjiFG20rsuMR23v8LvKe+Kjxssj6drhON6+l7SKTcTVQobKul2Qf4h1G1m4rsYyhJZ6cmp2x25gnx0WUgDhSxgFCWypaXDYUT3fRUXRelGcKKc0WUT0iKpeRrS/Zhfy68G//8ttM14kk1TOTCNqYHBJDXo4AfwoSJ7hTxU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974477; c=relaxed/simple; bh=4PLs+WUgqBx5bFa82SBuvXzcrkcDRh1gMjdrfEzpWTw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eM0AGYhaNGDldPfwpBWIdBvXbts2pfR6PYKw2MeTcQo1DExDeY51IJKVZpwXuAIGQLsmFBspYgZjoHci/AemXkNC6UBPxNteIk5etRToc1BS8UsyL4uHZUcQfJatMJ+KzXaHD17MPg0fiwQ8tj4+u0aWaipthibsyCeqK8rZFpI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev; spf=pass smtp.mailfrom=mail.selcloud.ru; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b=tBzfAJy8; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=dT0BVuCZ; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=WVe4q9Nf; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=2Fc+iwDG; arc=none smtp.client-ip=5.8.75.171 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mail.selcloud.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b="tBzfAJy8"; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="dT0BVuCZ"; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="WVe4q9Nf"; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="2Fc+iwDG" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.selcloud.ru; s=selcloud; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:List-id: List-Unsubscribe:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Help:List-Subscribe:List-Post:List-Owner:List-Archive; bh=H8OlNQEg1ENEo5qBu7hKEVVI6gg5bAmLVgMtxjcxTg8=; t=1762974472; x=1763147272; b=tBzfAJy8eBmqMZYlkYYAgQhmeAMcWVG5LiTPDH+kPnPiGrAeiPY5bFvpCDmcHSrvoqtUf3vLrX ADJJwpsaaT2sreK7HsGh5uqtm6ZSNbmy3UujX4Ce9Z5i9TaVSu8RgF9j3APT+Vz78Gn2SMtuqhyUv AnfD3sRNiypbTDFPPtpI=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=foxido.dev; s=selcloud; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:List-id:List-Unsubscribe:Sender:Reply-To: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Help:List-Subscribe: List-Post:List-Owner:List-Archive; bh=H8OlNQEg1ENEo5qBu7hKEVVI6gg5bAmLVgMtxjcxTg8=; t=1762974472; x=1763147272; b=dT0BVuCZKAdgbTFUVZ35VpT9zYECP9CSc1pxWHCavymnla7j+UnVA1KLCOqWFnknI06Dl8/1D8 pYnbe0bXAK0hKHWt4IpwpJ37FFadPcIpZj4+dJ5XJznokSLb79rSn7r7u56YSl4luoydRP/Kcr8Di TSngQsEHr+vjO6UGKAkA=; Precedence: bulk X-Issuen: 1428244 X-User: 149890965 X-Postmaster-Msgtype: 3849 Feedback-ID: 1428244:15965:3849:samotpravil X-From: foxido.dev X-from-id: 15965 X-MSG-TYPE: bulk List-Unsubscribe-Post: List-Unsubscribe=One-Click X-blist-id: 3849 X-Gungo: 20251107.120132 X-SMTPUID: mlgnr62 DKIM-Signature: v=1; a=rsa-sha256; s=202508r; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=H8OlNQEg1ENEo5qBu7hKEVV I6gg5bAmLVgMtxjcxTg8=; b=WVe4q9Nf17ncJzF25jOpscKRN4xvhRdX6NVcWITjj6XRDI5ERn KPzC39OfprJCmEpd/9Rn50RAGbgSjQPEncGL8h66t+QRLLdVwqzbWUQheMBuxgyTgE3Ecf4OIXv YPFDC+XoBodkGYizkVmj8z4Dtb4Ma5ID+gqbHi0LZ2IUBpVYjGIeDSIT97YMLYw9wW+2KU4pKVc yBJdQT3i5i2eqMOqdlwtlqoQkPYF2hzVwDMeLi4HMJYCdDpT5Ln3mhBsKSBVX76k/bMJWxc9PhK BcJa9xakQghDnnxhUdH5j/nIOObsHT5nt1O+4t22Svy3IgGMq1IWOBEl0vOAAB6rl7Q==; DKIM-Signature: v=1; a=ed25519-sha256; s=202508e; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=H8OlNQEg1ENEo5qBu7hKEVV I6gg5bAmLVgMtxjcxTg8=; b=2Fc+iwDGtaOuOKCOMYrAFQG5JzeoeybODXS8d/di1I5vH9VD3J uXYTRpEg2dblaLdKjGXRkTZH11tSRhJhUzAg==; From: Gladyshev Ilya To: foxido@foxido.dev Cc: Chris Mason , David Sterba , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 5/8] btrfs: use cleanup.h guard()s to simplify unlocks on return Date: Wed, 12 Nov 2025 21:49:41 +0300 Message-ID: <3982cbff072fb85b8fc6a89cd48414d6f457aa37.1762972845.git.foxido@foxido.dev> X-Mailer: git-send-email 2.51.1.dirty In-Reply-To: References: 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" Simplify cleanup in functions with multiple exit paths / cleanup gotos. While it's only measurable benefit is slightly reduced code size, it improves readability and robustness of resource cleanups, eliminating future errors. Signed-off-by: Gladyshev Ilya --- fs/btrfs/block-group.c | 4 +-- fs/btrfs/discard.c | 10 ++----- fs/btrfs/disk-io.c | 6 ++-- fs/btrfs/extent-io-tree.c | 36 +++++++++-------------- fs/btrfs/file-item.c | 6 ++-- fs/btrfs/free-space-cache.c | 20 ++++--------- fs/btrfs/fs.c | 9 ++---- fs/btrfs/ordered-data.c | 15 ++++------ fs/btrfs/qgroup.c | 57 +++++++++++++------------------------ fs/btrfs/raid56.c | 13 ++------- fs/btrfs/space-info.c | 4 +-- fs/btrfs/subpage.c | 5 +--- fs/btrfs/tree-log.c | 15 +++++----- fs/btrfs/zoned.c | 13 +++------ fs/btrfs/zstd.c | 13 +++------ 15 files changed, 73 insertions(+), 153 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 5322ef2ae015..0ef8917e7a71 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -416,16 +416,14 @@ struct btrfs_caching_control *btrfs_get_caching_contr= ol( struct btrfs_block_group *cache) { struct btrfs_caching_control *ctl; + guard(spinlock)(&cache->lock); =20 - spin_lock(&cache->lock); if (!cache->caching_ctl) { - spin_unlock(&cache->lock); return NULL; } =20 ctl =3D cache->caching_ctl; refcount_inc(&ctl->count); - spin_unlock(&cache->lock); return ctl; } =20 diff --git a/fs/btrfs/discard.c b/fs/btrfs/discard.c index 9bd7a8ad45c4..4dd9f58118bc 100644 --- a/fs/btrfs/discard.c +++ b/fs/btrfs/discard.c @@ -129,12 +129,11 @@ static void add_to_discard_unused_list(struct btrfs_d= iscard_ctl *discard_ctl, { bool queued; =20 - spin_lock(&discard_ctl->lock); + guard(spinlock)(&discard_ctl->lock); =20 queued =3D !list_empty(&block_group->discard_list); =20 if (!btrfs_run_discard_work(discard_ctl)) { - spin_unlock(&discard_ctl->lock); return; } =20 @@ -148,8 +147,6 @@ static void add_to_discard_unused_list(struct btrfs_dis= card_ctl *discard_ctl, btrfs_get_block_group(block_group); list_add_tail(&block_group->discard_list, &discard_ctl->discard_list[BTRFS_DISCARD_INDEX_UNUSED]); - - spin_unlock(&discard_ctl->lock); } =20 static bool remove_from_discard_list(struct btrfs_discard_ctl *discard_ctl, @@ -592,7 +589,7 @@ void btrfs_discard_calc_delay(struct btrfs_discard_ctl = *discard_ctl) if (!discardable_extents) return; =20 - spin_lock(&discard_ctl->lock); + guard(spinlock)(&discard_ctl->lock); =20 /* * The following is to fix a potential -1 discrepancy that we're not @@ -611,7 +608,6 @@ void btrfs_discard_calc_delay(struct btrfs_discard_ctl = *discard_ctl) &discard_ctl->discardable_bytes); =20 if (discardable_extents <=3D 0) { - spin_unlock(&discard_ctl->lock); return; } =20 @@ -630,8 +626,6 @@ void btrfs_discard_calc_delay(struct btrfs_discard_ctl = *discard_ctl) =20 delay =3D clamp(delay, min_delay, BTRFS_DISCARD_MAX_DELAY_MSEC); discard_ctl->delay_ms =3D delay; - - spin_unlock(&discard_ctl->lock); } =20 /* diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 55c29557c26c..23dd82a944ee 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -1142,12 +1142,10 @@ static struct btrfs_root *btrfs_lookup_fs_root(stru= ct btrfs_fs_info *fs_info, { struct btrfs_root *root; =20 - spin_lock(&fs_info->fs_roots_radix_lock); + guard(spinlock)(&fs_info->fs_roots_radix_lock); root =3D radix_tree_lookup(&fs_info->fs_roots_radix, (unsigned long)root_id); - root =3D btrfs_grab_root(root); - spin_unlock(&fs_info->fs_roots_radix_lock); - return root; + return btrfs_grab_root(root); } =20 static struct btrfs_root *btrfs_get_global_root(struct btrfs_fs_info *fs_i= nfo, diff --git a/fs/btrfs/extent-io-tree.c b/fs/btrfs/extent-io-tree.c index 3a9774bc714f..69ea2bd359a6 100644 --- a/fs/btrfs/extent-io-tree.c +++ b/fs/btrfs/extent-io-tree.c @@ -987,7 +987,7 @@ bool btrfs_find_delalloc_range(struct extent_io_tree *t= ree, u64 *start, bool found =3D false; u64 total_bytes =3D 0; =20 - spin_lock(&tree->lock); + guard(spinlock)(&tree->lock); =20 /* * This search will find all the extents that end after our range @@ -996,18 +996,18 @@ bool btrfs_find_delalloc_range(struct extent_io_tree = *tree, u64 *start, state =3D tree_search(tree, cur_start); if (!state) { *end =3D (u64)-1; - goto out; + return false; } =20 while (state) { if (found && (state->start !=3D cur_start || (state->state & EXTENT_BOUNDARY))) { - goto out; + return true; } if (!(state->state & EXTENT_DELALLOC)) { if (!found) *end =3D state->end; - goto out; + return found; } if (!found) { *start =3D state->start; @@ -1019,11 +1019,9 @@ bool btrfs_find_delalloc_range(struct extent_io_tree= *tree, u64 *start, cur_start =3D state->end + 1; total_bytes +=3D state->end - state->start + 1; if (total_bytes >=3D max_bytes) - break; + return true; state =3D next_state(state); } -out: - spin_unlock(&tree->lock); return found; } =20 @@ -1548,7 +1546,7 @@ void btrfs_find_first_clear_extent_bit(struct extent_= io_tree *tree, u64 start, struct extent_state *state; struct extent_state *prev =3D NULL, *next =3D NULL; =20 - spin_lock(&tree->lock); + guard(spinlock)(&tree->lock); =20 /* Find first extent with bits cleared */ while (1) { @@ -1560,7 +1558,7 @@ void btrfs_find_first_clear_extent_bit(struct extent_= io_tree *tree, u64 start, */ *start_ret =3D 0; *end_ret =3D -1; - goto out; + return; } else if (!state && !next) { /* * We are past the last allocated chunk, set start at @@ -1568,7 +1566,7 @@ void btrfs_find_first_clear_extent_bit(struct extent_= io_tree *tree, u64 start, */ *start_ret =3D prev->end + 1; *end_ret =3D -1; - goto out; + return; } else if (!state) { state =3D next; } @@ -1631,8 +1629,6 @@ void btrfs_find_first_clear_extent_bit(struct extent_= io_tree *tree, u64 start, } state =3D next_state(state); } -out: - spin_unlock(&tree->lock); } =20 /* @@ -1813,12 +1809,11 @@ bool btrfs_test_range_bit(struct extent_io_tree *tr= ee, u64 start, u64 end, u32 b struct extent_state *cached) { struct extent_state *state; - bool bitset =3D true; =20 ASSERT(is_power_of_2(bit)); ASSERT(start < end); =20 - spin_lock(&tree->lock); + guard(spinlock)(&tree->lock); if (cached && extent_state_in_tree(cached) && cached->start <=3D start && cached->end > start) state =3D cached; @@ -1826,17 +1821,15 @@ bool btrfs_test_range_bit(struct extent_io_tree *tr= ee, u64 start, u64 end, u32 b state =3D tree_search(tree, start); while (state) { if (state->start > start) { - bitset =3D false; - break; + return false; } =20 if ((state->state & bit) =3D=3D 0) { - bitset =3D false; - break; + return false; } =20 if (state->end >=3D end) - break; + return true; =20 /* Next state must start where this one ends. */ start =3D state->end + 1; @@ -1844,10 +1837,7 @@ bool btrfs_test_range_bit(struct extent_io_tree *tre= e, u64 start, u64 end, u32 b } =20 /* We ran out of states and were still inside of our range. */ - if (!state) - bitset =3D false; - spin_unlock(&tree->lock); - return bitset; + return false; } =20 /* Wrappers around set/clear extent bit */ diff --git a/fs/btrfs/file-item.c b/fs/btrfs/file-item.c index a42e6d54e7cd..7dfbfe468a34 100644 --- a/fs/btrfs/file-item.c +++ b/fs/btrfs/file-item.c @@ -48,11 +48,11 @@ void btrfs_inode_safe_disk_i_size_write(struct btrfs_in= ode *inode, u64 new_i_siz u64 start, end, i_size; bool found; =20 - spin_lock(&inode->lock); + guard(spinlock)(&inode->lock); i_size =3D new_i_size ?: i_size_read(&inode->vfs_inode); if (!inode->file_extent_tree) { inode->disk_i_size =3D i_size; - goto out_unlock; + return; } =20 found =3D btrfs_find_contiguous_extent_bit(inode->file_extent_tree, 0, &s= tart, @@ -62,8 +62,6 @@ void btrfs_inode_safe_disk_i_size_write(struct btrfs_inod= e *inode, u64 new_i_siz else i_size =3D 0; inode->disk_i_size =3D i_size; -out_unlock: - spin_unlock(&inode->lock); } =20 /* diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index 30e361ab02dc..7ad3f635576e 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c @@ -3061,24 +3061,21 @@ bool btrfs_is_free_space_trimmed(struct btrfs_block= _group *block_group) struct btrfs_free_space_ctl *ctl =3D block_group->free_space_ctl; struct btrfs_free_space *info; struct rb_node *node; - bool ret =3D true; =20 - spin_lock(&ctl->tree_lock); + guard(spinlock)(&ctl->tree_lock); node =3D rb_first(&ctl->free_space_offset); =20 while (node) { info =3D rb_entry(node, struct btrfs_free_space, offset_index); =20 if (!btrfs_free_space_trimmed(info)) { - ret =3D false; - break; + return false; } =20 node =3D rb_next(node); } =20 - spin_unlock(&ctl->tree_lock); - return ret; + return true; } =20 u64 btrfs_find_space_for_alloc(struct btrfs_block_group *block_group, @@ -3583,23 +3580,21 @@ int btrfs_find_space_cluster(struct btrfs_block_gro= up *block_group, min_bytes =3D fs_info->sectorsize; } =20 - spin_lock(&ctl->tree_lock); + guard(spinlock)(&ctl->tree_lock); =20 /* * If we know we don't have enough space to make a cluster don't even * bother doing all the work to try and find one. */ if (ctl->free_space < bytes) { - spin_unlock(&ctl->tree_lock); return -ENOSPC; } =20 - spin_lock(&cluster->lock); + guard(spinlock)(&cluster->lock); =20 /* someone already found a cluster, hooray */ if (cluster->block_group) { - ret =3D 0; - goto out; + return 0; } =20 trace_btrfs_find_cluster(block_group, offset, bytes, empty_size, @@ -3625,9 +3620,6 @@ int btrfs_find_space_cluster(struct btrfs_block_group= *block_group, } else { trace_btrfs_failed_cluster_setup(block_group); } -out: - spin_unlock(&cluster->lock); - spin_unlock(&ctl->tree_lock); =20 return ret; } diff --git a/fs/btrfs/fs.c b/fs/btrfs/fs.c index feb0a2faa837..774c1ffa032c 100644 --- a/fs/btrfs/fs.c +++ b/fs/btrfs/fs.c @@ -108,16 +108,13 @@ bool __attribute_const__ btrfs_supported_blocksize(u3= 2 blocksize) bool btrfs_exclop_start(struct btrfs_fs_info *fs_info, enum btrfs_exclusive_operation type) { - bool ret =3D false; - - spin_lock(&fs_info->super_lock); + guard(spinlock)(&fs_info->super_lock); if (fs_info->exclusive_operation =3D=3D BTRFS_EXCLOP_NONE) { fs_info->exclusive_operation =3D type; - ret =3D true; + return true; } - spin_unlock(&fs_info->super_lock); =20 - return ret; + return false; } =20 /* diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c index 27a16bacdf9c..451b60de4550 100644 --- a/fs/btrfs/ordered-data.c +++ b/fs/btrfs/ordered-data.c @@ -970,22 +970,19 @@ struct btrfs_ordered_extent *btrfs_lookup_ordered_ext= ent(struct btrfs_inode *ino { struct rb_node *node; struct btrfs_ordered_extent *entry =3D NULL; - unsigned long flags; =20 - spin_lock_irqsave(&inode->ordered_tree_lock, flags); + guard(spinlock_irqsave)(&inode->ordered_tree_lock); node =3D ordered_tree_search(inode, file_offset); if (!node) - goto out; + return NULL; =20 entry =3D rb_entry(node, struct btrfs_ordered_extent, rb_node); if (!in_range(file_offset, entry->file_offset, entry->num_bytes)) - entry =3D NULL; + return NULL; if (entry) { refcount_inc(&entry->refs); trace_btrfs_ordered_extent_lookup(inode, entry); } -out: - spin_unlock_irqrestore(&inode->ordered_tree_lock, flags); return entry; } =20 @@ -1066,16 +1063,14 @@ btrfs_lookup_first_ordered_extent(struct btrfs_inod= e *inode, u64 file_offset) struct rb_node *node; struct btrfs_ordered_extent *entry =3D NULL; =20 - spin_lock_irq(&inode->ordered_tree_lock); + guard(spinlock_irq)(&inode->ordered_tree_lock); node =3D ordered_tree_search(inode, file_offset); if (!node) - goto out; + return NULL; =20 entry =3D rb_entry(node, struct btrfs_ordered_extent, rb_node); refcount_inc(&entry->refs); trace_btrfs_ordered_extent_lookup_first(inode, entry); -out: - spin_unlock_irq(&inode->ordered_tree_lock); return entry; } =20 diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 683905f4481d..b76fc5474ae9 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -1662,38 +1662,31 @@ int btrfs_create_qgroup(struct btrfs_trans_handle *= trans, u64 qgroupid) struct btrfs_qgroup *prealloc; int ret =3D 0; =20 - mutex_lock(&fs_info->qgroup_ioctl_lock); - if (!fs_info->quota_root) { - ret =3D -ENOTCONN; - goto out; - } + guard(mutex)(&fs_info->qgroup_ioctl_lock); + + if (!fs_info->quota_root) + return -ENOTCONN; + quota_root =3D fs_info->quota_root; qgroup =3D find_qgroup_rb(fs_info, qgroupid); - if (qgroup) { - ret =3D -EEXIST; - goto out; - } + if (qgroup) + return -EEXIST; =20 prealloc =3D kzalloc(sizeof(*prealloc), GFP_NOFS); - if (!prealloc) { - ret =3D -ENOMEM; - goto out; - } + if (!prealloc) + return -ENOMEM; =20 ret =3D add_qgroup_item(trans, quota_root, qgroupid); if (ret) { kfree(prealloc); - goto out; + return ret; } =20 spin_lock(&fs_info->qgroup_lock); qgroup =3D add_qgroup_rb(fs_info, prealloc, qgroupid); spin_unlock(&fs_info->qgroup_lock); =20 - ret =3D btrfs_sysfs_add_one_qgroup(fs_info, qgroup); -out: - mutex_unlock(&fs_info->qgroup_ioctl_lock); - return ret; + return btrfs_sysfs_add_one_qgroup(fs_info, qgroup); } =20 /* @@ -3175,13 +3168,10 @@ int btrfs_qgroup_check_inherit(struct btrfs_fs_info= *fs_info, if (btrfs_qgroup_level(qgroupid) =3D=3D 0) return -EINVAL; =20 - spin_lock(&fs_info->qgroup_lock); + guard(spinlock)(&fs_info->qgroup_lock); qgroup =3D find_qgroup_rb(fs_info, qgroupid); - if (!qgroup) { - spin_unlock(&fs_info->qgroup_lock); + if (!qgroup) return -ENOENT; - } - spin_unlock(&fs_info->qgroup_lock); } return 0; } @@ -4640,9 +4630,9 @@ void btrfs_qgroup_clean_swapped_blocks(struct btrfs_r= oot *root) =20 swapped_blocks =3D &root->swapped_blocks; =20 - spin_lock(&swapped_blocks->lock); + guard(spinlock)(&swapped_blocks->lock); if (!swapped_blocks->swapped) - goto out; + return; for (i =3D 0; i < BTRFS_MAX_LEVEL; i++) { struct rb_root *cur_root =3D &swapped_blocks->blocks[i]; struct btrfs_qgroup_swapped_block *entry; @@ -4654,8 +4644,6 @@ void btrfs_qgroup_clean_swapped_blocks(struct btrfs_r= oot *root) swapped_blocks->blocks[i] =3D RB_ROOT; } swapped_blocks->swapped =3D false; -out: - spin_unlock(&swapped_blocks->lock); } =20 static int qgroup_swapped_block_bytenr_key_cmp(const void *key, const stru= ct rb_node *node) @@ -4873,7 +4861,6 @@ void btrfs_qgroup_destroy_extent_records(struct btrfs= _transaction *trans) int btrfs_record_squota_delta(struct btrfs_fs_info *fs_info, const struct btrfs_squota_delta *delta) { - int ret; struct btrfs_qgroup *qgroup; struct btrfs_qgroup *qg; LIST_HEAD(qgroup_list); @@ -4891,14 +4878,11 @@ int btrfs_record_squota_delta(struct btrfs_fs_info = *fs_info, if (delta->generation < fs_info->qgroup_enable_gen) return 0; =20 - spin_lock(&fs_info->qgroup_lock); + guard(spinlock)(&fs_info->qgroup_lock); qgroup =3D find_qgroup_rb(fs_info, root); - if (!qgroup) { - ret =3D -ENOENT; - goto out; - } + if (!qgroup) + return -ENOENT; =20 - ret =3D 0; qgroup_iterator_add(&qgroup_list, qgroup); list_for_each_entry(qg, &qgroup_list, iterator) { struct btrfs_qgroup_list *glist; @@ -4911,8 +4895,5 @@ int btrfs_record_squota_delta(struct btrfs_fs_info *f= s_info, qgroup_iterator_add(&qgroup_list, glist->group); } qgroup_iterator_clean(&qgroup_list); - -out: - spin_unlock(&fs_info->qgroup_lock); - return ret; + return 0; } diff --git a/fs/btrfs/raid56.c b/fs/btrfs/raid56.c index 6b9fda36d3c6..98959d35132e 100644 --- a/fs/btrfs/raid56.c +++ b/fs/btrfs/raid56.c @@ -614,15 +614,10 @@ static void run_xor(void **pages, int src_cnt, ssize_= t len) static int rbio_is_full(struct btrfs_raid_bio *rbio) { unsigned long size =3D rbio->bio_list_bytes; - int ret =3D 1; =20 - spin_lock(&rbio->bio_list_lock); - if (size !=3D rbio->nr_data * BTRFS_STRIPE_LEN) - ret =3D 0; + guard(spinlock)(&rbio->bio_list_lock); BUG_ON(size > rbio->nr_data * BTRFS_STRIPE_LEN); - spin_unlock(&rbio->bio_list_lock); - - return ret; + return size =3D=3D rbio->nr_data * BTRFS_STRIPE_LEN; } =20 /* @@ -969,16 +964,14 @@ static struct sector_ptr *sector_in_rbio(struct btrfs= _raid_bio *rbio, index =3D stripe_nr * rbio->stripe_nsectors + sector_nr; ASSERT(index >=3D 0 && index < rbio->nr_sectors); =20 - spin_lock(&rbio->bio_list_lock); + guard(spinlock)(&rbio->bio_list_lock); sector =3D &rbio->bio_sectors[index]; if (sector->has_paddr || bio_list_only) { /* Don't return sector without a valid page pointer */ if (!sector->has_paddr) sector =3D NULL; - spin_unlock(&rbio->bio_list_lock); return sector; } - spin_unlock(&rbio->bio_list_lock); =20 return &rbio->stripe_sectors[index]; } diff --git a/fs/btrfs/space-info.c b/fs/btrfs/space-info.c index 97452fb5d29b..01b68037296b 100644 --- a/fs/btrfs/space-info.c +++ b/fs/btrfs/space-info.c @@ -1050,10 +1050,9 @@ static bool steal_from_global_rsv(struct btrfs_fs_in= fo *fs_info, if (global_rsv->space_info !=3D space_info) return false; =20 - spin_lock(&global_rsv->lock); + guard(spinlock)(&global_rsv->lock); min_bytes =3D mult_perc(global_rsv->size, 10); if (global_rsv->reserved < min_bytes + ticket->bytes) { - spin_unlock(&global_rsv->lock); return false; } global_rsv->reserved -=3D ticket->bytes; @@ -1063,7 +1062,6 @@ static bool steal_from_global_rsv(struct btrfs_fs_inf= o *fs_info, space_info->tickets_id++; if (global_rsv->reserved < global_rsv->size) global_rsv->full =3D 0; - spin_unlock(&global_rsv->lock); =20 return true; } diff --git a/fs/btrfs/subpage.c b/fs/btrfs/subpage.c index 8c8563e87aea..89c8e2a4c590 100644 --- a/fs/btrfs/subpage.c +++ b/fs/btrfs/subpage.c @@ -226,14 +226,13 @@ static bool btrfs_subpage_end_and_test_lock(const str= uct btrfs_fs_info *fs_info, struct btrfs_folio_state *bfs =3D folio_get_private(folio); const int start_bit =3D subpage_calc_start_bit(fs_info, folio, locked, st= art, len); const int nbits =3D (len >> fs_info->sectorsize_bits); - unsigned long flags; unsigned int cleared =3D 0; int bit =3D start_bit; bool last; =20 btrfs_subpage_assert(fs_info, folio, start, len); =20 - spin_lock_irqsave(&bfs->lock, flags); + guard(spinlock_irqsave)(&bfs->lock); /* * We have call sites passing @lock_page into * extent_clear_unlock_delalloc() for compression path. @@ -242,7 +241,6 @@ static bool btrfs_subpage_end_and_test_lock(const struc= t btrfs_fs_info *fs_info, * subpage::locked is 0. Handle them in a special way. */ if (atomic_read(&bfs->nr_locked) =3D=3D 0) { - spin_unlock_irqrestore(&bfs->lock, flags); return true; } =20 @@ -252,7 +250,6 @@ static bool btrfs_subpage_end_and_test_lock(const struc= t btrfs_fs_info *fs_info, } ASSERT(atomic_read(&bfs->nr_locked) >=3D cleared); last =3D atomic_sub_and_test(cleared, &bfs->nr_locked); - spin_unlock_irqrestore(&bfs->lock, flags); return last; } =20 diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index 30f3c3b849c1..e7a9e9582246 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3695,8 +3695,6 @@ int btrfs_free_log_root_tree(struct btrfs_trans_handl= e *trans, static bool mark_inode_as_not_logged(const struct btrfs_trans_handle *tran= s, struct btrfs_inode *inode) { - bool ret =3D false; - /* * Do this only if ->logged_trans is still 0 to prevent races with * concurrent logging as we may see the inode not logged when @@ -3707,14 +3705,15 @@ static bool mark_inode_as_not_logged(const struct b= trfs_trans_handle *trans, * and link operations may end up not logging new names and removing old * names from the log. */ - spin_lock(&inode->lock); - if (inode->logged_trans =3D=3D 0) + guard(spinlock)(&inode->lock); + if (inode->logged_trans =3D=3D 0) { inode->logged_trans =3D trans->transid - 1; - else if (inode->logged_trans =3D=3D trans->transid) - ret =3D true; - spin_unlock(&inode->lock); + return false; + } else if (inode->logged_trans =3D=3D trans->transid) { + return true; + } =20 - return ret; + return false; } =20 /* diff --git a/fs/btrfs/zoned.c b/fs/btrfs/zoned.c index d1db7fa1fe58..3e1d9e8eab78 100644 --- a/fs/btrfs/zoned.c +++ b/fs/btrfs/zoned.c @@ -2690,9 +2690,9 @@ void btrfs_zoned_release_data_reloc_bg(struct btrfs_f= s_info *fs_info, u64 logica /* It should be called on a previous data relocation block group. */ ASSERT(block_group && (block_group->flags & BTRFS_BLOCK_GROUP_DATA)); =20 - spin_lock(&block_group->lock); + guard(spinlock)(&block_group->lock); if (!test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_fl= ags)) - goto out; + return; =20 /* All relocation extents are written. */ if (block_group->start + block_group->alloc_offset =3D=3D logical + lengt= h) { @@ -2704,8 +2704,6 @@ void btrfs_zoned_release_data_reloc_bg(struct btrfs_f= s_info *fs_info, u64 logica &block_group->runtime_flags); } =20 -out: - spin_unlock(&block_group->lock); btrfs_put_block_group(block_group); } =20 @@ -2720,14 +2718,12 @@ int btrfs_zone_finish_one_bg(struct btrfs_fs_info *= fs_info) list_for_each_entry(block_group, &fs_info->zone_active_bgs, active_bg_list) { u64 avail; + guard(spinlock)(&block_group->lock); =20 - spin_lock(&block_group->lock); if (block_group->reserved || block_group->alloc_offset =3D=3D 0 || !(block_group->flags & BTRFS_BLOCK_GROUP_DATA) || - test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_fl= ags)) { - spin_unlock(&block_group->lock); + test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_fl= ags)) continue; - } =20 avail =3D block_group->zone_capacity - block_group->alloc_offset; if (min_avail > avail) { @@ -2737,7 +2733,6 @@ int btrfs_zone_finish_one_bg(struct btrfs_fs_info *fs= _info) min_avail =3D avail; btrfs_get_block_group(min_bg); } - spin_unlock(&block_group->lock); } spin_unlock(&fs_info->zone_active_bgs_lock); =20 diff --git a/fs/btrfs/zstd.c b/fs/btrfs/zstd.c index c9cddcfa337b..ce59214a3778 100644 --- a/fs/btrfs/zstd.c +++ b/fs/btrfs/zstd.c @@ -114,12 +114,10 @@ static void zstd_reclaim_timer_fn(struct timer_list *= timer) unsigned long reclaim_threshold =3D jiffies - ZSTD_BTRFS_RECLAIM_JIFFIES; struct list_head *pos, *next; =20 - spin_lock(&zwsm->lock); + guard(spinlock)(&zwsm->lock); =20 - if (list_empty(&zwsm->lru_list)) { - spin_unlock(&zwsm->lock); + if (list_empty(&zwsm->lru_list)) return; - } =20 list_for_each_prev_safe(pos, next, &zwsm->lru_list) { struct workspace *victim =3D container_of(pos, struct workspace, @@ -145,8 +143,6 @@ static void zstd_reclaim_timer_fn(struct timer_list *ti= mer) =20 if (!list_empty(&zwsm->lru_list)) mod_timer(&zwsm->timer, jiffies + ZSTD_BTRFS_RECLAIM_JIFFIES); - - spin_unlock(&zwsm->lock); } =20 /* @@ -251,7 +247,8 @@ static struct list_head *zstd_find_workspace(struct btr= fs_fs_info *fs_info, int int i =3D clip_level(level); =20 ASSERT(zwsm); - spin_lock_bh(&zwsm->lock); + guard(spinlock_bh)(&zwsm->lock); + for_each_set_bit_from(i, &zwsm->active_map, ZSTD_BTRFS_MAX_LEVEL) { if (!list_empty(&zwsm->idle_ws[i])) { ws =3D zwsm->idle_ws[i].next; @@ -263,11 +260,9 @@ static struct list_head *zstd_find_workspace(struct bt= rfs_fs_info *fs_info, int list_del(&workspace->lru_list); if (list_empty(&zwsm->idle_ws[i])) clear_bit(i, &zwsm->active_map); - spin_unlock_bh(&zwsm->lock); return ws; } } - spin_unlock_bh(&zwsm->lock); =20 return NULL; } --=20 2.51.1.dirty From nobody Sat Feb 7 23:24:09 2026 Received: from sender6.mail.selcloud.ru (sender6.mail.selcloud.ru [5.8.75.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4135135CBB4; Wed, 12 Nov 2025 19:08:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=5.8.75.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974523; cv=none; b=NOAvAm9loGBTbzy9LlKu0gMdUzZ9ZWI8PDhq2KlEFKVDjZUdMg1FeyxPb2YIT1VV1Q7AFH2hBCJg99pQ01hkPB5Xyz/Th3bxyB3+Ty6XXET1gHfSQihNymtbkotBQ7QftW9cNee7mos2JLltyQoGt8h0/HR06tT7DpkryEP94jM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974523; c=relaxed/simple; bh=QCB8WwHikwN2bJrZbqk/9i+LkdWvHBlkrd+J7dbaMr4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=sKoV6/8mkuEyFSya1Wn8ePBdNUZNFAndpMX4iURtOdZ7znYBUjfRvvNNrI0JSUgZUr7Vy1IPxEpqs2cZHE/j1iy+f6M7V6DA5SAIHXblTirNX0rZva5EHZA6nGNIdi+RSzF1659/zpGsc1DkNR78hyrn3dDHp48oSVOyUzl78+4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev; spf=pass smtp.mailfrom=mail.selcloud.ru; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b=TNpWOPDW; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=vg7W9a11; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=h1L5eids; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=wi5KxUWA; arc=none smtp.client-ip=5.8.75.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mail.selcloud.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b="TNpWOPDW"; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="vg7W9a11"; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="h1L5eids"; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="wi5KxUWA" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.selcloud.ru; s=selcloud; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:List-id: List-Unsubscribe:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Help:List-Subscribe:List-Post:List-Owner:List-Archive; bh=pSekVts3jD0eHpg+BeWNXTywBInmBdwKGn+yLSuE7Mg=; t=1762974520; x=1763147320; b=TNpWOPDWAeYJbgw7KvfB3bcOpgYEZay789IAhOcacusLAdh2FvBsjQj8qwN1ghK32FShD806fw BNVY8moROvkr1NLsXTeMWd784FpiZSmMF0G4wi/rqKDn1qF+jym4C6fZOQJKSBeLILaWeuZw9SuAS xeGADTSLp2MpsoYDwjBc=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=foxido.dev; s=selcloud; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:List-id:List-Unsubscribe:Sender:Reply-To: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Help:List-Subscribe: List-Post:List-Owner:List-Archive; bh=pSekVts3jD0eHpg+BeWNXTywBInmBdwKGn+yLSuE7Mg=; t=1762974520; x=1763147320; b=vg7W9a11BvUprMN63EEurkS2CbcsAzc9sKDnPgamNDaf6no/RinFFyLSkSl794sYFBKdHYY+W/ nzaMOxQp5BZzg9IJEweTAyqyT7YkHzTnYAkIEjo81a8uKExgF7tav8c40VA3LH4gR5kQ+M9YLWqhS EXo5yuPSEiN93pEfvNws=; Precedence: bulk X-Issuen: 1428244 X-User: 149890965 X-Postmaster-Msgtype: 3849 Feedback-ID: 1428244:15965:3849:samotpravil X-From: foxido.dev X-from-id: 15965 X-MSG-TYPE: bulk List-Unsubscribe-Post: List-Unsubscribe=One-Click X-blist-id: 3849 X-Gungo: 20251107.120132 X-SMTPUID: mlgnr60 DKIM-Signature: v=1; a=rsa-sha256; s=202508r; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=pSekVts3jD0eHpg+BeWNXTy wBInmBdwKGn+yLSuE7Mg=; b=h1L5eidsmVd5RjWd+qgJzUrL0MHIS86m4RI8tMp2YWPwuMS+YH xobP7WGPcFM3e9q15b3nwLGUUvSEVX4rj/6urAYMgMPihyi4lbIGhwnS46mORXqsF3yxnrwaHNn bhyA6s3uDS1s6CSfuB1ajFlpOdx3ySrhLtD0+cE4U/vSWa8VLeJVDYrwuYIB/6fKxTq+9F1t/yz ecvlqQjCRmmwLBnEWtURhlMeHZrXaAOhRZU3a5DaN1/79LJgq0XGqPppehUlbBqikV0XspYZ/8A J5D2fnFSefE26laVkOGuDALc/nrVJIeTlZx0UB5utAIbyh7jr+jo9+BRDQJAOL+n6Vw==; DKIM-Signature: v=1; a=ed25519-sha256; s=202508e; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=pSekVts3jD0eHpg+BeWNXTy wBInmBdwKGn+yLSuE7Mg=; b=wi5KxUWA9gXZMSPjwha2G7k6NJTg3Y6PnLbc6gCIhX9FYRDwjY bDOG9NwWKzCDvTQgt4K3mpFUbVUrEpmibKCA==; From: Gladyshev Ilya To: foxido@foxido.dev Cc: Chris Mason , David Sterba , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 6/8] btrfs: simplify cleanup via scoped_guard() Date: Wed, 12 Nov 2025 21:49:42 +0300 Message-ID: X-Mailer: git-send-email 2.51.1.dirty In-Reply-To: References: 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" Simplify cases with multiple unlock paths like spin_lock(&lock); if (something) { spin_unlock(&lock); goto faraway; // or return } spin_unlock(&lock); with scoped_guards() to improve readability and robustness. Signed-off-by: Gladyshev Ilya --- fs/btrfs/block-group.c | 20 +++++------- fs/btrfs/compression.c | 13 ++++---- fs/btrfs/extent-tree.c | 8 ++--- fs/btrfs/extent_io.c | 33 +++++++++---------- fs/btrfs/free-space-cache.c | 63 +++++++++++++++---------------------- fs/btrfs/qgroup.c | 38 +++++++++++----------- fs/btrfs/send.c | 37 ++++++++++------------ fs/btrfs/tree-log.c | 13 +++----- 8 files changed, 97 insertions(+), 128 deletions(-) diff --git a/fs/btrfs/block-group.c b/fs/btrfs/block-group.c index 0ef8917e7a71..73c283344ea4 100644 --- a/fs/btrfs/block-group.c +++ b/fs/btrfs/block-group.c @@ -93,13 +93,11 @@ static u64 btrfs_reduce_alloc_profile(struct btrfs_fs_i= nfo *fs_info, u64 flags) * See if restripe for this chunk_type is in progress, if so try to * reduce to the target profile */ - spin_lock(&fs_info->balance_lock); - target =3D get_restripe_target(fs_info, flags); - if (target) { - spin_unlock(&fs_info->balance_lock); - return extended_to_chunk(target); + scoped_guard(spinlock, &fs_info->balance_lock) { + target =3D get_restripe_target(fs_info, flags); + if (target) + return extended_to_chunk(target); } - spin_unlock(&fs_info->balance_lock); =20 /* First, mask out the RAID levels which aren't possible */ for (raid_type =3D 0; raid_type < BTRFS_NR_RAID_TYPES; raid_type++) { @@ -3402,13 +3400,11 @@ int btrfs_start_dirty_block_groups(struct btrfs_tra= ns_handle *trans) struct list_head *io =3D &cur_trans->io_bgs; int loops =3D 0; =20 - spin_lock(&cur_trans->dirty_bgs_lock); - if (list_empty(&cur_trans->dirty_bgs)) { - spin_unlock(&cur_trans->dirty_bgs_lock); - return 0; + scoped_guard(spinlock, &cur_trans->dirty_bgs_lock) { + if (list_empty(&cur_trans->dirty_bgs)) + return 0; + list_splice_init(&cur_trans->dirty_bgs, &dirty); } - list_splice_init(&cur_trans->dirty_bgs, &dirty); - spin_unlock(&cur_trans->dirty_bgs_lock); =20 again: /* Make sure all the block groups on our dirty list actually exist */ diff --git a/fs/btrfs/compression.c b/fs/btrfs/compression.c index bacad18357b3..39dbc0b2ead2 100644 --- a/fs/btrfs/compression.c +++ b/fs/btrfs/compression.c @@ -962,14 +962,13 @@ void btrfs_put_workspace(struct btrfs_fs_info *fs_inf= o, int type, struct list_he ws_wait =3D &gwsm->ws_wait; free_ws =3D &gwsm->free_ws; =20 - spin_lock(ws_lock); - if (*free_ws <=3D num_online_cpus()) { - list_add(ws, idle_ws); - (*free_ws)++; - spin_unlock(ws_lock); - goto wake; + scoped_guard(spinlock, ws_lock) { + if (*free_ws <=3D num_online_cpus()) { + list_add(ws, idle_ws); + (*free_ws)++; + goto wake; + } } - spin_unlock(ws_lock); =20 free_workspace(type, ws); atomic_dec(total_ws); diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index dc4ca98c3780..f9744e456c6c 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -2165,12 +2165,10 @@ int btrfs_run_delayed_refs(struct btrfs_trans_handl= e *trans, u64 min_bytes) if (min_bytes =3D=3D U64_MAX) { btrfs_create_pending_block_groups(trans); =20 - spin_lock(&delayed_refs->lock); - if (xa_empty(&delayed_refs->head_refs)) { - spin_unlock(&delayed_refs->lock); - return 0; + scoped_guard(spinlock, &delayed_refs->lock) { + if (xa_empty(&delayed_refs->head_refs)) + return 0; } - spin_unlock(&delayed_refs->lock); =20 cond_resched(); goto again; diff --git a/fs/btrfs/extent_io.c b/fs/btrfs/extent_io.c index 23273d0e6f22..9d7501da2dda 100644 --- a/fs/btrfs/extent_io.c +++ b/fs/btrfs/extent_io.c @@ -4503,27 +4503,24 @@ int try_release_extent_buffer(struct folio *folio) * We need to make sure nobody is changing folio private, as we rely on * folio private as the pointer to extent buffer. */ - spin_lock(&folio->mapping->i_private_lock); - if (!folio_test_private(folio)) { - spin_unlock(&folio->mapping->i_private_lock); - return 1; - } + scoped_guard(spinlock, &folio->mapping->i_private_lock) { + if (!folio_test_private(folio)) + return 1; =20 - eb =3D folio_get_private(folio); - BUG_ON(!eb); + eb =3D folio_get_private(folio); + BUG_ON(!eb); =20 - /* - * This is a little awful but should be ok, we need to make sure that - * the eb doesn't disappear out from under us while we're looking at - * this page. - */ - spin_lock(&eb->refs_lock); - if (refcount_read(&eb->refs) !=3D 1 || extent_buffer_under_io(eb)) { - spin_unlock(&eb->refs_lock); - spin_unlock(&folio->mapping->i_private_lock); - return 0; + /* + * This is a little awful but should be ok, we need to make sure that + * the eb doesn't disappear out from under us while we're looking at + * this page. + */ + spin_lock(&eb->refs_lock); + if (refcount_read(&eb->refs) !=3D 1 || extent_buffer_under_io(eb)) { + spin_unlock(&eb->refs_lock); + return 0; + } } - spin_unlock(&folio->mapping->i_private_lock); =20 /* * If tree ref isn't set then we know the ref on this eb is a real ref, diff --git a/fs/btrfs/free-space-cache.c b/fs/btrfs/free-space-cache.c index 7ad3f635576e..5e5560043eeb 100644 --- a/fs/btrfs/free-space-cache.c +++ b/fs/btrfs/free-space-cache.c @@ -958,12 +958,10 @@ int load_free_space_cache(struct btrfs_block_group *b= lock_group) * If this block group has been marked to be cleared for one reason or * another then we can't trust the on disk cache, so just return. */ - spin_lock(&block_group->lock); - if (block_group->disk_cache_state !=3D BTRFS_DC_WRITTEN) { - spin_unlock(&block_group->lock); - return 0; + scoped_guard(spinlock, &block_group->lock) { + if (block_group->disk_cache_state !=3D BTRFS_DC_WRITTEN) + return 0; } - spin_unlock(&block_group->lock); =20 path =3D btrfs_alloc_path(); if (!path) @@ -1525,12 +1523,10 @@ int btrfs_write_out_cache(struct btrfs_trans_handle= *trans, struct inode *inode; int ret =3D 0; =20 - spin_lock(&block_group->lock); - if (block_group->disk_cache_state < BTRFS_DC_SETUP) { - spin_unlock(&block_group->lock); - return 0; + scoped_guard(spinlock, &block_group->lock) { + if (block_group->disk_cache_state < BTRFS_DC_SETUP) + return 0; } - spin_unlock(&block_group->lock); =20 inode =3D lookup_free_space_inode(block_group, path); if (IS_ERR(inode)) @@ -3154,20 +3150,17 @@ void btrfs_return_cluster_to_free_space( struct btrfs_free_space_ctl *ctl; =20 /* first, get a safe pointer to the block group */ - spin_lock(&cluster->lock); - if (!block_group) { - block_group =3D cluster->block_group; + scoped_guard(spinlock, &cluster->lock) { if (!block_group) { - spin_unlock(&cluster->lock); + block_group =3D cluster->block_group; + if (!block_group) + return; + } else if (cluster->block_group !=3D block_group) { + /* someone else has already freed it don't redo their work */ return; } - } else if (cluster->block_group !=3D block_group) { - /* someone else has already freed it don't redo their work */ - spin_unlock(&cluster->lock); - return; + btrfs_get_block_group(block_group); } - btrfs_get_block_group(block_group); - spin_unlock(&cluster->lock); =20 ctl =3D block_group->free_space_ctl; =20 @@ -4018,13 +4011,11 @@ int btrfs_trim_block_group(struct btrfs_block_group= *block_group, =20 *trimmed =3D 0; =20 - spin_lock(&block_group->lock); - if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) { - spin_unlock(&block_group->lock); - return 0; + scoped_guard(spinlock, &block_group->lock) { + if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) + return 0; + btrfs_freeze_block_group(block_group); } - btrfs_freeze_block_group(block_group); - spin_unlock(&block_group->lock); =20 ret =3D trim_no_bitmap(block_group, trimmed, start, end, minlen, false); if (ret) @@ -4048,13 +4039,11 @@ int btrfs_trim_block_group_extents(struct btrfs_blo= ck_group *block_group, =20 *trimmed =3D 0; =20 - spin_lock(&block_group->lock); - if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) { - spin_unlock(&block_group->lock); - return 0; + scoped_guard(spinlock, &block_group->lock) { + if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) + return 0; + btrfs_freeze_block_group(block_group); } - btrfs_freeze_block_group(block_group); - spin_unlock(&block_group->lock); =20 ret =3D trim_no_bitmap(block_group, trimmed, start, end, minlen, async); btrfs_unfreeze_block_group(block_group); @@ -4070,13 +4059,11 @@ int btrfs_trim_block_group_bitmaps(struct btrfs_blo= ck_group *block_group, =20 *trimmed =3D 0; =20 - spin_lock(&block_group->lock); - if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) { - spin_unlock(&block_group->lock); - return 0; + scoped_guard(spinlock, &block_group->lock) { + if (test_bit(BLOCK_GROUP_FLAG_REMOVED, &block_group->runtime_flags)) + return 0; + btrfs_freeze_block_group(block_group); } - btrfs_freeze_block_group(block_group); - spin_unlock(&block_group->lock); =20 ret =3D trim_bitmaps(block_group, trimmed, start, end, minlen, maxlen, async); diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index b76fc5474ae9..9b2f2c8ca505 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -4791,29 +4791,27 @@ int btrfs_qgroup_trace_subtree_after_cow(struct btr= fs_trans_handle *trans, if (!btrfs_is_fstree(btrfs_root_id(root)) || !root->reloc_root) return 0; =20 - spin_lock(&blocks->lock); - if (!blocks->swapped) { - spin_unlock(&blocks->lock); - return 0; - } - node =3D rb_find(&subvol_eb->start, &blocks->blocks[level], - qgroup_swapped_block_bytenr_key_cmp); - if (!node) { - spin_unlock(&blocks->lock); - goto out; - } - block =3D rb_entry(node, struct btrfs_qgroup_swapped_block, node); + scoped_guard(spinlock, &blocks->lock) { + if (!blocks->swapped) + return 0; =20 - /* Found one, remove it from @blocks first and update blocks->swapped */ - rb_erase(&block->node, &blocks->blocks[level]); - for (i =3D 0; i < BTRFS_MAX_LEVEL; i++) { - if (RB_EMPTY_ROOT(&blocks->blocks[i])) { - swapped =3D true; - break; + node =3D rb_find(&subvol_eb->start, &blocks->blocks[level], + qgroup_swapped_block_bytenr_key_cmp); + if (!node) + goto out; + + block =3D rb_entry(node, struct btrfs_qgroup_swapped_block, node); + + /* Found one, remove it from @blocks first and update blocks->swapped */ + rb_erase(&block->node, &blocks->blocks[level]); + for (i =3D 0; i < BTRFS_MAX_LEVEL; i++) { + if (RB_EMPTY_ROOT(&blocks->blocks[i])) { + swapped =3D true; + break; + } } + blocks->swapped =3D swapped; } - blocks->swapped =3D swapped; - spin_unlock(&blocks->lock); =20 check.level =3D block->level; check.transid =3D block->reloc_generation; diff --git a/fs/btrfs/send.c b/fs/btrfs/send.c index e7e33c9feca0..5af63c71a01a 100644 --- a/fs/btrfs/send.c +++ b/fs/btrfs/send.c @@ -8020,27 +8020,24 @@ long btrfs_ioctl_send(struct btrfs_root *send_root,= const struct btrfs_ioctl_sen * The subvolume must remain read-only during send, protect against * making it RW. This also protects against deletion. */ - spin_lock(&send_root->root_item_lock); - /* - * Unlikely but possible, if the subvolume is marked for deletion but - * is slow to remove the directory entry, send can still be started. - */ - if (btrfs_root_dead(send_root)) { - spin_unlock(&send_root->root_item_lock); - return -EPERM; - } - /* Userspace tools do the checks and warn the user if it's not RO. */ - if (!btrfs_root_readonly(send_root)) { - spin_unlock(&send_root->root_item_lock); - return -EPERM; - } - if (send_root->dedupe_in_progress) { - dedupe_in_progress_warn(send_root); - spin_unlock(&send_root->root_item_lock); - return -EAGAIN; + scoped_guard(spinlock, &send_root->root_item_lock) { + /* + * Unlikely but possible, if the subvolume is marked for deletion but + * is slow to remove the directory entry, send can still be started. + */ + if (btrfs_root_dead(send_root)) + return -EPERM; + + /* Userspace tools do the checks and warn the user if it's not RO. */ + if (!btrfs_root_readonly(send_root)) + return -EPERM; + + if (send_root->dedupe_in_progress) { + dedupe_in_progress_warn(send_root); + return -EAGAIN; + } + send_root->send_in_progress++; } - send_root->send_in_progress++; - spin_unlock(&send_root->root_item_lock); =20 /* * Check that we don't overflow at later allocations, we request diff --git a/fs/btrfs/tree-log.c b/fs/btrfs/tree-log.c index e7a9e9582246..f6ce72f0fbcb 100644 --- a/fs/btrfs/tree-log.c +++ b/fs/btrfs/tree-log.c @@ -3750,15 +3750,12 @@ static int inode_logged(const struct btrfs_trans_ha= ndle *trans, * see a positive value that is not trans->transid and assume the inode * was not logged when it was. */ - spin_lock(&inode->lock); - if (inode->logged_trans =3D=3D trans->transid) { - spin_unlock(&inode->lock); - return 1; - } else if (inode->logged_trans > 0) { - spin_unlock(&inode->lock); - return 0; + scoped_guard(spinlock, &inode->lock) { + if (inode->logged_trans =3D=3D trans->transid) + return 1; + else if (inode->logged_trans > 0) + return 0; } - spin_unlock(&inode->lock); =20 /* * If no log tree was created for this root in this transaction, then --=20 2.51.1.dirty From nobody Sat Feb 7 23:24:09 2026 Received: from sender7.mail.selcloud.ru (sender7.mail.selcloud.ru [5.8.75.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0DC4D34CFAC; Wed, 12 Nov 2025 19:07:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=5.8.75.170 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974480; cv=none; b=Fx9BWfgo+U6sqa1djJpiSNq9QjvDtgtbyzOME5yYYG32+m9/ahNJUIvl9A/AiFhSzH1jp71HNmzyRlZQtrtuttwE9Q03moTdeS/gpMzAI7mwzFgwOo7KBEO6ebdJyIqlhEPt3GT5z0QVK4vbW3DAfkyKzaZSbrLjTe2Pmzz7SdE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974480; c=relaxed/simple; bh=ma5dc96pRCrKaOzJCcMdK00g4KFJGc5hIGii0nGxXM8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QVBYDnQXCNGR5LDQrxUaaeM2QTiIu3rSg64ROKV0KWJq+cwKc0S+2cQ0S3bw1uRIffcsubQovWryMFdJeRuAMspfzSZjuHyr0cpKzVQ7FP0TWiwb+sEl/SySSE7fLyUrpOuTl7M5u0RZ9+ZFMVYeSkW9tbrZ/E0An40jJWJk7Fc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev; spf=pass smtp.mailfrom=mail.selcloud.ru; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b=FE1m9y8L; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=ryGf81ZQ; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=r8y7iish; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=poZyJc1L; arc=none smtp.client-ip=5.8.75.170 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mail.selcloud.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b="FE1m9y8L"; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="ryGf81ZQ"; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="r8y7iish"; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="poZyJc1L" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.selcloud.ru; s=selcloud; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:List-id: List-Unsubscribe:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Help:List-Subscribe:List-Post:List-Owner:List-Archive; bh=/2dMeMUqKQTF4zNO3r0R2955Uy+cnwBTGpQwHwijTgE=; t=1762974476; x=1763147276; b=FE1m9y8LZuK7BAsFNxExA45UQYryvbvwsUTYNKusjTtqQa0gB6mDbBjcTKsQ35ur/d3Hs2e91p cQJzSPr5SeRwFog+evLvaICTbcyVV3xO39yxf1TAJ9qCi41cGYezRSjhOYgsqBL5vED6pPjIkAd54 uYZcFeT7SdsXhNxoHRNk=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=foxido.dev; s=selcloud; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:List-id:List-Unsubscribe:Sender:Reply-To: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Help:List-Subscribe: List-Post:List-Owner:List-Archive; bh=/2dMeMUqKQTF4zNO3r0R2955Uy+cnwBTGpQwHwijTgE=; t=1762974476; x=1763147276; b=ryGf81ZQV64AHDsrgrkEw/s2/EENUOa0RmYoVAYBou9/qp62f3GK6kgMK5uFd8LCzSi9u+UBSE 4YvWDaMyOyTBos+2Wtv48U/lwYZYCsY/tBQ7LPbOqG4PJOsee1b1ZmNaDIgvCrRHRfpKLRZaB19UK EJ3HIomyRsMhiwILuwZY=; Precedence: bulk X-Issuen: 1428244 X-User: 149890965 X-Postmaster-Msgtype: 3849 Feedback-ID: 1428244:15965:3849:samotpravil X-From: foxido.dev X-from-id: 15965 X-MSG-TYPE: bulk List-Unsubscribe-Post: List-Unsubscribe=One-Click X-blist-id: 3849 X-Gungo: 20251107.120132 X-SMTPUID: mlgnr61 DKIM-Signature: v=1; a=rsa-sha256; s=202508r; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=/2dMeMUqKQTF4zNO3r0R295 5Uy+cnwBTGpQwHwijTgE=; b=r8y7iishl/IFHSxeSyU06ARrVfAfKD4/kkgU4I1VKAVsbUzjbC Zv8/wZYYfdhXaS4UeIDiG+G3em/fSwZ4SC/Sx+1bjJlifrMtGaQ1W2m9zXuVhO3EVXHGcSPNs93 19g5GV+LrajTNofoTmnoBcAAPNSrCz6Xp0uKOHipYVJacQ4Xo9ko8o9OiYXnu5nLOlbj7sboOP3 E5fInnQR0sEtsJFV/YpbtGznBhwY88DutcZQhDKPKn477sg5PxOsjlx4U6uypQrnb13L83IDGL9 yX4BxZgUQYShm/8QsBBdWkW3SUNsdcFVcd02zS8DuNCl3C6HTGwliLXVOgTDMDxt6HQ==; DKIM-Signature: v=1; a=ed25519-sha256; s=202508e; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=/2dMeMUqKQTF4zNO3r0R295 5Uy+cnwBTGpQwHwijTgE=; b=poZyJc1LoBzFqqsf5sAa1QSir6M3cwihT8w8i9G9dryIYwDFXq bHEdGrtGGgcZXj8NfTfQLHPJlveurtSvbHBQ==; From: Gladyshev Ilya To: foxido@foxido.dev Cc: Chris Mason , David Sterba , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 7/8] btrfs: simplify return path via cleanup.h Date: Wed, 12 Nov 2025 21:49:43 +0300 Message-ID: <5bfb05436ed8f80bc060a745805d54309cdba59c.1762972845.git.foxido@foxido.dev> X-Mailer: git-send-email 2.51.1.dirty In-Reply-To: References: 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" In some functions removing cleanup paths allows to overall simplify it's code, so replace cleanup paths with guard()s. Signed-off-by: Gladyshev Ilya --- fs/btrfs/extent-io-tree.c | 21 ++++----- fs/btrfs/extent-tree.c | 96 ++++++++++++++++----------------------- fs/btrfs/ordered-data.c | 46 ++++++++----------- 3 files changed, 68 insertions(+), 95 deletions(-) diff --git a/fs/btrfs/extent-io-tree.c b/fs/btrfs/extent-io-tree.c index 69ea2bd359a6..88d7aed7055f 100644 --- a/fs/btrfs/extent-io-tree.c +++ b/fs/btrfs/extent-io-tree.c @@ -890,9 +890,8 @@ bool btrfs_find_first_extent_bit(struct extent_io_tree = *tree, u64 start, struct extent_state **cached_state) { struct extent_state *state; - bool ret =3D false; =20 - spin_lock(&tree->lock); + guard(spinlock)(&tree->lock); if (cached_state && *cached_state) { state =3D *cached_state; if (state->end =3D=3D start - 1 && extent_state_in_tree(state)) { @@ -911,23 +910,21 @@ bool btrfs_find_first_extent_bit(struct extent_io_tre= e *tree, u64 start, *cached_state =3D NULL; if (state) goto got_it; - goto out; + return false; } btrfs_free_extent_state(*cached_state); *cached_state =3D NULL; } =20 state =3D find_first_extent_bit_state(tree, start, bits); + if (!state) + return false; + got_it: - if (state) { - cache_state_if_flags(state, cached_state, 0); - *start_ret =3D state->start; - *end_ret =3D state->end; - ret =3D true; - } -out: - spin_unlock(&tree->lock); - return ret; + cache_state_if_flags(state, cached_state, 0); + *start_ret =3D state->start; + *end_ret =3D state->end; + return true; } =20 /* diff --git a/fs/btrfs/extent-tree.c b/fs/btrfs/extent-tree.c index f9744e456c6c..cb3d61d96e66 100644 --- a/fs/btrfs/extent-tree.c +++ b/fs/btrfs/extent-tree.c @@ -1878,16 +1878,14 @@ static int cleanup_ref_head(struct btrfs_trans_hand= le *trans, * and then re-check to make sure nobody got added. */ spin_unlock(&head->lock); - spin_lock(&delayed_refs->lock); - spin_lock(&head->lock); - if (!RB_EMPTY_ROOT(&head->ref_tree.rb_root) || head->extent_op) { - spin_unlock(&head->lock); - spin_unlock(&delayed_refs->lock); - return 1; + { + guard(spinlock)(&delayed_refs->lock); + guard(spinlock)(&head->lock); + + if (!RB_EMPTY_ROOT(&head->ref_tree.rb_root) || head->extent_op) + return 1; + btrfs_delete_ref_head(fs_info, delayed_refs, head); } - btrfs_delete_ref_head(fs_info, delayed_refs, head); - spin_unlock(&head->lock); - spin_unlock(&delayed_refs->lock); =20 if (head->must_insert_reserved) { btrfs_pin_extent(trans, head->bytenr, head->num_bytes, 1); @@ -3391,30 +3389,29 @@ static noinline int check_ref_cleanup(struct btrfs_= trans_handle *trans, int ret =3D 0; =20 delayed_refs =3D &trans->transaction->delayed_refs; - spin_lock(&delayed_refs->lock); - head =3D btrfs_find_delayed_ref_head(fs_info, delayed_refs, bytenr); - if (!head) - goto out_delayed_unlock; - - spin_lock(&head->lock); - if (!RB_EMPTY_ROOT(&head->ref_tree.rb_root)) - goto out; + { + guard(spinlock)(&delayed_refs->lock); + head =3D btrfs_find_delayed_ref_head(fs_info, delayed_refs, bytenr); + if (!head) + return 0; =20 - if (cleanup_extent_op(head) !=3D NULL) - goto out; + guard(spinlock)(&head->lock); + if (!RB_EMPTY_ROOT(&head->ref_tree.rb_root)) + return 0; =20 - /* - * waiting for the lock here would deadlock. If someone else has it - * locked they are already in the process of dropping it anyway - */ - if (!mutex_trylock(&head->mutex)) - goto out; + if (cleanup_extent_op(head) !=3D NULL) + return 0; =20 - btrfs_delete_ref_head(fs_info, delayed_refs, head); - head->processing =3D false; + /* + * waiting for the lock here would deadlock. If someone else has it + * locked they are already in the process of dropping it anyway + */ + if (!mutex_trylock(&head->mutex)) + return 0; =20 - spin_unlock(&head->lock); - spin_unlock(&delayed_refs->lock); + btrfs_delete_ref_head(fs_info, delayed_refs, head); + head->processing =3D false; + } =20 BUG_ON(head->extent_op); if (head->must_insert_reserved) @@ -3424,12 +3421,6 @@ static noinline int check_ref_cleanup(struct btrfs_t= rans_handle *trans, mutex_unlock(&head->mutex); btrfs_put_delayed_ref_head(head); return ret; -out: - spin_unlock(&head->lock); - -out_delayed_unlock: - spin_unlock(&delayed_refs->lock); - return 0; } =20 int btrfs_free_tree_block(struct btrfs_trans_handle *trans, @@ -3910,13 +3901,13 @@ static int do_allocation_zoned(struct btrfs_block_g= roup *block_group, */ } =20 - spin_lock(&space_info->lock); - spin_lock(&block_group->lock); - spin_lock(&fs_info->treelog_bg_lock); - spin_lock(&fs_info->relocation_bg_lock); + guard(spinlock)(&space_info->lock); + guard(spinlock)(&block_group->lock); + guard(spinlock)(&fs_info->treelog_bg_lock); + guard(spinlock)(&fs_info->relocation_bg_lock); =20 if (ret) - goto out; + goto err; =20 ASSERT(!ffe_ctl->for_treelog || block_group->start =3D=3D fs_info->treelog_bg || @@ -3928,8 +3919,7 @@ static int do_allocation_zoned(struct btrfs_block_gro= up *block_group, if (block_group->ro || (!ffe_ctl->for_data_reloc && test_bit(BLOCK_GROUP_FLAG_ZONED_DATA_RELOC, &block_group->runtime_fl= ags))) { - ret =3D 1; - goto out; + goto err; } =20 /* @@ -3938,8 +3928,7 @@ static int do_allocation_zoned(struct btrfs_block_gro= up *block_group, */ if (ffe_ctl->for_treelog && !fs_info->treelog_bg && (block_group->used || block_group->reserved)) { - ret =3D 1; - goto out; + goto err; } =20 /* @@ -3948,8 +3937,7 @@ static int do_allocation_zoned(struct btrfs_block_gro= up *block_group, */ if (ffe_ctl->for_data_reloc && !fs_info->data_reloc_bg && (block_group->used || block_group->reserved)) { - ret =3D 1; - goto out; + goto err; } =20 WARN_ON_ONCE(block_group->alloc_offset > block_group->zone_capacity); @@ -3963,8 +3951,7 @@ static int do_allocation_zoned(struct btrfs_block_gro= up *block_group, ffe_ctl->max_extent_size =3D avail; ffe_ctl->total_free_space =3D avail; } - ret =3D 1; - goto out; + goto err; } =20 if (ffe_ctl->for_treelog && !fs_info->treelog_bg) @@ -4003,17 +3990,14 @@ static int do_allocation_zoned(struct btrfs_block_g= roup *block_group, */ =20 ffe_ctl->search_start =3D ffe_ctl->found_offset; + return 0; =20 -out: - if (ret && ffe_ctl->for_treelog) +err: + if (ffe_ctl->for_treelog) fs_info->treelog_bg =3D 0; - if (ret && ffe_ctl->for_data_reloc) + if (ffe_ctl->for_data_reloc) fs_info->data_reloc_bg =3D 0; - spin_unlock(&fs_info->relocation_bg_lock); - spin_unlock(&fs_info->treelog_bg_lock); - spin_unlock(&block_group->lock); - spin_unlock(&space_info->lock); - return ret; + return 1; } =20 static int do_allocation(struct btrfs_block_group *block_group, diff --git a/fs/btrfs/ordered-data.c b/fs/btrfs/ordered-data.c index 451b60de4550..4dbec4ef4ffd 100644 --- a/fs/btrfs/ordered-data.c +++ b/fs/btrfs/ordered-data.c @@ -995,35 +995,29 @@ struct btrfs_ordered_extent *btrfs_lookup_ordered_ran= ge( struct rb_node *node; struct btrfs_ordered_extent *entry =3D NULL; =20 - spin_lock_irq(&inode->ordered_tree_lock); + guard(spinlock_irq)(&inode->ordered_tree_lock); node =3D ordered_tree_search(inode, file_offset); if (!node) { node =3D ordered_tree_search(inode, file_offset + len); if (!node) - goto out; + return NULL; } =20 while (1) { entry =3D rb_entry(node, struct btrfs_ordered_extent, rb_node); - if (btrfs_range_overlaps(entry, file_offset, len)) - break; + if (btrfs_range_overlaps(entry, file_offset, len)) { + refcount_inc(&entry->refs); + trace_btrfs_ordered_extent_lookup_range(inode, entry); + return entry; + } =20 if (entry->file_offset >=3D file_offset + len) { - entry =3D NULL; - break; + return NULL; } - entry =3D NULL; node =3D rb_next(node); if (!node) - break; + return NULL; } -out: - if (entry) { - refcount_inc(&entry->refs); - trace_btrfs_ordered_extent_lookup_range(inode, entry); - } - spin_unlock_irq(&inode->ordered_tree_lock); - return entry; } =20 /* @@ -1092,7 +1086,7 @@ struct btrfs_ordered_extent *btrfs_lookup_first_order= ed_range( struct rb_node *next; struct btrfs_ordered_extent *entry =3D NULL; =20 - spin_lock_irq(&inode->ordered_tree_lock); + guard(spinlock_irq)(&inode->ordered_tree_lock); node =3D inode->ordered_tree.rb_node; /* * Here we don't want to use tree_search() which will use tree->last @@ -1112,12 +1106,12 @@ struct btrfs_ordered_extent *btrfs_lookup_first_ord= ered_range( * Direct hit, got an ordered extent that starts at * @file_offset */ - goto out; + goto ret_entry; } } if (!entry) { /* Empty tree */ - goto out; + return NULL; } =20 cur =3D &entry->rb_node; @@ -1132,22 +1126,20 @@ struct btrfs_ordered_extent *btrfs_lookup_first_ord= ered_range( if (prev) { entry =3D rb_entry(prev, struct btrfs_ordered_extent, rb_node); if (btrfs_range_overlaps(entry, file_offset, len)) - goto out; + goto ret_entry; } if (next) { entry =3D rb_entry(next, struct btrfs_ordered_extent, rb_node); if (btrfs_range_overlaps(entry, file_offset, len)) - goto out; + goto ret_entry; } /* No ordered extent in the range */ - entry =3D NULL; -out: - if (entry) { - refcount_inc(&entry->refs); - trace_btrfs_ordered_extent_lookup_first_range(inode, entry); - } + return NULL; + +ret_entry: + refcount_inc(&entry->refs); + trace_btrfs_ordered_extent_lookup_first_range(inode, entry); =20 - spin_unlock_irq(&inode->ordered_tree_lock); return entry; } =20 --=20 2.51.1.dirty From nobody Sat Feb 7 23:24:09 2026 Received: from sender6.mail.selcloud.ru (sender6.mail.selcloud.ru [5.8.75.169]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4ACBF34DB68; Wed, 12 Nov 2025 19:08:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=5.8.75.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974527; cv=none; b=QLXV676/6dDTayfTbIPdzoojbbQqRS4MCLbkSN4I5vgMQw06zptgy0PI74WarIKmQWzoVfYitb3QBeEmE9C1ZRcoW+vWNXi/yqPgt834ub3GVjt90X4N4UPZe4G0fzZXHxjcluzP0MtFofO9YWR+7Gm521NSeTiqiFAW4gF1sHI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1762974527; c=relaxed/simple; bh=jBGfuob7zOPXWGRZTOoC3Q/HdN2ubZFd5hDIK7o931Q=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NpWD8LcqcYY8V2Rt3uTogosN2nUj37QDUksr0MI60kesBJPzKDvMENkmDgKoUJdY2ZiH+GQ5w5zNce+ZSe7rNssvEAXx42hkp3IO5kpYQpqXu0XkqhVy1SVfzFGtWrqT1ZfgBIUeO7i+O+lD3n6CucUU9piTOYHZoneNl+I7XT0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev; spf=pass smtp.mailfrom=mail.selcloud.ru; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b=KMw8kXPo; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=XnM5RjMU; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=AYR+cCAa; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b=AbEkgjaS; arc=none smtp.client-ip=5.8.75.169 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=foxido.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=mail.selcloud.ru Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=mail.selcloud.ru header.i=@mail.selcloud.ru header.b="KMw8kXPo"; dkim=pass (1024-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="XnM5RjMU"; dkim=pass (2048-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="AYR+cCAa"; dkim=permerror (0-bit key) header.d=foxido.dev header.i=@foxido.dev header.b="AbEkgjaS" DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mail.selcloud.ru; s=selcloud; h=Content-Transfer-Encoding:MIME-Version: References:In-Reply-To:Message-ID:Date:Subject:Cc:To:From:List-id: List-Unsubscribe:Sender:Reply-To:Content-Type:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Help:List-Subscribe:List-Post:List-Owner:List-Archive; bh=FE2/yEfUZslK/B3nL6QvDOFYUETlNN+H40NdrpdBDW0=; t=1762974525; x=1763147325; b=KMw8kXPo98DqY0tyXSCSeILMK81JFjid91axPZlA1mJDZe6iE3K/706SVHMD18ZmdPOABZ12tK N5eREiDIFDncjhnc6+SdBH03KxP9zaVJ7yX3ROMHcRgGFqi7NM8eJ1wJZaY9NUfLz/wruGGsngBJp PB8Uz+ws7SDiibFYsxHE=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=foxido.dev; s=selcloud; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:List-id:List-Unsubscribe:Sender:Reply-To: Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Help:List-Subscribe: List-Post:List-Owner:List-Archive; bh=FE2/yEfUZslK/B3nL6QvDOFYUETlNN+H40NdrpdBDW0=; t=1762974525; x=1763147325; b=XnM5RjMUHRVqvdf0i+5udzg5ivBYz6GJNxjSJbtykp/n7xT/kP15P//AlYztAC9HgCGqjVPmoC bqPiipUfzwLa+tIYId5zixCcYK7d5Ujs17vU6NoEnjGKa1lRIUR5XaA70U6APDJKFXMRW/in+Yym8 qpxu6rjODI9WfZ0U6WJI=; Precedence: bulk X-Issuen: 1428244 X-User: 149890965 X-Postmaster-Msgtype: 3849 Feedback-ID: 1428244:15965:3849:samotpravil X-From: foxido.dev X-from-id: 15965 X-MSG-TYPE: bulk List-Unsubscribe-Post: List-Unsubscribe=One-Click X-blist-id: 3849 X-Gungo: 20251107.120132 X-SMTPUID: mlgnr60 DKIM-Signature: v=1; a=rsa-sha256; s=202508r; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=FE2/yEfUZslK/B3nL6QvDOF YUETlNN+H40NdrpdBDW0=; b=AYR+cCAamjnzXOOR0V9avs6U9l3H2kL9xg4isgFgBCy4UzN+VO jOncwSS0nVyz2hwt9zpMSPnsaleop72+dlmsofmWTG2M2E6OoMdOPRzOywlMvG6YeG7HJMbTSVi NG5jtO6jWF1WnWhlqtVP3eUnXcFl8xphNQ2TdMpYOEC+mreUOR3rnFE9nTMcVehr8yvJ48TJ1xZ /ZKJPJoHCeL+7ijsL+27gxXcU0pcWQ/zRgfsPs1uOV+7X3RpJ5f7oOZSP/uDJO02DHYxzpSEc9C SYPpEt4ePP9Zl9cM3mEUjCRV1zU5jrugjhkX/ZgR8cXMfQwl6x3b1sPQMfRV5FOKslA==; DKIM-Signature: v=1; a=ed25519-sha256; s=202508e; d=foxido.dev; c=relaxed/relaxed; h=Message-ID:Date:Subject:To:From; t=1762973419; bh=FE2/yEfUZslK/B3nL6QvDOF YUETlNN+H40NdrpdBDW0=; b=AbEkgjaSz91Gjo+gwQzG3fbcPSettj0x988gXYXP8ZM1MMEl4t QnKuNLeaADJ8CljJublXQysVWezmr83YYwAg==; From: Gladyshev Ilya To: foxido@foxido.dev Cc: Chris Mason , David Sterba , linux-btrfs@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [RFC PATCH 8/8] btrfs: simplify cleanup in btrfs_add_qgroup_relation Date: Wed, 12 Nov 2025 21:49:44 +0300 Message-ID: X-Mailer: git-send-email 2.51.1.dirty In-Reply-To: References: 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" Remove from cleanup path mutex_unlock via guard() and kfree via __free(kfree) macro. With those two cleanups gone, we can remove `out` label and replace all gotos with direct returns. Signed-off-by: Gladyshev Ilya --- fs/btrfs/qgroup.c | 42 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) diff --git a/fs/btrfs/qgroup.c b/fs/btrfs/qgroup.c index 9b2f2c8ca505..238c17c7d969 100644 --- a/fs/btrfs/qgroup.c +++ b/fs/btrfs/qgroup.c @@ -1528,65 +1528,55 @@ static int quick_update_accounting(struct btrfs_fs_= info *fs_info, * callers and transferred here (either used or freed on error). */ int btrfs_add_qgroup_relation(struct btrfs_trans_handle *trans, u64 src, u= 64 dst, - struct btrfs_qgroup_list *prealloc) + struct btrfs_qgroup_list *_prealloc) { struct btrfs_fs_info *fs_info =3D trans->fs_info; struct btrfs_qgroup *parent; struct btrfs_qgroup *member; struct btrfs_qgroup_list *list; + struct btrfs_qgroup_list *prealloc __free(kfree) =3D _prealloc; int ret =3D 0; =20 ASSERT(prealloc); =20 /* Check the level of src and dst first */ if (btrfs_qgroup_level(src) >=3D btrfs_qgroup_level(dst)) { - kfree(prealloc); return -EINVAL; } =20 - mutex_lock(&fs_info->qgroup_ioctl_lock); - if (!fs_info->quota_root) { - ret =3D -ENOTCONN; - goto out; - } + guard(mutex)(&fs_info->qgroup_ioctl_lock); + + if (!fs_info->quota_root) + return -ENOTCONN; + member =3D find_qgroup_rb(fs_info, src); parent =3D find_qgroup_rb(fs_info, dst); - if (!member || !parent) { - ret =3D -EINVAL; - goto out; - } + if (!member || !parent) + return -EINVAL; =20 /* check if such qgroup relation exist firstly */ list_for_each_entry(list, &member->groups, next_group) { - if (list->group =3D=3D parent) { - ret =3D -EEXIST; - goto out; - } + if (list->group =3D=3D parent) + return -EEXIST; } =20 ret =3D add_qgroup_relation_item(trans, src, dst); if (ret) - goto out; + return ret; =20 ret =3D add_qgroup_relation_item(trans, dst, src); if (ret) { del_qgroup_relation_item(trans, src, dst); - goto out; + return ret; } =20 - spin_lock(&fs_info->qgroup_lock); + guard(spinlock)(&fs_info->qgroup_lock); ret =3D __add_relation_rb(prealloc, member, parent); prealloc =3D NULL; if (ret < 0) { - spin_unlock(&fs_info->qgroup_lock); - goto out; + return ret; } - ret =3D quick_update_accounting(fs_info, src, dst, 1); - spin_unlock(&fs_info->qgroup_lock); -out: - kfree(prealloc); - mutex_unlock(&fs_info->qgroup_ioctl_lock); - return ret; + return quick_update_accounting(fs_info, src, dst, 1); } =20 static int __del_qgroup_relation(struct btrfs_trans_handle *trans, u64 src, --=20 2.51.1.dirty