net/9p/trans_xen.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-)
From: Alex Zenla <alex@edera.dev>
Large amount of mount hangs observed during hotplugging of 9pfs devices. The
9pfs Xen driver attempts to initialize itself more than once, causing the
frontend and backend to disagree: the backend listens on a channel that the
frontend does not send on, resulting in stalled processing.
Only allow initialization of 9p frontend once.
Fixes: c15fe55d14b3b ("9p/xen: fix connection sequence")
Signed-off-by: Alex Zenla <alex@edera.dev>
Signed-off-by: Alexander Merritt <alexander@edera.dev>
Signed-off-by: Ariadne Conill <ariadne@ariadne.space>
---
net/9p/trans_xen.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/net/9p/trans_xen.c b/net/9p/trans_xen.c
index dfdbe1ca5338..0304e8a1616d 100644
--- a/net/9p/trans_xen.c
+++ b/net/9p/trans_xen.c
@@ -465,6 +465,7 @@ static int xen_9pfs_front_init(struct xenbus_device *dev)
goto error;
}
+ xenbus_switch_state(dev, XenbusStateInitialised);
return 0;
error_xenbus:
@@ -512,8 +513,10 @@ static void xen_9pfs_front_changed(struct xenbus_device *dev,
break;
case XenbusStateInitWait:
- if (!xen_9pfs_front_init(dev))
- xenbus_switch_state(dev, XenbusStateInitialised);
+ if (dev->state != XenbusStateInitialising)
+ break;
+
+ xen_9pfs_front_init(dev);
break;
case XenbusStateConnected:
--
2.43.0
Alexander Merritt wrote on Tue, Nov 19, 2024 at 09:16:33PM +0000: > From: Alex Zenla <alex@edera.dev> > > Large amount of mount hangs observed during hotplugging of 9pfs devices. The > 9pfs Xen driver attempts to initialize itself more than once, causing the > frontend and backend to disagree: the backend listens on a channel that the > frontend does not send on, resulting in stalled processing. > > Only allow initialization of 9p frontend once. I'm not familiar with the xen bringup so I don't understand how the patch guarantees this -- otherend_changed calls are guaranted to be seralized for a given frontend? I guess that at least it guaratees that we won't restart the init process after init's been done on our side and before the remote side sends the ack, so if you've all tested this I'll just trust you and Juergen's review and take it as an improvement. Queued to 9p-next; will send this to Linus in ~1week Thanks! -- Dominique
On 21.11.24 13:23, Dominique Martinet wrote: > Alexander Merritt wrote on Tue, Nov 19, 2024 at 09:16:33PM +0000: >> From: Alex Zenla <alex@edera.dev> >> >> Large amount of mount hangs observed during hotplugging of 9pfs devices. The >> 9pfs Xen driver attempts to initialize itself more than once, causing the >> frontend and backend to disagree: the backend listens on a channel that the >> frontend does not send on, resulting in stalled processing. >> >> Only allow initialization of 9p frontend once. > > I'm not familiar with the xen bringup so I don't understand how the > patch guarantees this -- otherend_changed calls are guaranted to be > seralized for a given frontend? Yes. They are all executed by a single kernel thread. Juergen
On 19.11.24 22:16, Alexander Merritt wrote: > From: Alex Zenla <alex@edera.dev> > > Large amount of mount hangs observed during hotplugging of 9pfs devices. The > 9pfs Xen driver attempts to initialize itself more than once, causing the > frontend and backend to disagree: the backend listens on a channel that the > frontend does not send on, resulting in stalled processing. > > Only allow initialization of 9p frontend once. > > Fixes: c15fe55d14b3b ("9p/xen: fix connection sequence") > Signed-off-by: Alex Zenla <alex@edera.dev> > Signed-off-by: Alexander Merritt <alexander@edera.dev> > Signed-off-by: Ariadne Conill <ariadne@ariadne.space> Reviewed-by: Juergen Gross <jgross@suse.com> Juergen
© 2016 - 2024 Red Hat, Inc.