Drivers: hv: vss: run only on supported host versions
PATCH 1/1 Drivers: hv: vss: run only on supported host versions
The Backup integration service on WS2012 has appearently trouble to negotiate with a guest which does not support the provided util version. Currently the VSS driver supports only version 5/0. A WS2012 offers only version 1/x and 3/x, and vmbus_prep_negotiate_resp correctly returns an empty icframe_vercnt/icmsg_vercnt. But the host ignores that and continues to send ICMSGTYPE_NEGOTIATE messages. The result are weird errors during boot and general misbehaviour.
Check the Windows version to work around the host bug, skip hv_vss_init on WS2012 and older.
--- drivers/hv/hv_snapshot.c | 10 ++++++++++ 1 file changed, 10 insertions(+)
drivers/hv/hv_snapshot.c +10 -0
@@ -331,6 +331,16 @@ static void vss_on_reset(void)int hv_vss_init (struct hv_util_service *srv) { +switch (vmbus_proto_version) { +case VERSION_WS2008 : +case VERSION_WIN7 : +case VERSION_WIN8 : +pr_warn ("Integration service 'Backup (volume snapshot)'" +" not supported on this host version.\n" ); +return -ENOTSUPP ; +default : +break ; + } recv_buffer = srv->recv_buffer;/*
Quoted 21 lines · Olaf Hering
The Backup integration service on WS2012 has appearently trouble to negotiate with a guest which does not support the provided util version. Currently the VSS driver supports only version 5/0. A WS2012 offers only version 1/x and 3/x, and
vmbus_prep_negotiate_respcorrectly returns an empty icframe_vercnt/icmsg_vercnt. But the host ignores that and continues to sendICMSGTYPE_NEGOTIATEmessages. The result are weird errors during boot and general misbehaviour.Check the Windows version to work around the host bug, skip
hv_vss_initon WS2012 and older.Signed-off-by Olaf Hering <[email protected]>--- drivers/hv/hv_snapshot.c | 10 ++++++++++ 1 file changed, 10 insertions(+)drivers/hv/hv_snapshot.c +0
-0
drivers/hv/hv_snapshot.c static void vss_on_reset(void) · line 337
Quoted 7 lines
drivers/hv/hv_snapshot.c +4
-0@@ -331,6 +331,16 @@ static void vss_on_reset(void)int hv_vss_init (struct hv_util_service *srv) { +switch (vmbus_proto_version) { +case VERSION_WS2008 : +case VERSION_WIN7 : +case VERSION_WIN8 :
Wouldn't it be better to simplify it to
if (vmbus_proto_version < VERSION_WIN8_1) {
pr_warn();
return ...
}E.g. there was a patch for storvsc some time ago:
commit 6ee5c61535a2df807069145970d3e7fa492a3fac
Author: Keith Mange <[email protected]> Date: Thu Aug 13 08:43:46 2015 -0700
storvsc: Rather than look for sets of specific protocol versions, make decisions based on ranges.
Quoted 13 lines
drivers/hv/hv_snapshot.c +6
-0+pr_warn ("Integration service 'Backup (volume snapshot)'" +" not supported on this host version.\n" ); +return -ENOTSUPP ; +default : +break ; + } recv_buffer = srv->recv_buffer;/* _______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel
Signature · 1 line
Vitaly