Message ID | 20240815005704.2331005-1-philipchen@chromium.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | virtio_pmem: Check device status before requesting flush | expand |
Philip Chen wrote: > If a pmem device is in a bad status, the driver side could wait for > host ack forever in virtio_pmem_flush(), causing the system to hang. I assume this was supposed to be v2 and you resent this as a proper v2 with a change list from v1? Ira > > Signed-off-by: Philip Chen <philipchen@chromium.org> > --- > drivers/nvdimm/nd_virtio.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/drivers/nvdimm/nd_virtio.c b/drivers/nvdimm/nd_virtio.c > index 35c8fbbba10e..3b4d07aa8447 100644 > --- a/drivers/nvdimm/nd_virtio.c > +++ b/drivers/nvdimm/nd_virtio.c > @@ -44,6 +44,15 @@ static int virtio_pmem_flush(struct nd_region *nd_region) > unsigned long flags; > int err, err1; > > + /* > + * Don't bother to send the request to the device if the device is not > + * acticated. > + */ > + if (vdev->config->get_status(vdev) & VIRTIO_CONFIG_S_NEEDS_RESET) { > + dev_info(&vdev->dev, "virtio pmem device needs a reset\n"); > + return -EIO; > + } > + > might_sleep(); > req_data = kmalloc(sizeof(*req_data), GFP_KERNEL); > if (!req_data) > -- > 2.46.0.76.ge559c4bf1a-goog >
On Mon, Aug 19, 2024 at 2:56 PM Ira Weiny <ira.weiny@intel.com> wrote: > > Philip Chen wrote: > > If a pmem device is in a bad status, the driver side could wait for > > host ack forever in virtio_pmem_flush(), causing the system to hang. > > I assume this was supposed to be v2 and you resent this as a proper v2 > with a change list from v1? Ah...yes, I'll fix it and re-send it as a v2 patch. > > Ira > > > > > Signed-off-by: Philip Chen <philipchen@chromium.org> > > --- > > drivers/nvdimm/nd_virtio.c | 9 +++++++++ > > 1 file changed, 9 insertions(+) > > > > diff --git a/drivers/nvdimm/nd_virtio.c b/drivers/nvdimm/nd_virtio.c > > index 35c8fbbba10e..3b4d07aa8447 100644 > > --- a/drivers/nvdimm/nd_virtio.c > > +++ b/drivers/nvdimm/nd_virtio.c > > @@ -44,6 +44,15 @@ static int virtio_pmem_flush(struct nd_region *nd_region) > > unsigned long flags; > > int err, err1; > > > > + /* > > + * Don't bother to send the request to the device if the device is not > > + * acticated. > > + */ > > + if (vdev->config->get_status(vdev) & VIRTIO_CONFIG_S_NEEDS_RESET) { > > + dev_info(&vdev->dev, "virtio pmem device needs a reset\n"); > > + return -EIO; > > + } > > + > > might_sleep(); > > req_data = kmalloc(sizeof(*req_data), GFP_KERNEL); > > if (!req_data) > > -- > > 2.46.0.76.ge559c4bf1a-goog > > > >
Philip Chen wrote: > On Mon, Aug 19, 2024 at 2:56 PM Ira Weiny <ira.weiny@intel.com> wrote: > > > > Philip Chen wrote: > > > If a pmem device is in a bad status, the driver side could wait for > > > host ack forever in virtio_pmem_flush(), causing the system to hang. > > > > I assume this was supposed to be v2 and you resent this as a proper v2 > > with a change list from v1? > Ah...yes, I'll fix it and re-send it as a v2 patch. Wait didn't you already do that? Wasn't this v2? https://lore.kernel.org/all/20240815010337.2334245-1-philipchen@chromium.org/ Ira
Hi, On Tue, Aug 20, 2024 at 7:23 AM Ira Weiny <ira.weiny@intel.com> wrote: > > Philip Chen wrote: > > On Mon, Aug 19, 2024 at 2:56 PM Ira Weiny <ira.weiny@intel.com> wrote: > > > > > > Philip Chen wrote: > > > > If a pmem device is in a bad status, the driver side could wait for > > > > host ack forever in virtio_pmem_flush(), causing the system to hang. > > > > > > I assume this was supposed to be v2 and you resent this as a proper v2 > > > with a change list from v1? > > Ah...yes, I'll fix it and re-send it as a v2 patch. > > Wait didn't you already do that? Wasn't this v2? Yes, but somehow the patch didn't go to my inbox. (Maybe it's because there is no code change between v1 and v2?) So I resent another v2 (with some minor change to the comment): https://lore.kernel.org/all/20240820172256.903251-1-philipchen@chromium.org/ Please take a look. > > https://lore.kernel.org/all/20240815010337.2334245-1-philipchen@chromium.org/ > > Ira
diff --git a/drivers/nvdimm/nd_virtio.c b/drivers/nvdimm/nd_virtio.c index 35c8fbbba10e..3b4d07aa8447 100644 --- a/drivers/nvdimm/nd_virtio.c +++ b/drivers/nvdimm/nd_virtio.c @@ -44,6 +44,15 @@ static int virtio_pmem_flush(struct nd_region *nd_region) unsigned long flags; int err, err1; + /* + * Don't bother to send the request to the device if the device is not + * acticated. + */ + if (vdev->config->get_status(vdev) & VIRTIO_CONFIG_S_NEEDS_RESET) { + dev_info(&vdev->dev, "virtio pmem device needs a reset\n"); + return -EIO; + } + might_sleep(); req_data = kmalloc(sizeof(*req_data), GFP_KERNEL); if (!req_data)
If a pmem device is in a bad status, the driver side could wait for host ack forever in virtio_pmem_flush(), causing the system to hang. Signed-off-by: Philip Chen <philipchen@chromium.org> --- drivers/nvdimm/nd_virtio.c | 9 +++++++++ 1 file changed, 9 insertions(+)