Received: by 2002:a25:868d:0:0:0:0:0 with SMTP id z13csp2989620ybk; Mon, 18 May 2020 12:59:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJwFixN0rVFRTdCwvEv2vWowfWXo7GiaWo87bSi47yT1LaDZiWWsgagPgpeV53uomQK+1sMt X-Received: by 2002:a17:906:9a1:: with SMTP id q1mr15990969eje.296.1589831951414; Mon, 18 May 2020 12:59:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1589831951; cv=none; d=google.com; s=arc-20160816; b=Pz6bctHEujYMQBTWEEIRoF3q+QepR23QjzG0Jl0k4fZhxwrmgfqcEYLZSZuLkJzSFF ii2mtKmXQqKgpbkUUrOrniOHKAkJbAOYqfvrcvW5irEwRgdaEuj4J4JmUxJrDXHZkFpa hkeIyC3qOPRmwRj1/dC3eY7t8oKzija+AWeqhsNf5pqUU/17nVKETjRlDrKKkaQ+mZ8d LYq6A+xNSoImDUSCS2AMa4YP7Zz0DMSP8J3ySXib00OS0S8ouiAnpliJ4Tw7ugyDqBqg yQTvEKvmE4uo7IVnFCXALevryu39Xar3f35pM6zHvhSDerevBkQimVbAXB9MtTll4P8I igkw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=SNryTXZukkNwhXZEShaGl8SnXeRsp1rQACWgXbcvzWw=; b=mJ8kabh5EIXXon8vzbH9LkyG+2hgwhcxxWrrslNc09tyyB6m0b8tOAiMHEj8mvc17m A1GIZuNkmCd6einLGo2IjzsBvd/krm6d/FnDS3qceKWsCbbl+rhk5szmgYjyGZED6pCk CwsSuOIJjZe4D7CBsz8W0ckyU1iqAiaV9ZZ6rcHN9Jxx8N4amDLs7/drJaKUbSNHgTJ4 5lV9GWRhf5gFFz9xJAUvUr76sI6ZINMhMI8kFftJ7TX6D4zYb6KIPzc1op7d4iZOBwTx Gmmr8m2rhkHaaKNPU4k05lcV+1VR0AacLFrXY9ZSUhX12RjUNYmIq1Yti9b0U67Eei+x NQYg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=QP0TP4eY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id c5si2299792edf.371.2020.05.18.12.58.48; Mon, 18 May 2020 12:59:11 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=QP0TP4eY; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2387601AbgERS1k (ORCPT + 99 others); Mon, 18 May 2020 14:27:40 -0400 Received: from mail.kernel.org ([198.145.29.99]:41738 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729645AbgERRnv (ORCPT ); Mon, 18 May 2020 13:43:51 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 7E9A9207C4; Mon, 18 May 2020 17:43:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1589823831; bh=QIKMjtwTJQ+GASKxHYDiRjpIjenb5FKuaNAqFegCf6s=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QP0TP4eYcp0ayp14jXKSOWyuYoTe3kvm0FGY4CbAUg2ftSTqmbP1OJ1Mq24V10z3i OtkdhEigj5NvpdOhujG7+effDcrR8lzsoFAc1apjsDNvOwOfVxvKl36vK+0gmd3j8F gg6TUZwiv24Ovi6ucWY/YR1N98HRgSa5ywsaygdg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Jan Kara , Shijie Luo , Theodore Tso , stable@kernel.org, Ben Hutchings , Sasha Levin Subject: [PATCH 4.9 26/90] ext4: add cond_resched() to ext4_protect_reserved_inode Date: Mon, 18 May 2020 19:36:04 +0200 Message-Id: <20200518173456.533046245@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200518173450.930655662@linuxfoundation.org> References: <20200518173450.930655662@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Shijie Luo commit af133ade9a40794a37104ecbcc2827c0ea373a3c upstream. When journal size is set too big by "mkfs.ext4 -J size=", or when we mount a crafted image to make journal inode->i_size too big, the loop, "while (i < num)", holds cpu too long. This could cause soft lockup. [ 529.357541] Call trace: [ 529.357551] dump_backtrace+0x0/0x198 [ 529.357555] show_stack+0x24/0x30 [ 529.357562] dump_stack+0xa4/0xcc [ 529.357568] watchdog_timer_fn+0x300/0x3e8 [ 529.357574] __hrtimer_run_queues+0x114/0x358 [ 529.357576] hrtimer_interrupt+0x104/0x2d8 [ 529.357580] arch_timer_handler_virt+0x38/0x58 [ 529.357584] handle_percpu_devid_irq+0x90/0x248 [ 529.357588] generic_handle_irq+0x34/0x50 [ 529.357590] __handle_domain_irq+0x68/0xc0 [ 529.357593] gic_handle_irq+0x6c/0x150 [ 529.357595] el1_irq+0xb8/0x140 [ 529.357599] __ll_sc_atomic_add_return_acquire+0x14/0x20 [ 529.357668] ext4_map_blocks+0x64/0x5c0 [ext4] [ 529.357693] ext4_setup_system_zone+0x330/0x458 [ext4] [ 529.357717] ext4_fill_super+0x2170/0x2ba8 [ext4] [ 529.357722] mount_bdev+0x1a8/0x1e8 [ 529.357746] ext4_mount+0x44/0x58 [ext4] [ 529.357748] mount_fs+0x50/0x170 [ 529.357752] vfs_kern_mount.part.9+0x54/0x188 [ 529.357755] do_mount+0x5ac/0xd78 [ 529.357758] ksys_mount+0x9c/0x118 [ 529.357760] __arm64_sys_mount+0x28/0x38 [ 529.357764] el0_svc_common+0x78/0x130 [ 529.357766] el0_svc_handler+0x38/0x78 [ 529.357769] el0_svc+0x8/0xc [ 541.356516] watchdog: BUG: soft lockup - CPU#0 stuck for 23s! [mount:18674] Link: https://lore.kernel.org/r/20200211011752.29242-1-luoshijie1@huawei.com Reviewed-by: Jan Kara Signed-off-by: Shijie Luo Signed-off-by: Theodore Ts'o Cc: stable@kernel.org Signed-off-by: Ben Hutchings Signed-off-by: Sasha Levin --- fs/ext4/block_validity.c | 1 + 1 file changed, 1 insertion(+) diff --git a/fs/ext4/block_validity.c b/fs/ext4/block_validity.c index d31d93ee5e76f..45c7b0f9a8e3f 100644 --- a/fs/ext4/block_validity.c +++ b/fs/ext4/block_validity.c @@ -152,6 +152,7 @@ static int ext4_protect_reserved_inode(struct super_block *sb, u32 ino) return PTR_ERR(inode); num = (inode->i_size + sb->s_blocksize - 1) >> sb->s_blocksize_bits; while (i < num) { + cond_resched(); map.m_lblk = i; map.m_len = num - i; n = ext4_map_blocks(NULL, inode, &map, 0); -- 2.20.1