diff --git a/Doc/library/collections.rst b/Doc/library/collections.rst
index e89da35..092221f 100644
--- a/Doc/library/collections.rst
+++ b/Doc/library/collections.rst
@@ -477,8 +477,8 @@
 
         Insert *x* into the deque at position *i*.
 
-        If the insertion causes a bounded deque to grow beyond *maxlen*, the
-        rightmost element is then removed to restore the size limit.
+        If the insertion would cause a bounded deque to grow beyond *maxlen*,
+        an :exc:`IndexError` is raised.
 
         .. versionadded:: 3.5
 
diff --git a/Lib/test/test_deque.py b/Lib/test/test_deque.py
index d2a4633..2ca508d 100644
--- a/Lib/test/test_deque.py
+++ b/Lib/test/test_deque.py
@@ -304,19 +304,20 @@
             s.insert(i, 'Z')
             self.assertEqual(list(d), s)
 
-    def test_index_bug_26194(self):
+    def test_insert_bug_26194(self):
         data = 'ABC'
-        for i in range(len(data) + 1):
-            d = deque(data, len(data))
-            d.insert(i, None)
-            s = list(data)
-            s.insert(i, None)
-            s.pop()
-            self.assertEqual(list(d), s)
-            if i < len(data):
-                self.assertIsNone(d[i])
+        d = deque(data, maxlen=len(data))
+        with self.assertRaises(IndexError):
+            d.insert(2, None)
+
+        elements = 'ABCDEFGHI'
+        for i in range(-len(elements), len(elements)):
+            d = deque(elements, maxlen=len(elements)+1)
+            d.insert(i, 'Z')
+            if i >= 0:
+                self.assertEqual(d[i], 'Z')
             else:
-                self.assertTrue(None not in d)
+                self.assertEqual(d[i-1], 'Z')
 
     def test_imul(self):
         for n in (-10, -1, 0, 1, 2, 10, 1000):
diff --git a/Misc/NEWS b/Misc/NEWS
index a95d2a0..ba1f4de 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -22,8 +22,8 @@
   compiler issues.
 
 - Issue #26194:  Deque.insert() gave odd results for bounded deques that had
-  reached their maximum size.  Now, the insert will happen normally and then
-  any overflowing element will be truncated from the right side.
+  reached their maximum size.  Now an IndexError will be raised when attempting
+  to insert into a full deque.
 
 - Issue #25843: When compiling code, don't merge constants if they are equal
   but have a different types. For example, ``f1, f2 = lambda: 1, lambda: 1.0``
diff --git a/Modules/_collectionsmodule.c b/Modules/_collectionsmodule.c
index b9c4f3b..10fbcfe 100644
--- a/Modules/_collectionsmodule.c
+++ b/Modules/_collectionsmodule.c
@@ -973,16 +973,13 @@
     Py_ssize_t index;
     Py_ssize_t n = Py_SIZE(deque);
     PyObject *value;
-    PyObject *oldvalue;
     PyObject *rv;
 
     if (!PyArg_ParseTuple(args, "nO:insert", &index, &value))
         return NULL;
     if (deque->maxlen == Py_SIZE(deque)) {
-        if (index >= deque->maxlen || Py_SIZE(deque) == 0)
-            Py_RETURN_NONE;
-        oldvalue = deque_pop(deque, NULL);
-        Py_DECREF(oldvalue);
+        PyErr_SetString(PyExc_IndexError, "deque already at its maximum size");
+        return NULL;
     }
     if (index >= n)
         return deque_append(deque, value);
