Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp1139644ybf; Thu, 27 Feb 2020 05:46:53 -0800 (PST) X-Google-Smtp-Source: APXvYqz2BrNSlmQJSbcESfxfKcOnSD9RaBksyCKnNjjo+SJTyG0ViZo5MCH+qHfAxlvy+WMmJgl/ X-Received: by 2002:aca:cd0e:: with SMTP id d14mr1462959oig.167.1582811213025; Thu, 27 Feb 2020 05:46:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582811213; cv=none; d=google.com; s=arc-20160816; b=vtkdwpnO+aGqLDEFPjDstVnlxWZgh48/zMFmHXOFykQEeUHHbisOrLKZ6j8OKyrbbx IhenyX/ZBKST7qLu/WF4rqUD+FBFrAhN4FTG8ZeSUm9AmP68HBsv3VoP692ykl3xlMs5 KCh9vSX8iY23a1gmt2p/rtmylVb48CEfIdTDnPJzG8ya5Ro08k2Ficj3c2I2FK/w8xe7 0VaqkEFh7dmH9jqsO9ns4rl1YesqynQrfGNhGf6ts8oBt7rV79rNrkKXeu6sFvQKqxiZ 34/wUCxq9pQo8ifQIGjUz9Amjh3JZFqj2XUo9pDjPjaRyScpfaSWcWtcJqU1WIhRiUki SLkg== 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=swXYaDgFuQRq8vMNttxx43cdVz0jrscRLVWQ6YQ/UB4=; b=t8BCQGdhNLOQN2cOzq6GHHNNu8DjhjDnpT3R/+xz8JmwSS4Iryw8jLSi32P0AuXrBV By3E01rn/qMnObC0cx/4IbH/8rJ/7VCKbDpX4lyaKPCF6x/XM+17+AXHDkhBWxpLvrZT 98jPTHfSCtYFoW0t/rw+6b9WzwAJxp4KSxXirDOBQZ2l5ALkh6hL2TfuivfWQZZBlIvu eUWnbWqvJZIpzyC457hfUXAdp6WlPh4W9vog/wOJ7v1BT/rAxIqVHc1fzGipGWcin4Fm Tkv1YSC2lGxs0EUT96L9Vj6c5HxNIHN2ozaIgxw+NOMUub8QpDkVlD6ps8EGEhpFjbfo bKGg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=dN9SSTpq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id r67si1319127oie.145.2020.02.27.05.46.41; Thu, 27 Feb 2020 05:46:53 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=dN9SSTpq; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730345AbgB0NpJ (ORCPT + 99 others); Thu, 27 Feb 2020 08:45:09 -0500 Received: from mail.kernel.org ([198.145.29.99]:40846 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730314AbgB0NpD (ORCPT ); Thu, 27 Feb 2020 08:45:03 -0500 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 E9BE620578; Thu, 27 Feb 2020 13:45:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1582811102; bh=X0N4qAhIcSGQX/+onXxgznseKCjCioKEWftFRkvE8Gc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=dN9SSTpq2PAmTn7uLJnEXsCQts+G0hePMAkJMGy1brdwrmft5ZsEvTCGf3Eb6v1zN 1KF1SDESDYKeUodIL7CIXkT7eHzsfJcgUNV8IiHuYIy4nccw5tUBv8VpzuvLE9kCGG eQ6FPB3+A8w5sPtd89CSCiuxbvhDgYdN7qy47JNk= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Shijie Luo , Theodore Tso , Jan Kara , stable@kernel.org Subject: [PATCH 4.4 102/113] ext4: add cond_resched() to __ext4_find_entry() Date: Thu, 27 Feb 2020 14:36:58 +0100 Message-Id: <20200227132228.098577351@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200227132211.791484803@linuxfoundation.org> References: <20200227132211.791484803@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 9424ef56e13a1f14c57ea161eed3ecfdc7b2770e upstream. We tested a soft lockup problem in linux 4.19 which could also be found in linux 5.x. When dir inode takes up a large number of blocks, and if the directory is growing when we are searching, it's possible the restart branch could be called many times, and the do while loop could hold cpu a long time. Here is the call trace in linux 4.19. [ 473.756186] Call trace: [ 473.756196] dump_backtrace+0x0/0x198 [ 473.756199] show_stack+0x24/0x30 [ 473.756205] dump_stack+0xa4/0xcc [ 473.756210] watchdog_timer_fn+0x300/0x3e8 [ 473.756215] __hrtimer_run_queues+0x114/0x358 [ 473.756217] hrtimer_interrupt+0x104/0x2d8 [ 473.756222] arch_timer_handler_virt+0x38/0x58 [ 473.756226] handle_percpu_devid_irq+0x90/0x248 [ 473.756231] generic_handle_irq+0x34/0x50 [ 473.756234] __handle_domain_irq+0x68/0xc0 [ 473.756236] gic_handle_irq+0x6c/0x150 [ 473.756238] el1_irq+0xb8/0x140 [ 473.756286] ext4_es_lookup_extent+0xdc/0x258 [ext4] [ 473.756310] ext4_map_blocks+0x64/0x5c0 [ext4] [ 473.756333] ext4_getblk+0x6c/0x1d0 [ext4] [ 473.756356] ext4_bread_batch+0x7c/0x1f8 [ext4] [ 473.756379] ext4_find_entry+0x124/0x3f8 [ext4] [ 473.756402] ext4_lookup+0x8c/0x258 [ext4] [ 473.756407] __lookup_hash+0x8c/0xe8 [ 473.756411] filename_create+0xa0/0x170 [ 473.756413] do_mkdirat+0x6c/0x140 [ 473.756415] __arm64_sys_mkdirat+0x28/0x38 [ 473.756419] el0_svc_common+0x78/0x130 [ 473.756421] el0_svc_handler+0x38/0x78 [ 473.756423] el0_svc+0x8/0xc [ 485.755156] watchdog: BUG: soft lockup - CPU#2 stuck for 22s! [tmp:5149] Add cond_resched() to avoid soft lockup and to provide a better system responding. Link: https://lore.kernel.org/r/20200215080206.13293-1-luoshijie1@huawei.com Signed-off-by: Shijie Luo Signed-off-by: Theodore Ts'o Reviewed-by: Jan Kara Cc: stable@kernel.org Signed-off-by: Greg Kroah-Hartman --- fs/ext4/namei.c | 1 + 1 file changed, 1 insertion(+) --- a/fs/ext4/namei.c +++ b/fs/ext4/namei.c @@ -1418,6 +1418,7 @@ restart: /* * We deal with the read-ahead logic here. */ + cond_resched(); if (ra_ptr >= ra_max) { /* Refill the readahead buffer */ ra_ptr = 0;