From mboxrd@z Thu Jan 1 00:00:00 1970 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=-13.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,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 4278BC4361B for ; Mon, 7 Dec 2020 19:57:58 +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 AE35C21D7F for ; Mon, 7 Dec 2020 19:57:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org AE35C21D7F 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]:51324 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kmMdw-0001CI-5c for qemu-devel@archiver.kernel.org; Mon, 07 Dec 2020 14:57:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:57270) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kmMby-0000dN-56 for qemu-devel@nongnu.org; Mon, 07 Dec 2020 14:55:54 -0500 Received: from us-smtp-delivery-124.mimecast.com ([63.128.21.124]:56602) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kmMbu-0004DV-Qx for qemu-devel@nongnu.org; Mon, 07 Dec 2020 14:55:53 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1607370949; 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: in-reply-to:in-reply-to:references:references; bh=bI7USiaNwU+ybQRgCMxGzpYtSjxEjIDf9HBQYrCsYWA=; b=Zwl4zqAdMMU1tVkPj78WmTQxc9duEZq6c3qrUX46jw8eGgK8qXCYAPudV96qPkCJVBlnIE Q0An+QyzDL9B//kRGi6Ujk6O/T0Vv9ZQqNANaSqQ8yExIsWVCKwmag7jrVB5zzI3TF56FT mUMvs0i8wBlCpEo2b8Icy6lHOug0mXs= 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-538-wpUP-tOZPGKFZNddBMUIEQ-1; Mon, 07 Dec 2020 14:55:47 -0500 X-MC-Unique: wpUP-tOZPGKFZNddBMUIEQ-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 44B3080F040 for ; Mon, 7 Dec 2020 19:55:46 +0000 (UTC) Received: from horse.redhat.com (ovpn-116-41.rdu2.redhat.com [10.10.116.41]) by smtp.corp.redhat.com (Postfix) with ESMTP id 537B960636; Mon, 7 Dec 2020 19:55:40 +0000 (UTC) Received: by horse.redhat.com (Postfix, from userid 10451) id B376D220BCF; Mon, 7 Dec 2020 14:55:39 -0500 (EST) Date: Mon, 7 Dec 2020 14:55:39 -0500 From: Vivek Goyal To: qemu-devel@nongnu.org Subject: Re: [PATCH 1/3] virtiofsd: Set up posix_lock hash table for root inode Message-ID: <20201207195539.GB3107@redhat.com> References: <20201207183021.22752-1-vgoyal@redhat.com> <20201207183021.22752-2-vgoyal@redhat.com> MIME-Version: 1.0 In-Reply-To: <20201207183021.22752-2-vgoyal@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 Authentication-Results: relay.mimecast.com; auth=pass smtp.auth=CUSA124A263 smtp.mailfrom=vgoyal@redhat.com X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Received-SPF: pass client-ip=63.128.21.124; envelope-from=vgoyal@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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_NONE=-0.0001, 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: virtio-fs@redhat.com, mszeredi@redhat.com, lersek@redhat.com, dgilbert@redhat.com, stefanha@redhat.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" We setup per inode hash table ->posix_lock to support remote posix locks. But we forgot to initialize this table for root inode. Laszlo managed to trigger an issue where he sent a FUSE_FLUSH request for root inode and lo_flush() found inode with inode->posix_lock NULL and accessing this table crashed virtiofsd. May be we can get rid of initializing this hash table for directory objects completely. But that optimization is for another day. Reported-by: Laszlo Ersek Signed-off-by: Vivek Goyal --- tools/virtiofsd/passthrough_ll.c | 7 +++++++ 1 file changed, 7 insertions(+) Index: rhvgoyal-qemu/tools/virtiofsd/passthrough_ll.c =================================================================== --- rhvgoyal-qemu.orig/tools/virtiofsd/passthrough_ll.c 2020-12-07 14:46:22.198359486 -0500 +++ rhvgoyal-qemu/tools/virtiofsd/passthrough_ll.c 2020-12-07 14:48:07.873737472 -0500 @@ -3372,6 +3372,9 @@ static void setup_root(struct lo_data *l root->key.mnt_id = mnt_id; root->nlookup = 2; g_atomic_int_set(&root->refcount, 2); + pthread_mutex_init(&root->plock_mutex, NULL); + root->posix_locks = g_hash_table_new_full( + g_direct_hash, g_direct_equal, NULL, posix_locks_value_destroy); } static guint lo_key_hash(gconstpointer key) @@ -3394,6 +3397,10 @@ static void fuse_lo_data_cleanup(struct if (lo->inodes) { g_hash_table_destroy(lo->inodes); } + + if (lo->root.posix_locks) { + g_hash_table_destroy(lo->root.posix_locks); + } lo_map_destroy(&lo->fd_map); lo_map_destroy(&lo->dirp_map); lo_map_destroy(&lo->ino_map);