From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id AAF3131D725 for ; Tue, 3 Feb 2026 10:27:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=170.10.129.124 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770114441; cv=none; b=PUKgVUISKZH8lAfM4FJFqr9pSR5l4JdhZEZRoQbhbX2Pznthi+xAe8ffR+NQSkzCl8BWWxxLSipm0MbwuOYXNpMrdwMtVgXLEtOMrHUymKpagMiaVMXJKz46GzrQF+fC6RmOL2v0eSR37EjN3SStPEhskmy2dYXEFsKVIty6XI0= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770114441; c=relaxed/simple; bh=HhpAzoexONqBRfMann0YeEk4K22xyRssx8IfzbrtrLo=; h=Date:From:To:Cc:Subject:Message-ID:References:MIME-Version: Content-Type:Content-Disposition:In-Reply-To; b=ES1zEtel9t5QBJejXJaDV/OiJzheZejkvlni3czlfU2iumnlCL5UFp6H4MQAJuX0TS55KUqelbIbqXPTMgY+F+1j0MX+i94JuxQONrvYQI61rGROfalTciw9aJjQnSpdnxYwrLhuILeYPLnMp1/M0IZNbK6RexKMKvVMMAaMNCQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com; spf=pass smtp.mailfrom=redhat.com; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b=Owy4Mp9o; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b=CKEx3wXh; arc=none smtp.client-ip=170.10.129.124 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=quarantine dis=none) header.from=redhat.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=redhat.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=redhat.com header.i=@redhat.com header.b="Owy4Mp9o"; dkim=pass (2048-bit key) header.d=redhat.com header.i=@redhat.com header.b="CKEx3wXh" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1770114438; 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=kA8qyidkR7INyra5mnWciv78DJNfJc/S9cwmeexYPIA=; b=Owy4Mp9oJyVhpsPblHGGTpvy37WhN3Ir7CqH2heM8fHc40va8KM8ABTLInPWYk+G/YWyXf X+nBsgteEnDIHFZDeYs0a7bvhNNjbshwjBeI4vkdpWm7mGZKlce58O9SPx/NQbmrIkd9nW z5HPpZSfgpBNvXwxky9zp5WLYrdilxI= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-475-W4RkNbxEMeCgTce6Wk4hCw-1; Tue, 03 Feb 2026 05:27:17 -0500 X-MC-Unique: W4RkNbxEMeCgTce6Wk4hCw-1 X-Mimecast-MFC-AGG-ID: W4RkNbxEMeCgTce6Wk4hCw_1770114436 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-430fcf10287so5024481f8f.0 for ; Tue, 03 Feb 2026 02:27:17 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=google; t=1770114436; x=1770719236; darn=vger.kernel.org; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to; bh=kA8qyidkR7INyra5mnWciv78DJNfJc/S9cwmeexYPIA=; b=CKEx3wXhdQOjwn85Eg50F0trL6Sd+AgP31UZH4qX/b3wkIOLK9RBhvmUng1b/sawJH IIHv2aUNk1KXESlkcPDAoTbUuz2rJet2GLe7mYpsRk9qVm+gGPoYVhHwLAqblskzMkGI nJlhvV90gU7GFFucaeLYbRYR22vUr6YMDpKBDg0Gl1I22b+F3+XgFyIjFGlWzX2rq01o UMmOmwLqLTcF6l9BCgSEyY31uZ3AIBAfyC9/nSDL2brLOerrPT9cfptMAdf+bIw+FBbZ jo5FLUrtP5dzTxfpps6EPiKp8uRnPvjFC6ioU5dJVRNmbNFGD0sje5OjtcG9b36REzj1 4XoQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1770114436; x=1770719236; h=in-reply-to:content-disposition:mime-version:references:message-id :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kA8qyidkR7INyra5mnWciv78DJNfJc/S9cwmeexYPIA=; b=VEw9dZ8/1WCxXY8ZtESy+lI4EgoJKZjJaKzhzQqUD/GjO3CuvSwPRal06pDPip77ss gL3CIis5f3IiKVUTNNUH8dfkKbLVNBpucxqn1kTSDBDp7QWZasG1rpsuZSRTX92U8d3O OUVLE7O54VoRtySEV+p4uY2U0n8YJ7dQKMGC082/gulm9+rq2I+XU/txCkSxd0XVTVbF PRwtTF+NSBms4ZRSSaQueJx7v73wUOzqM4QXGBPYJVpceX/7BqoeK2DDmpoa2nxbQnJr +APygnUTnjb5+VuO8kRQb9AC4C1iE2UxAOELbuMN5/yuQjoVSigpK+HA/MHKdjKT0QEy k+HA== X-Forwarded-Encrypted: i=1; AJvYcCUcRBku+jfLHUuY9kvzQ4WMbRTReHGPh9C9JrCFffeEvo1fed53kZbjXXb8UBZIWC6BfP/5SN5W0vXzJPI=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1CXtvx37w9JmKwfeyVM8ACgAehN36KmfbPduxVAPfDHCcJHxu hPtDMrrsKDY1v3drD56mvlqhAP4yh7iIWcUPN28rByKxPzJPvWDPM/DIp9qSZ87yV7h2ZwHEA9J 7/20ujtOKOhm98X97o9Pc4pkbFmcuMwF+NwOuUNSPWqm7iVtHD+EGYckW6HFzS+35mA== X-Gm-Gg: AZuq6aLBtUD72eBlxje0SMCzR76xmPBJICBVhA+s0e/t3Hzc+E94/mZ1jkAZQPUlNwn bjWmUxLOOWYjhZGCvOnAicViHLIkOa/oSpE5L3n3rF34TffiT8APcqXHZZs3Tddgj7t49BeUlw5 LxnLrNDuuCpPmD9MFmX1HS/B8ib2fsWRO10dLuUMvQpOwqYhIvaqXkWQkbk81vMdHKQKJsVii0t LyrVWScY1PDyt523p4eJd1lIeT0/7jkrGX8i2E73rNCbnVpQ7kLwcvzhq5iOPiyrwmYLmRlFGOa MWBQif1pjf1pvE0koJ79yvTO0mf77uiTyr6iebLo1XOeyiNpLfg6zKLnY0LW8ovQfyXl4Q+Rkdz QXTr/esW+BVtAdMCwMxEZv93CVQYd52ojog== X-Received: by 2002:a5d:4851:0:b0:436:1e6:e1e3 with SMTP id ffacd0b85a97d-43601e6e2damr9992065f8f.46.1770114436122; Tue, 03 Feb 2026 02:27:16 -0800 (PST) X-Received: by 2002:a5d:4851:0:b0:436:1e6:e1e3 with SMTP id ffacd0b85a97d-43601e6e2damr9992025f8f.46.1770114435579; Tue, 03 Feb 2026 02:27:15 -0800 (PST) Received: from redhat.com (IGLD-80-230-34-155.inter.net.il. [80.230.34.155]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-435e131ce64sm53894663f8f.26.2026.02.03.02.27.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 03 Feb 2026 02:27:15 -0800 (PST) Date: Tue, 3 Feb 2026 05:27:12 -0500 From: "Michael S. Tsirkin" To: Li Chen Cc: Pankaj Gupta , Dan Williams , Vishal Verma , Dave Jiang , Ira Weiny , Cornelia Huck , Yuval Shaia , virtualization@lists.linux.dev, nvdimm@lists.linux.dev, linux-kernel@vger.kernel.org Subject: Re: [PATCH v2] nvdimm: virtio_pmem: serialize flush requests Message-ID: <20260203052616-mutt-send-email-mst@kernel.org> References: <20260203021353.121091-1-me@linux.beauty> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20260203021353.121091-1-me@linux.beauty> On Tue, Feb 03, 2026 at 10:13:51AM +0800, Li Chen wrote: > Under heavy concurrent flush traffic, virtio-pmem can overflow its request > virtqueue (req_vq): virtqueue_add_sgs() starts returning -ENOSPC and the > driver logs "no free slots in the virtqueue". Shortly after that the > device enters VIRTIO_CONFIG_S_NEEDS_RESET and flush requests fail with > "virtio pmem device needs a reset". > > Serialize virtio_pmem_flush() with a per-device mutex so only one flush > request is in-flight at a time. This prevents req_vq descriptor overflow > under high concurrency. > > Reproducer (guest with virtio-pmem): > - mkfs.ext4 -F /dev/pmem0 > - mount -t ext4 -o dax,noatime /dev/pmem0 /mnt/bench > - fio: ioengine=io_uring rw=randwrite bs=4k iodepth=64 numjobs=64 > direct=1 fsync=1 runtime=30s time_based=1 > - dmesg: "no free slots in the virtqueue" > "virtio pmem device needs a reset" > > Fixes: 6e84200c0a29 ("virtio-pmem: Add virtio pmem driver") > Signed-off-by: Li Chen Thanks! And the commit message looks good now and includes the reproducer. Acked-by: Michael S. Tsirkin Ira are you picking this up? > --- > v2: > - Use guard(mutex)() for flush_lock (as suggested by Ira Weiny). > - Drop redundant might_sleep() next to guard(mutex)() (as suggested by Michael S. Tsirkin). > > drivers/nvdimm/nd_virtio.c | 3 ++- > drivers/nvdimm/virtio_pmem.c | 1 + > drivers/nvdimm/virtio_pmem.h | 4 ++++ > 3 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/nvdimm/nd_virtio.c b/drivers/nvdimm/nd_virtio.c > index c3f07be4aa22..af82385be7c6 100644 > --- a/drivers/nvdimm/nd_virtio.c > +++ b/drivers/nvdimm/nd_virtio.c > @@ -44,6 +44,8 @@ static int virtio_pmem_flush(struct nd_region *nd_region) > unsigned long flags; > int err, err1; > > + guard(mutex)(&vpmem->flush_lock); > + > /* > * Don't bother to submit the request to the device if the device is > * not activated. > @@ -53,7 +55,6 @@ static int virtio_pmem_flush(struct nd_region *nd_region) > return -EIO; > } > > - might_sleep(); > req_data = kmalloc(sizeof(*req_data), GFP_KERNEL); > if (!req_data) > return -ENOMEM; > diff --git a/drivers/nvdimm/virtio_pmem.c b/drivers/nvdimm/virtio_pmem.c > index 2396d19ce549..77b196661905 100644 > --- a/drivers/nvdimm/virtio_pmem.c > +++ b/drivers/nvdimm/virtio_pmem.c > @@ -64,6 +64,7 @@ static int virtio_pmem_probe(struct virtio_device *vdev) > goto out_err; > } > > + mutex_init(&vpmem->flush_lock); > vpmem->vdev = vdev; > vdev->priv = vpmem; > err = init_vq(vpmem); > diff --git a/drivers/nvdimm/virtio_pmem.h b/drivers/nvdimm/virtio_pmem.h > index 0dddefe594c4..f72cf17f9518 100644 > --- a/drivers/nvdimm/virtio_pmem.h > +++ b/drivers/nvdimm/virtio_pmem.h > @@ -13,6 +13,7 @@ > #include > #include > #include > +#include > #include > > struct virtio_pmem_request { > @@ -35,6 +36,9 @@ struct virtio_pmem { > /* Virtio pmem request queue */ > struct virtqueue *req_vq; > > + /* Serialize flush requests to the device. */ > + struct mutex flush_lock; > + > /* nvdimm bus registers virtio pmem device */ > struct nvdimm_bus *nvdimm_bus; > struct nvdimm_bus_descriptor nd_desc; > -- > 2.52.0