Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2959502imu; Mon, 19 Nov 2018 08:38:34 -0800 (PST) X-Google-Smtp-Source: AJdET5cJcgAY/MtkwxN/Vm5/XiY2OknTLBpOWvBu4al6Bv9SXPGgt0M+KeORNVJz5z4ieo2Q3Elo X-Received: by 2002:a62:1709:: with SMTP id 9mr23381777pfx.249.1542645514909; Mon, 19 Nov 2018 08:38:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542645514; cv=none; d=google.com; s=arc-20160816; b=FUD+ECv8Wh8qmpkIsmoVh3+RIMfKA1o68sEtHhkFgR3z8jCPzNqwIHAMOrB+cbAnAk +Ghifd48wo7ybedT8LhfuvPhN5fjAsXW8oB54LzFqxMCRJ3Xitt7mVAzMjPrfhstSG6p aN9EqsBndugYyc2jpRuf1hEXOt4gNsEukzgX9x8REimQWfAWCuyK/EZ7yfHCjd0vcT+v zgy4jUshXeJId2VBosk/yzWtlYrV3yBkr8Bw5RKR5Ou94Oiw0z7gDtT0lus8i1hOM5o4 Tr+pSoa22hw4m4I48kYPJg5uyU+cFg3uXfZNYEBVjPx5U/oYkJJeQAMeH1ZAKSoA0h9c 9Hgw== 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=Br1TH9iZDaOfIl2tWwsxo/J5IhiiJHlgmsyr8xyb9o0=; b=czSdsgmk6N1grscQPbb3QlZl1beFzx/M+R1mvoWHOxlS9+AhO/JJF2YrKVIo1CTz1K 7K9pYlBRAwSFPNc95fKvzueI65UomCCydMsweVYt0ls1ZCA5kUaDSDIiAJvKX1/3YARN mfAcEbpjh2Kqy8v/JgHxAjKvp66QzHFXO40oz6rGiikMPqc97SVqcH5rXzrH1n/4W22N 8tAcwZczLFSKKd+7B1ZCZ8nJ6QobJuThNjpiE4Mmsc4m13NpkYTdmKCF3SuI6RAWCK/t EnleaDl16+jhLni3yY4E1CHZsxCwGbPmF2H5O1AL209y9r8Vkt8ysBu6+Dduel5F112L VktQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=r+PoTgOz; 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 s13si17202373pgh.583.2018.11.19.08.38.19; Mon, 19 Nov 2018 08:38:34 -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=r+PoTgOz; 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 S1731712AbeKTC7r (ORCPT + 99 others); Mon, 19 Nov 2018 21:59:47 -0500 Received: from mail.kernel.org ([198.145.29.99]:59322 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730350AbeKTC7q (ORCPT ); Mon, 19 Nov 2018 21:59:46 -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 313432145D; Mon, 19 Nov 2018 16:35:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1542645337; bh=FNoO5p7239xgTVp9n3X6+XqhlOO7egJfVlerTpurtic=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=r+PoTgOzgSqMqVp86AqAipOKbt/3IxNQYVkBdYTHHSWlJJzE43xbTYPZa6xkwK5Rt HoQXr7Me+ARrNNYbprOoClWJ/HbObBV3k06bl3hH19kVv2JWyL8ISwmIK24qtXB3hG ruxdaW3qTT6mo/bHoJZ+qK8bJfhF6NEXC0oD8qm8= 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.19 125/205] Btrfs: fix cur_offset in the error case for nocow Date: Mon, 19 Nov 2018 17:27:12 +0100 Message-Id: <20181119162636.522126209@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181119162616.586062722@linuxfoundation.org> References: <20181119162616.586062722@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.19-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 @@ -1532,12 +1532,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)