diff --git a/infra/bots/recipes/test.py b/infra/bots/recipes/test.py
index dfe9833..0ee4ef2 100644
--- a/infra/bots/recipes/test.py
+++ b/infra/bots/recipes/test.py
@@ -195,8 +195,7 @@
       configs = [x.replace(old, new) for x in configs]
       # We also test non-msaa instanced.
       configs.append(new)
-    elif 'MacMini7.1' in bot and 'TSAN' not in bot:
-      # The TSAN bot disables GL buffer mapping which is required for inst.
+    elif 'MacMini7.1' in bot:
       configs.extend([gl_prefix + 'inst'])
 
     # CommandBuffer bot *only* runs the command_buffer config.
diff --git a/src/gpu/GrResourceProvider.cpp b/src/gpu/GrResourceProvider.cpp
index d68a5e6..d50bb01 100644
--- a/src/gpu/GrResourceProvider.cpp
+++ b/src/gpu/GrResourceProvider.cpp
@@ -330,17 +330,13 @@
     size_t bufferSize = patternSize * reps * sizeof(uint16_t);
 
     // This is typically used in GrMeshDrawOps, so we assume kNoPendingIO.
-    sk_sp<GrBuffer> buffer(this->createBuffer(bufferSize, kIndex_GrBufferType,
-                                              kStatic_GrAccessPattern, kNoPendingIO_Flag));
+    GrBuffer* buffer = this->createBuffer(bufferSize, kIndex_GrBufferType, kStatic_GrAccessPattern,
+                                          kNoPendingIO_Flag);
     if (!buffer) {
         return nullptr;
     }
-    uint16_t* data = (uint16_t*) buffer->map();
-    SkAutoTArray<uint16_t> temp;
-    if (!data) {
-        temp.reset(reps * patternSize);
-        data = temp.get();
-    }
+
+    SkAutoTArray<uint16_t> data(reps * patternSize);
     for (int i = 0; i < reps; ++i) {
         int baseIdx = i * patternSize;
         uint16_t baseVert = (uint16_t)(i * vertCount);
@@ -348,15 +344,14 @@
             data[baseIdx+j] = baseVert + pattern[j];
         }
     }
-    if (temp.get()) {
-        if (!buffer->updateData(data, bufferSize)) {
-            return nullptr;
-        }
-    } else {
-        buffer->unmap();
+
+    if (!buffer->updateData(data.get(), bufferSize)) {
+        buffer->unref();
+        return nullptr;
     }
-    this->assignUniqueKeyToResource(key, buffer.get());
-    return buffer.release();
+
+    this->assignUniqueKeyToResource(key, buffer);
+    return buffer;
 }
 
 static constexpr int kMaxQuads = 1 << 12;  // max possible: (1 << 14) - 1;
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index 94c5f2e..af04dc7 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -481,14 +481,6 @@
         }
     }
 
-#if defined(__has_feature)
-#if defined(SK_BUILD_FOR_MAC) && __has_feature(thread_sanitizer)
-    // See skbug.com/7058
-    fMapBufferType = kNone_MapBufferType;
-    fMapBufferFlags = kNone_MapFlags;
-#endif
-#endif
-
     // We found that the Galaxy J5 with an Adreno 306 running 6.0.1 has a bug where
     // GL_INVALID_OPERATION thrown by glDrawArrays when using a buffer that was mapped. The same bug
     // did not reproduce on a Nexus7 2013 with a 320 running Android M with driver 127.0. It's
diff --git a/src/gpu/instanced/GLInstancedRendering.cpp b/src/gpu/instanced/GLInstancedRendering.cpp
index 9d43d05..b2eb9eb 100644
--- a/src/gpu/instanced/GLInstancedRendering.cpp
+++ b/src/gpu/instanced/GLInstancedRendering.cpp
@@ -37,8 +37,7 @@
     // This method is only intended to be used for initializing fInstancedSupport in the caps.
     SkASSERT(GrCaps::InstancedSupport::kNone == glCaps.instancedSupport());
     if (!glCaps.vertexArrayObjectSupport() ||
-        (!glCaps.drawIndirectSupport() && !glCaps.drawInstancedSupport()) ||
-        GrGLCaps::kNone_MapBufferType == glCaps.mapBufferType()) {
+        (!glCaps.drawIndirectSupport() && !glCaps.drawInstancedSupport())) {
         return GrCaps::InstancedSupport::kNone;
     }
     return InstanceProcessor::CheckSupport(*glCaps.shaderCaps(), glCaps);
diff --git a/tests/TransferPixelsTest.cpp b/tests/TransferPixelsTest.cpp
index b59495f..722707a 100755
--- a/tests/TransferPixelsTest.cpp
+++ b/tests/TransferPixelsTest.cpp
@@ -64,10 +64,6 @@
 
 void basic_transfer_test(skiatest::Reporter* reporter, GrContext* context, GrPixelConfig config,
                          GrSurfaceOrigin origin, bool renderTarget) {
-    if (GrCaps::kNone_MapFlags == context->caps()->mapBufferFlags()) {
-        return;
-    }
-
     // set up the data
     const int kTextureWidth = 16;
     const int kTextureHeight = 16;
