diff --git a/sys/geom/geom_io.c b/sys/geom/geom_io.c
index 73895b30f7..64e095fe43 100644
--- a/sys/geom/geom_io.c
+++ b/sys/geom/geom_io.c
@@ -1004,6 +1004,16 @@ g_delete_data(struct g_consumer *cp, off_t offset, off_t length)
 	bp->bio_data = NULL;
 	g_io_request(bp, cp);
 	error = biowait(bp, "gdelete");
+	if ((error == 0) && (bp->bio_length == 0)) {
+		/*
+		 * g_io_request() has a special handling when processing
+		 * requests to the sector immediately after providers
+		 * media boundary. Success is returned for such requests,
+		 * with bio_length set to 0. Translate this into proper
+		 * EIO.
+		 */
+		error = EIO;
+	}
 	g_destroy_bio(bp);
 	return (error);
 }
