svn commit: r309139 - head/sys/dev/hyperv/vmbus

Sepherosa Ziehau sephe at FreeBSD.org
Fri Nov 25 08:57:54 UTC 2016


Author: sephe
Date: Fri Nov 25 08:57:52 2016
New Revision: 309139
URL: https://svnweb.freebsd.org/changeset/base/309139

Log:
  hyperv/vmbus: Propagate close error.
  
  MFC after:	1 week
  Sponsored by:	Microsoft
  Differential Revision:	https://reviews.freebsd.org/D8599

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 08:31:13 2016	(r309138)
+++ head/sys/dev/hyperv/vmbus/vmbus_chan.c	Fri Nov 25 08:57:52 2016	(r309139)
@@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$");
 static void			vmbus_chan_update_evtflagcnt(
 				    struct vmbus_softc *,
 				    const struct vmbus_channel *);
-static void			vmbus_chan_close_internal(
+static int			vmbus_chan_close_internal(
 				    struct vmbus_channel *);
 static int			vmbus_chan_sysctl_mnf(SYSCTL_HANDLER_ARGS);
 static void			vmbus_chan_sysctl_create(
@@ -739,7 +739,7 @@ vmbus_chan_set_chmap(struct vmbus_channe
 	chan->ch_vmbus->vmbus_chmap[chan->ch_id] = chan;
 }
 
-static void
+static int
 vmbus_chan_close_internal(struct vmbus_channel *chan)
 {
 	struct vmbus_softc *sc = chan->ch_vmbus;
@@ -765,7 +765,7 @@ vmbus_chan_close_internal(struct vmbus_c
 			vmbus_chan_printf(chan, "chan%u not opened\n",
 			    chan->ch_id);
 		}
-		return;
+		return (0);
 	}
 
 	/*
@@ -792,6 +792,7 @@ vmbus_chan_close_internal(struct vmbus_c
 		vmbus_chan_printf(chan,
 		    "can not get msg hypercall for chclose(chan%u)\n",
 		    chan->ch_id);
+		error = ENXIO;
 		goto disconnect;
 	}
 
@@ -831,6 +832,11 @@ disconnect:
 			vmbus_chan_printf(chan, "chan%u bufring GPADL "
 			    "is still connected after close\n", chan->ch_id);
 			chan->ch_bufring = NULL;
+			/*
+			 * Give caller a hint that the bufring GPADL is
+			 * still connected.
+			 */
+			error = EISCONN;
 		}
 		chan->ch_bufring_gpadl = 0;
 	}
@@ -842,6 +848,7 @@ disconnect:
 		hyperv_dmamem_free(&chan->ch_bufring_dma, chan->ch_bufring);
 		chan->ch_bufring = NULL;
 	}
+	return (error);
 }
 
 /*


More information about the svn-src-all mailing list