svn commit: r309136 - head/sys/dev/hyperv/vmbus
Sepherosa Ziehau
sephe at FreeBSD.org
Fri Nov 25 07:41:43 UTC 2016
Author: sephe
Date: Fri Nov 25 07:41:42 2016
New Revision: 309136
URL: https://svnweb.freebsd.org/changeset/base/309136
Log:
hyperv/vmbus: Don't free the bufring if its GPADL can't be disconnected.
MFC after: 1 week
Sponsored by: Microsoft
Differential Revision: https://reviews.freebsd.org/D8570
Modified:
head/sys/dev/hyperv/vmbus/vmbus_chan.c
Modified: head/sys/dev/hyperv/vmbus/vmbus_chan.c
==============================================================================
--- head/sys/dev/hyperv/vmbus/vmbus_chan.c Fri Nov 25 07:24:11 2016 (r309135)
+++ head/sys/dev/hyperv/vmbus/vmbus_chan.c Fri Nov 25 07:41:42 2016 (r309136)
@@ -814,8 +814,22 @@ vmbus_chan_close_internal(struct vmbus_c
/*
* Disconnect the TX+RX bufrings from this channel.
*/
- if (chan->ch_bufring_gpadl) {
- vmbus_chan_gpadl_disconnect(chan, chan->ch_bufring_gpadl);
+ if (chan->ch_bufring_gpadl != 0) {
+ int error1;
+
+ error1 = vmbus_chan_gpadl_disconnect(chan,
+ chan->ch_bufring_gpadl);
+ if (error1) {
+ /*
+ * XXX
+ * The bufring GPADL is still connected; abandon
+ * this bufring, instead of having mysterious
+ * crash or trashed data later on.
+ */
+ vmbus_chan_printf(chan, "chan%u bufring GPADL "
+ "is still connected after close\n", chan->ch_id);
+ chan->ch_bufring = NULL;
+ }
chan->ch_bufring_gpadl = 0;
}
More information about the svn-src-all
mailing list