From patchwork Fri Feb 19 15:33:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Max Reitz X-Patchwork-Id: 12095723 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 606B9C433E0 for ; Fri, 19 Feb 2021 15:59:31 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id D3AEA61493 for ; Fri, 19 Feb 2021 15:59:30 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org D3AEA61493 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:52590 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lD8Bl-0007Pq-Q2 for qemu-devel@archiver.kernel.org; Fri, 19 Feb 2021 10:59:29 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:45084) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lD7n4-0000H8-CI for qemu-devel@nongnu.org; Fri, 19 Feb 2021 10:33:59 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:42412) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1lD7n1-0005wo-5g for qemu-devel@nongnu.org; Fri, 19 Feb 2021 10:33:57 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1613748833; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=g5zMmGOZX4svA9cvoZW7Ojlp+Xt+n7jSbF6/h/0aFJU=; b=FPHnJMHS7ia7p0hBhDhMgMxiN7odkBscVmJCpD7fnKJV2JJmOV42vP3/0hljrwHvdYeihB CHTbEgVNFCJ/CN5TNqG1S+O7zCyI3P2DRNMZDc3nwm04aB2LX//GMREN5MTkZiJOcW1qGG rWWBgzt6fwLHhR5E1kCGJe9VMEVwiPw= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-436-STYMIEcoPQqPqZlIjK_Ftw-1; Fri, 19 Feb 2021 10:33:51 -0500 X-MC-Unique: STYMIEcoPQqPqZlIjK_Ftw-1 Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 896971936B67; Fri, 19 Feb 2021 15:33:50 +0000 (UTC) Received: from localhost (ovpn-112-191.ams2.redhat.com [10.36.112.191]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 2A7D713470; Fri, 19 Feb 2021 15:33:49 +0000 (UTC) From: Max Reitz To: qemu-block@nongnu.org Subject: [PATCH 0/3] backup-top: Don't crash on post-finalize accesses Date: Fri, 19 Feb 2021 16:33:45 +0100 Message-Id: <20210219153348.41861-1-mreitz@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=mreitz@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Received-SPF: pass client-ip=63.128.21.124; envelope-from=mreitz@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Kevin Wolf , Vladimir Sementsov-Ogievskiy , John Snow , qemu-devel@nongnu.org, Max Reitz Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" Hi, After job-finalize, the backup-top node generally stays around. That’s quite a problem, because its BlockCopyState is already freed then, and it has no filtered child. We really want the node to be gone. The only reference that realistically can keep it alive is that of the backup job (though block_job_add_bdrv() called by block_job_create()). Dropping that reference before bdrv_backup_top_drop() should[1] ensure bdrv_backup_top_drop() will delete the node. [1]: bdrv_backup_top_drop() replaces the backup-top node by its filtered child, which detaches all parents from backup-top but the ones with .stay_at_node set. The only parent that does this is a block job. I don’t think nodes can be in use by multiple block jobs at once, so the only parent with .stay_at_node set can be backup-top’s own backup job. Patch 2 is there kind of as a failsafe, and kind of because it just made sense to me, even if it won’t do anything. Max Reitz (3): backup: Remove nodes from job in .clean() backup-top: Refuse I/O in inactive state iotests/283: Check that finalize drops backup-top block/backup-top.c | 10 +++++++ block/backup.c | 1 + tests/qemu-iotests/283 | 55 ++++++++++++++++++++++++++++++++++++++ tests/qemu-iotests/283.out | 15 +++++++++++ 4 files changed, 81 insertions(+)