Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp2974090imu; Mon, 19 Nov 2018 08:50:46 -0800 (PST) X-Google-Smtp-Source: AJdET5eMbsi0hg5LaSG2qRcvTCA0PJHUM1AkpWtb2fK5tgYvkzp4h15U0j7dp8IZqg6ofVS38yYv X-Received: by 2002:a17:902:c85:: with SMTP id 5-v6mr22080998plt.42.1542646246828; Mon, 19 Nov 2018 08:50:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1542646246; cv=none; d=google.com; s=arc-20160816; b=qiomVDqFFl2slcdYq1Y8ycZWqoc2DXBZ+Zzu8l1XzjVKTnshbNrzALeRC84b9cGTAl XavdFkE4HbbGPQXUzvwis1U7Q2wZcg+dlo+YKZ4rRl2OJxH0h5BrmsW9M1UZn9HtjdSC s3/ISWo8bE8YinyvMjvb9b79KU/7V4Yvc0DFV+ReQi3FEvSn1KJIK90Qqa0OcuIukbXF RbgzJosAT1ki1iApq7lGV+k9ec955Cv2G7InYVp3quK4CYgbaoDDXCdcIFNFxYKaVyhw h1y5UuRBOiUv6BXUV86VgyKCAFTg54+G1Ni3TtGnbOmwhUGGlaQDXxAdIDZ5i5dvTpRR nTiQ== 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=wPcQFpO6HMw/pgr1Ycvik65Lw5HrAODdqF0N0DGd0ps=; b=uIIQ//IPhF+of0dA0vFPGhVbilukCrBj2t1vfvLzWRFU9+hQ0BFnT+yLga/5hbVkGY 1LllZohnUo59EEq4cEjU+7keRFQAeOLEdClxnjZUhw5NvPVWzyDUaeOEPWFnS6cV6krz RmixifzjFt4i2SOJFYR5LVbwun+wHbRJA7aDG+Q9bk9SFi9zcav33jfLCSGBZV20iEAn M9smAwnPv3URdkP/k2m4nQXAYrSaZwlk1LHcEvVU1PaL/aHRWR0fpOVK9JIPhWEMb2eO 8VJpnXrK0d1AHwWypsQYmHn3VSMCOep3Y3F/Jsxac7ZOlmyRCICwJ84/FflZqFk+TXor BDDg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=QC9Su1Rd; 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 y2si13611532pli.266.2018.11.19.08.50.31; Mon, 19 Nov 2018 08:50:46 -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=QC9Su1Rd; 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 S2389855AbeKTDOC (ORCPT + 99 others); Mon, 19 Nov 2018 22:14:02 -0500 Received: from mail.kernel.org ([198.145.29.99]:51146 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2389272AbeKTDOB (ORCPT ); Mon, 19 Nov 2018 22:14:01 -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 088F42148E; Mon, 19 Nov 2018 16:49:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1542646188; bh=fZgEikIk/5hDrbEr9aTKe7AtXrB16YhPuMU4hvwgE78=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=QC9Su1RdjlI0A4ZgwG9DcRdB0zEom4Z4hkiB6XysXlrI6ckhEqiAUVN5tsYEl+0L/ OvJgTaddY8q6wTi5JcARC0pC7+VxRz6/tHwP6B9kdD4oaKZcVZTu163fo3JNcHybxS qRq0I2Q2EUG7OI7GcdRtwepr5YaXoGfXJiksSVd4= 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.14 069/124] Btrfs: fix cur_offset in the error case for nocow Date: Mon, 19 Nov 2018 17:28:43 +0100 Message-Id: <20181119162626.600576083@linuxfoundation.org> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20181119162612.951907286@linuxfoundation.org> References: <20181119162612.951907286@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.14-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 @@ -1565,12 +1565,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)