Backing out 86dc014cdd74. Not ready yet
diff --git a/Modules/_io/bufferedio.c b/Modules/_io/bufferedio.c
index dc723b1..8a9ae47 100644
--- a/Modules/_io/bufferedio.c
+++ b/Modules/_io/bufferedio.c
@@ -1157,20 +1157,9 @@
     if (!PyArg_ParseTuple(args, "O|i:seek", &targetobj, &whence)) {
         return NULL;
     }
-
-    /* Do some error checking instead of trusting OS 'seek()'
-    ** error detection, just in case.
-    */
-    if ((whence < 0 || whence >2)
-#ifdef SEEK_HOLE
-        && (whence != SEEK_HOLE)
-#endif
-#ifdef SEEK_DATA
-        && (whence != SEEK_DATA)
-#endif
-        ) {
+    if (whence < 0 || whence > 2) {
         PyErr_Format(PyExc_ValueError,
-                     "whence value %d unsupported", whence);
+                     "whence must be between 0 and 2, not %d", whence);
         return NULL;
     }
 
@@ -1183,11 +1172,7 @@
     if (target == -1 && PyErr_Occurred())
         return NULL;
 
-    /* SEEK_SET and SEEK_CUR are special because we could seek inside the
-       buffer. Other whence values must be managed without this optimization.
-       Some Operating Systems can provide additional values, like
-       SEEK_HOLE/SEEK_DATA. */
-    if (((whence == 0) || (whence == 1)) && self->readable) {
+    if (whence != 2 && self->readable) {
         Py_off_t current, avail;
         /* Check if seeking leaves us inside the current buffer,
            so as to return quickly if possible. Also, we needn't take the
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 8254f81..92a6277 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -11227,13 +11227,6 @@
 #endif
 
 
-#ifdef SEEK_HOLE
-    if (ins(d, "SEEK_HOLE", (long)SEEK_HOLE)) return -1;
-#endif
-#ifdef SEEK_DATA
-    if (ins(d, "SEEK_DATA", (long)SEEK_DATA)) return -1;
-#endif
-
 /* MS Windows */
 #ifdef O_NOINHERIT
     /* Don't inherit in child processes. */