Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2980602imu; Mon, 19 Nov 2018 08:56:31 -0800 (PST) X-Google-Smtp-Source: AJdET5fO2OJx/0doOwiTXfEdBAUa6bHyrlJj32QGsKMC/vNUuiPm1I0uGarvuFp1kVJw7SqcjQrv X-Received: by 2002:a63:5122:: with SMTP id f34mr19970349pgb.218.1542646591113; Mon, 19 Nov 2018 08:56:31 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542646591; cv=none; d=google.com; s=arc-20160816; b=U6rL0UiBMPbXg6eA3fi1ER2kGFy10wbLQOkYkWsdhaN/zWiZYnWu8mDuxcKQr+6dCh hxPf0tUQkUtxpXPhcZ3uhr/Jr9pD/gNhaVG7b9UuDFEJtah+Atzqtv8PgxsBs/CaxevD eygDpp1UYY6D5uMi8E+BhO98Pa0uibDjZAz8z373QtmbPZNy0uqzRRig6VpHIgfhfQkU W6H0HT/pIpreKvihXO0exy8ZL0/FHDL9SoscPlFvEn5py91dBFeUr1DRfYUYhvrN3BJA y1kBNUy45vdUU1c7tbSESCj9twsL/G9EwLToee9Lu4MIfJaoVkh889A1ryut0Q/HiCUa KbPQ== 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=aiYZxh0u1sH5xZbShLRNQ1Ceg3o/spd9KEzbBE2vKNI=; b=0b/nb4zyz358e4x4C/si+FiFQQj/EogUV5lRM95y78GaP9lbr/hcY79d4SMMMqXM/S j6vMx+yPnYS805fAmCfJkSLOLEXX/e8AGBSoUtc6Nyls10YrOh/GDbeeLU1yMmqVdDtJ vGjWPTArpEAE+HOQjk38KSfzFqMsa+U3EjrDXC4lftryak/pgDIO0JZj5rji55OWA4Jc UtfHmhqRkuLjYr9/3W19rXgMRwWzQqKV0gbDJYn497Xhu3ozXUfpu4agRA87bAHWCEx6 aA+AWwwboyYrQdr4162/0UKTxxWisU86k4bNFHGEN4+To6bVcaQHQtdOov2EfN0pj5B5 cSQw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=XdhE8+pW; 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 q61-v6si40523759plb.418.2018.11.19.08.56.15; Mon, 19 Nov 2018 08:56:31 -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=XdhE8+pW; 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 S2390979AbeKTDSh (ORCPT + 99 others); Mon, 19 Nov 2018 22:18:37 -0500 Received: from mail.kernel.org ([198.145.29.99]:57544 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390256AbeKTDSg (ORCPT ); Mon, 19 Nov 2018 22:18:36 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.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 E4957206BA; Mon, 19 Nov 2018 16:54:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1542646461; bh=0KBF25V6uuIiAWjujCsWPt+ABKxf3GKAXaqSW1cc1EA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=XdhE8+pWiQTj57W3dxJ/0dxgK4tK8uxEJkIAvrc/lk0bMYTXpFy/HI1PsC2nXD/Ik QG1i3AcdN5ijry/v5CG0WiwpiaW8gUeh4ehdvDvH8Je+lTCtgLrXH5WbRkmj4HfO5S NHNdbSNsoaPDzdsAqLAVI0ghvpJ1U4ZjtolH73rg= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Filipe Manana , Robbie Ko , David Sterba Subject: [PATCH 4.9 50/83] Btrfs: fix cur_offset in the error case for nocow Date: Mon, 19 Nov 2018 17:29:16 +0100 Message-Id: <20181119162622.388614463@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181119162612.046511542@linuxfoundation.org> References: <20181119162612.046511542@linuxfoundation.org> User-Agent: quilt/0.65 X-stable: review 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 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ From: Robbie Ko commit 506481b20e818db40b6198815904ecd2d6daee64 upstream. When the cow_file_range fails, the related resources are unlocked according to the range [start..end), so the unlock cannot be repeated in run_delalloc_nocow. In some cases (e.g. cur_offset <= end && cow_start != -1), cur_offset is not updated correctly, so move the cur_offset update before cow_file_range. kernel BUG at mm/page-writeback.c:2663! Internal error: Oops - BUG: 0 [#1] SMP CPU: 3 PID: 31525 Comm: kworker/u8:7 Tainted: P O Hardware name: Realtek_RTD1296 (DT) Workqueue: writeback wb_workfn (flush-btrfs-1) task: ffffffc076db3380 ti: ffffffc02e9ac000 task.ti: ffffffc02e9ac000 PC is at clear_page_dirty_for_io+0x1bc/0x1e8 LR is at clear_page_dirty_for_io+0x14/0x1e8 pc : [] lr : [] pstate: 40000145 sp : ffffffc02e9af4f0 Process kworker/u8:7 (pid: 31525, stack limit = 0xffffffc02e9ac020) Call trace: [] clear_page_dirty_for_io+0x1bc/0x1e8 [] extent_clear_unlock_delalloc+0x1e4/0x210 [btrfs] [] run_delalloc_nocow+0x3b8/0x948 [btrfs] [] run_delalloc_range+0x250/0x3a8 [btrfs] [] writepage_delalloc.isra.21+0xbc/0x1d8 [btrfs] [] __extent_writepage+0xe8/0x248 [btrfs] [] extent_write_cache_pages.isra.17+0x164/0x378 [btrfs] [] extent_writepages+0x48/0x68 [btrfs] [] btrfs_writepages+0x20/0x30 [btrfs] [] do_writepages+0x30/0x88 [] __writeback_single_inode+0x34/0x198 [] writeback_sb_inodes+0x184/0x3c0 [] __writeback_inodes_wb+0x6c/0xc0 [] wb_writeback+0x1b8/0x1c0 [] wb_workfn+0x150/0x250 [] process_one_work+0x1dc/0x388 [] worker_thread+0x130/0x500 [] kthread+0x10c/0x110 [] ret_from_fork+0x10/0x40 Code: d503201f a9025bb5 a90363b7 f90023b9 (d4210000) CC: stable@vger.kernel.org # 4.4+ Reviewed-by: Filipe Manana Signed-off-by: Robbie Ko Signed-off-by: David Sterba Signed-off-by: Greg Kroah-Hartman --- fs/btrfs/inode.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) --- a/fs/btrfs/inode.c +++ b/fs/btrfs/inode.c @@ -1548,12 +1548,11 @@ out_check: } btrfs_release_path(path); - if (cur_offset <= end && cow_start == (u64)-1) { + if (cur_offset <= end && cow_start == (u64)-1) cow_start = cur_offset; - cur_offset = end; - } if (cow_start != (u64)-1) { + cur_offset = end; ret = cow_file_range(inode, locked_page, cow_start, end, end, page_started, nr_written, 1, NULL); if (ret)