Received: by 2002:a25:e7d8:0:0:0:0:0 with SMTP id e207csp661644ybh; Tue, 10 Mar 2020 06:05:07 -0700 (PDT) X-Google-Smtp-Source: ADFU+vt/mYMaqRYzqkG4accEjXhGpLacsspfn/quWlmLCT6xVLVhvj02ElDvvHNn3VWW48EbnW1v X-Received: by 2002:a05:6808:646:: with SMTP id z6mr1027328oih.163.1583845507199; Tue, 10 Mar 2020 06:05:07 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1583845507; cv=none; d=google.com; s=arc-20160816; b=rC/AbsEPABjpPXSUqal91ixL6zkf1y3Zvm0mthiOxQ9x1NfGSpf9NhJWcc1WHSXsfn 5W5gSb2o1ES4SNkGTU3tEb+kH7P1UwVP8VK4/N3le8WSG8Y0Qx5pI7hYQBQGEI6ZidDX cmqNZI9IKQr0P5Sq+itix6O1RsZfuOor0XgBYKwj1UZI1Uq0od7g4tuya3xKydBFdF2d S+1wemDuxSPIkWt+u6JEspyx6fAue3yRlbLXhAB8clkREZT65KcKjeH7cQTuLwo+4TX9 plOMumPgcZ+JtXpQ6MMvUEzKoLmmN7Lja5PvF5Q1p+2LeZJvpuF3+fVFRltw7QU0J0f5 O8/A== 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=BQWg62srzQ3WziKXtFl91qeYRP46pifGQexRGCx2UWE=; b=GqLoq2Q5J2HAc2inbz2R7niaslXvDfxo3knuaehc+dElM6aFqLwczLhl2lXEHrvMk+ +PEwTPNSIe/9jQDzM/nFexrpNGb8db8ccC8Azmo0tsvFPcj40qSU+cruWp4r2RI+npxd qg7rVhKjto4VTw2zpy+dsjpLdDW7NZHGZI5NGPfdTFX5wyJ5ZNXKaNRK/9hXl8xkKD6U LdBHU76IV7ZeJIfDyIaqO228i+hw6UWi+4oYeqfv5F6YhVGoAGjRZafNFPPwrnXBSaBZ n7C+0H8LOj/SHFIcl6Kg+d/BZMRJuNVSy/uuBIxxYBxrrg1oN8BjV31rTBof42hLCS+u WyeQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=CePHyTrk; 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 t18si2591512otq.105.2020.03.10.06.04.25; Tue, 10 Mar 2020 06:05:07 -0700 (PDT) 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=CePHyTrk; 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 S1730463AbgCJNCo (ORCPT + 99 others); Tue, 10 Mar 2020 09:02:44 -0400 Received: from mail.kernel.org ([198.145.29.99]:46202 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730458AbgCJNCm (ORCPT ); Tue, 10 Mar 2020 09:02:42 -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 8A05624691; Tue, 10 Mar 2020 13:02:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583845362; bh=9nZfuTeIzEFSEll9ZfYd1I9uPouRhsLUnRpC+SEEuSY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=CePHyTrkJWF8kwWDoQvrB3l7+Tohn++di4J5U8LSklfKCVjzDTuU7BLHzd1uQPP0z jl8q7AXayxMM8h2l86UdUQxgvT1Nz4HNDLNF7Ct23ZtjVUAjCdxyNdYWrCNsK+s35C kK7/aGFQlzu9hd97Tn7FVw7kvTdx8Sf2sLkfsLa4= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Mikulas Patocka , Mike Snitzer Subject: [PATCH 5.5 118/189] dm integrity: fix recalculation when moving from journal mode to bitmap mode Date: Tue, 10 Mar 2020 13:39:15 +0100 Message-Id: <20200310123651.677058895@linuxfoundation.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200310123639.608886314@linuxfoundation.org> References: <20200310123639.608886314@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: Mikulas Patocka commit d5bdf66108419cdb39da361b58ded661c29ff66e upstream. If we resume a device in bitmap mode and the on-disk format is in journal mode, we must recalculate anything above ic->sb->recalc_sector. Otherwise, there would be non-recalculated blocks which would cause I/O errors. Fixes: 468dfca38b1a ("dm integrity: add a bitmap mode") Cc: stable@vger.kernel.org # v5.2+ Signed-off-by: Mikulas Patocka Signed-off-by: Mike Snitzer Signed-off-by: Greg Kroah-Hartman --- drivers/md/dm-integrity.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) --- a/drivers/md/dm-integrity.c +++ b/drivers/md/dm-integrity.c @@ -2888,17 +2888,24 @@ static void dm_integrity_resume(struct d } else { replay_journal(ic); if (ic->mode == 'B') { - int mode; ic->sb->flags |= cpu_to_le32(SB_FLAG_DIRTY_BITMAP); ic->sb->log2_blocks_per_bitmap_bit = ic->log2_blocks_per_bitmap_bit; r = sync_rw_sb(ic, REQ_OP_WRITE, REQ_FUA); if (unlikely(r)) dm_integrity_io_error(ic, "writing superblock", r); - mode = ic->recalculate_flag ? BITMAP_OP_SET : BITMAP_OP_CLEAR; - block_bitmap_op(ic, ic->journal, 0, ic->provided_data_sectors, mode); - block_bitmap_op(ic, ic->recalc_bitmap, 0, ic->provided_data_sectors, mode); - block_bitmap_op(ic, ic->may_write_bitmap, 0, ic->provided_data_sectors, mode); + block_bitmap_op(ic, ic->journal, 0, ic->provided_data_sectors, BITMAP_OP_CLEAR); + block_bitmap_op(ic, ic->recalc_bitmap, 0, ic->provided_data_sectors, BITMAP_OP_CLEAR); + block_bitmap_op(ic, ic->may_write_bitmap, 0, ic->provided_data_sectors, BITMAP_OP_CLEAR); + if (ic->sb->flags & cpu_to_le32(SB_FLAG_RECALCULATING) && + le64_to_cpu(ic->sb->recalc_sector) < ic->provided_data_sectors) { + block_bitmap_op(ic, ic->journal, le64_to_cpu(ic->sb->recalc_sector), + ic->provided_data_sectors - le64_to_cpu(ic->sb->recalc_sector), BITMAP_OP_SET); + block_bitmap_op(ic, ic->recalc_bitmap, le64_to_cpu(ic->sb->recalc_sector), + ic->provided_data_sectors - le64_to_cpu(ic->sb->recalc_sector), BITMAP_OP_SET); + block_bitmap_op(ic, ic->may_write_bitmap, le64_to_cpu(ic->sb->recalc_sector), + ic->provided_data_sectors - le64_to_cpu(ic->sb->recalc_sector), BITMAP_OP_SET); + } rw_journal_sectors(ic, REQ_OP_WRITE, REQ_FUA | REQ_SYNC, 0, ic->n_bitmap_blocks * (BITMAP_BLOCK_SIZE >> SECTOR_SHIFT), NULL); }