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: 1442337 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=nongnu.org (client-ip=209.51.188.17; helo=lists.gnu.org; envelope-from=qemu-devel-bounces+incoming=patchwork.ozlabs.org@nongnu.org; receiver=) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (1024-bit key; unprotected) header.d=redhat.com header.i=@redhat.com header.a=rsa-sha256 header.s=mimecast20190719 header.b=FPHnJMHS; dkim-atps=neutral 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 ozlabs.org (Postfix) with ESMTPS id 4Dhx8446z7z9sBJ for ; Sat, 20 Feb 2021 02:58:44 +1100 (AEDT) Received: from localhost ([::1]:50230 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lD8B0-0006LD-6z for incoming@patchwork.ozlabs.org; Fri, 19 Feb 2021 10:58:42 -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+incoming=patchwork.ozlabs.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(+)