[PATCH] 9p/xen: fix init sequence

Alexander Merritt posted 1 patch 2 weeks, 3 days ago
Failed in applying to current master (apply log)
There is a newer version of this series
net/9p/trans_xen.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
[PATCH] 9p/xen: fix init sequence
Posted by Alexander Merritt 2 weeks, 3 days ago
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
Re: [PATCH] 9p/xen: fix init sequence
Posted by Dominique Martinet 2 weeks, 1 day ago
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
Re: [PATCH] 9p/xen: fix init sequence
Posted by Juergen Gross 2 weeks, 1 day ago
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
Re: [PATCH] 9p/xen: fix init sequence
Posted by Jürgen Groß 2 weeks, 1 day ago
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