From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 2483FD277D0 for ; Sat, 10 Jan 2026 03:56:58 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 876726B008C; Fri, 9 Jan 2026 22:56:57 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 833C56B0092; Fri, 9 Jan 2026 22:56:57 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 736FE6B0093; Fri, 9 Jan 2026 22:56:57 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 61D216B008C for ; Fri, 9 Jan 2026 22:56:57 -0500 (EST) Received: from smtpin17.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay02.hostedemail.com (Postfix) with ESMTP id 068EA136829 for ; Sat, 10 Jan 2026 03:56:57 +0000 (UTC) X-FDA: 84314693274.17.911700B Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.223.131]) by imf20.hostedemail.com (Postfix) with ESMTP id F25611C0005 for ; Sat, 10 Jan 2026 03:56:54 +0000 (UTC) Authentication-Results: imf20.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b=TqqD8T6o; dkim=pass header.d=suse.com header.s=susede1 header.b=XSK1hU4T; spf=pass (imf20.hostedemail.com: domain of wqu@suse.com designates 195.135.223.131 as permitted sender) smtp.mailfrom=wqu@suse.com; dmarc=pass (policy=quarantine) header.from=suse.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1768017415; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=m7K+iJAKu9W/3o+edB9PU4EpwvE8KBa9zxkB6dHkKgI=; b=H1vrkFiueZwRrFEfDkXaMnWnrwpVS5NB7tVrkaFCZ9L+wwHK0+Sqo/vQcFpVoXAcklgJr/ DwodqLYSvtKGAAPcOit+ELiMCVBZXUhM8RsJW4Bfv+SpiiHd3UGF9ERy2aV8ChQD4P6Hc3 C6/7DUS7myQhYsnjkGgRtsfS59KvAsg= ARC-Authentication-Results: i=1; imf20.hostedemail.com; dkim=pass header.d=suse.com header.s=susede1 header.b=TqqD8T6o; dkim=pass header.d=suse.com header.s=susede1 header.b=XSK1hU4T; spf=pass (imf20.hostedemail.com: domain of wqu@suse.com designates 195.135.223.131 as permitted sender) smtp.mailfrom=wqu@suse.com; dmarc=pass (policy=quarantine) header.from=suse.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1768017415; a=rsa-sha256; cv=none; b=SCAs6h0z7Kh+UV6VGG8KFlehHs5GQ9JH9iGtTk3g75T/9fBJwqesuqszoADvYY+HAAjLEw 3iRt4E1cyBT7Jmm2fRUcdikxwMbbTN8UeGJDU2lcuytQ1sp3NTTo1K0V3d12IYiUJzEYQk GqK48oRRfHmXZq36WjW8qQBhFJ+nu7w= Received: from imap1.dmz-prg2.suse.org (imap1.dmz-prg2.suse.org [IPv6:2a07:de40:b281:104:10:150:64:97]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id EFE275BCE4; Sat, 10 Jan 2026 03:56:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1768017405; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=m7K+iJAKu9W/3o+edB9PU4EpwvE8KBa9zxkB6dHkKgI=; b=TqqD8T6o7Za5/+imW0djYuqQbfsYI53t6+bXhehS0Z1skjYu1E++aeSCV4aEBId6neP38A PltV2TUPenOTix8JSxH0Pdi2CrM3w0UfY/Vrn3S6SKlUWQXcuSvkEde0V6LxCNP+vFsszt iTJT+U9crWCw+sr+DRXF5YKkh5gcfjI= DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=susede1; t=1768017404; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc: mime-version:mime-version: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=m7K+iJAKu9W/3o+edB9PU4EpwvE8KBa9zxkB6dHkKgI=; b=XSK1hU4TRsAxF0f1Jlf4rwmHnQfSkyLve7iys7p4AhY/XS6gHs46ob8L/3pJ/mZk3UFKgJ 50CBTdK32GxjZtj5VCwHQvbHOcTEOAYhcUozCftylasNZRppI0pxiTC+9EqQKbL7Gw4DXt h3UwXNJ2Wg0Q7pmYiEzu+saExqh7ZYQ= Received: from imap1.dmz-prg2.suse.org (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by imap1.dmz-prg2.suse.org (Postfix) with ESMTPS id 7A08F3EA63; Sat, 10 Jan 2026 03:56:43 +0000 (UTC) Received: from dovecot-director2.suse.de ([2a07:de40:b281:106:10:150:64:167]) by imap1.dmz-prg2.suse.org with ESMTPSA id kP8zD/vNYWlqLgAAD6G6ig (envelope-from ); Sat, 10 Jan 2026 03:56:43 +0000 From: Qu Wenruo To: linux-btrfs@vger.kernel.org, linux-mm@kvack.org, linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 2/3] btrfs: minor improvement on super block writeback Date: Sat, 10 Jan 2026 14:26:20 +1030 Message-ID: <9faf8ee5927455018e55bdca32c5299ba3b5e1ec.1768017091.git.wqu@suse.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Action: no action X-Rspamd-Queue-Id: F25611C0005 X-Stat-Signature: p7nh573z17wu6jwhhqonn86uon1xpiww X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1768017414-101850 X-HE-Meta: U2FsdGVkX180unMLeAkLAXWTHlIhegM48pNuGLWbBZ5pKN0QAzoQ4DtBzFCBShhHEX4w82GZs7WzqB1ibX+ZnVF2iKOq4VfKIMSITps26TkZ13PW91xCtNGvypy93wIdjoNbU36vxlImY0H96sDHHpd4eXU/Pe1yr+AIKLJ4UCayljb3vDNHhz8dsD+L8NENfq+Ke7b9S+2Lfn93YEexNTiDBhvzf8SleFVUKj88zxM2jHBQYJ5nVc2bF5GgJQRBPq0iiin7tXjKqKr4WlKYxNGSeO4H94q9OydA030Bm853Mp7MetvfLARqCdigsk4UQwkHPuxvNz2L3ioV2HP1ByhCNR4wYGIXShNrWlk7q15sQlSMGYjdyprltE/DffBROWSGqYSqK2gf8IPv9ZRa5iEUtgPwDUtzo+sm8gGdjJFMHVuDes9DH0ULV2rHQF9apRm7R72ZNM4svL4sQdSRsEHMuKdPenIe4G9OiOUrml5+hawf2RTXpFGNV+3evQbc+InqXCK+Hn6sb2xfSd3HS8OxRZhVS0P2Bri9E0f5bN2H7K33Vs8JdUS7BxEeTpYBwA6mp2JtKAnw7Z+t0AOVIvp04VFl8ka2aTluTUiiMo28UIeKR9dmfmUwkR8xRnPpFnOXEo5FOehRO6qj03k96eq4OEt0Y4RBygi+F+BRHPSy7wZvvL/V2Dy+cA2BIVvfRTy+gGKPJcAGA4Fd9eOchbJvCDESWjuH2tpCwnKXYU0lUJ/+omC7HPJiCTIcTjbxj0O3S6g7RiT5q52iRldK4ZdzcP7w4JKbGJgagjRiFhQcBcJ3Kolr4aXQWey4yeNpITZi15YU3PFvU56Yss/m71CrVlkPsEdYfCsUOXLuQCzY8W29ENkd7ZkBOm2Ya+0F8x9uW4JK65d4oK1qw9moHEgYuHbtp9UPh2+B2fOaUrsoqDfFLIEzAudpFv3Mr3nAuz9427/15buGQ+pRN+/ 14ctTyqv rTU5CtunILqxkvUKd8bBk7LqiMiujck0hX5nFDv07c+3joMFQ2oeqvKNg36spdPGHYCkxB491ADhywG18rq/cbxAc5FHc6/HCYmXHv3OWnPyTwhZZQzfdef0smHURe93s7DZeUROUBU4xtMYWFdG/Koy6aAVIzSRte8px/TV1277s33sSeLhlZvEZ8trwHln74lP52ALPlkX1sNJC4fkvRJlOQ/bFVepNwU9lglobiyp06ApTET1CebBbd9TJjPYzBonevwlciaRCdg8MRt8Jymcj1sylbSeEPkHx X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: This includes: - Move the write error handling out of the folio iteration This is not a big deal, since our super block is never going to be larger than a single page. - Add a comment on why we want to lock the folio for writeback And the fact that we use folio locked state to track if the write has finished. Signed-off-by: Qu Wenruo --- fs/btrfs/disk-io.c | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/fs/btrfs/disk-io.c b/fs/btrfs/disk-io.c index 0dd77b56dfdf..96b7b71e6911 100644 --- a/fs/btrfs/disk-io.c +++ b/fs/btrfs/disk-io.c @@ -3650,24 +3650,24 @@ static void btrfs_end_super_write(struct bio *bio) struct folio_iter fi; bio_for_each_folio_all(fi, bio) { - if (bio->bi_status) { - btrfs_warn_rl(device->fs_info, - "lost super block write due to IO error on %s (%d)", - btrfs_dev_name(device), - blk_status_to_errno(bio->bi_status)); - btrfs_dev_stat_inc_and_print(device, - BTRFS_DEV_STAT_WRITE_ERRS); - /* Ensure failure if the primary sb fails. */ - if (bio->bi_opf & REQ_FUA) - atomic_add(BTRFS_SUPER_PRIMARY_WRITE_ERROR, - &device->sb_write_errors); - else - atomic_inc(&device->sb_write_errors); - } folio_unlock(fi.folio); folio_put(fi.folio); } + if (bio->bi_status) { + btrfs_warn_rl(device->fs_info, + "lost super block write due to IO error on %s (%d)", + btrfs_dev_name(device), + blk_status_to_errno(bio->bi_status)); + btrfs_dev_stat_inc_and_print(device, + BTRFS_DEV_STAT_WRITE_ERRS); + /* Ensure failure if the primary sb fails. */ + if (bio->bi_opf & REQ_FUA) + atomic_add(BTRFS_SUPER_PRIMARY_WRITE_ERROR, + &device->sb_write_errors); + else + atomic_inc(&device->sb_write_errors); + } bio_put(bio); } @@ -3721,6 +3721,15 @@ static int write_dev_supers(struct btrfs_device *device, btrfs_csum(fs_info->csum_type, (const u8 *)sb + BTRFS_CSUM_SIZE, BTRFS_SUPER_INFO_SIZE - BTRFS_CSUM_SIZE, sb->csum); + /* + * Lock the folio containing the super block. + * + * This will prevent user space dev scan from getting half-backed + * super block. + * + * Also keep the folio locked until write finished, as a way to + * track if the write has finished. + */ folio = __filemap_get_folio(mapping, bytenr >> PAGE_SHIFT, FGP_LOCK | FGP_ACCESSED | FGP_CREAT, GFP_NOFS); -- 2.52.0