[blobfs] Trim down dependencies, add Vmoid Registry interface

ZX-4003 #done

Change-Id: I55a1deb4a01c8b4922d4bb8ba014fde9b9c42656
diff --git a/zircon/system/ulib/blobfs/include/blobfs/allocator.h b/zircon/system/ulib/blobfs/include/blobfs/allocator.h
index 27c50be..783a527 100644
--- a/zircon/system/ulib/blobfs/include/blobfs/allocator.h
+++ b/zircon/system/ulib/blobfs/include/blobfs/allocator.h
@@ -16,6 +16,7 @@
 #include <blobfs/format.h>
 #include <blobfs/iterator/extent-iterator.h>
 #include <blobfs/node-reserver.h>
+#include <blobfs/vmoid-registry.h>
 #include <fbl/algorithm.h>
 #include <fbl/function.h>
 #include <fbl/vector.h>
@@ -31,7 +32,7 @@
 using BlockRegion = fuchsia_blobfs_BlockRegion;
 
 // An interface which controls actual access to the underlying storage.
-class SpaceManager {
+class SpaceManager : public VmoidRegistry {
 public:
     virtual ~SpaceManager() = default;
 
@@ -42,12 +43,6 @@
 
     // Adds space for |nblocks| blocks to |map|, extending the volume if necessary.
     virtual zx_status_t AddBlocks(uint64_t nblocks, RawBitmap* map) = 0;
-
-    // Allocates a vmoid registering a VMO with the underlying block device.
-    virtual zx_status_t AttachVmo(const zx::vmo& vmo, vmoid_t* out) = 0;
-
-    // Releases an allocated vmoid.
-    virtual zx_status_t DetachVmo(vmoid_t vmoid) = 0;
 };
 
 // Allocates and frees both block and node entries.
diff --git a/zircon/system/ulib/blobfs/include/blobfs/ring-buffer.h b/zircon/system/ulib/blobfs/include/blobfs/ring-buffer.h
index f6f50e7..94c3a71 100644
--- a/zircon/system/ulib/blobfs/include/blobfs/ring-buffer.h
+++ b/zircon/system/ulib/blobfs/include/blobfs/ring-buffer.h
@@ -177,7 +177,7 @@
     ~RingBuffer() = default;
 
     // Initializes the buffer with |blocks| blocks of size kBlobfsBlockSize.
-    static zx_status_t Create(SpaceManager* space_manager, const size_t blocks,
+    static zx_status_t Create(VmoidRegistry* vmoid_registry, const size_t blocks,
                               const char* label, std::unique_ptr<RingBuffer>* out);
 
     // Reserves space for |blocks| contiguous blocks in the circular buffer.
diff --git a/zircon/system/ulib/blobfs/include/blobfs/vmo-buffer.h b/zircon/system/ulib/blobfs/include/blobfs/vmo-buffer.h
index c3845f83a..092778b 100644
--- a/zircon/system/ulib/blobfs/include/blobfs/vmo-buffer.h
+++ b/zircon/system/ulib/blobfs/include/blobfs/vmo-buffer.h
@@ -10,8 +10,7 @@
 
 #include <utility>
 
-// TODO(ZX-4003): Required for SpaceManager interface. Can we shrink this dependency?
-#include <blobfs/allocator.h>
+#include <blobfs/vmoid-registry.h>
 #include <lib/fzl/owned-vmo-mapper.h>
 
 namespace blobfs {
@@ -35,7 +34,7 @@
     // underlying storage device.
     //
     // Should only be called on VmoBuffers which have not been initialized already.
-    zx_status_t Initialize(SpaceManager* space_manager, size_t blocks, const char* label);
+    zx_status_t Initialize(VmoidRegistry* vmoid_registry, size_t blocks, const char* label);
 
     // Returns the total amount of pending blocks which may be buffered.
     size_t capacity() const { return capacity_; }
@@ -52,7 +51,7 @@
 private:
     void Reset();
 
-    SpaceManager* space_manager_ = nullptr;
+    VmoidRegistry* vmoid_registry_ = nullptr;
     fzl::OwnedVmoMapper mapper_;
     vmoid_t vmoid_ = VMOID_INVALID;
     size_t capacity_ = 0;
diff --git a/zircon/system/ulib/blobfs/include/blobfs/vmoid-registry.h b/zircon/system/ulib/blobfs/include/blobfs/vmoid-registry.h
new file mode 100644
index 0000000..b49d3a4
--- /dev/null
+++ b/zircon/system/ulib/blobfs/include/blobfs/vmoid-registry.h
@@ -0,0 +1,25 @@
+// Copyright 2019 The Fuchsia Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#pragma once
+
+#include <lib/zx/vmo.h>
+#include <zircon/device/block.h>
+#include <zircon/types.h>
+
+namespace blobfs {
+
+// An interface which controls attaching and detaching VMOs with the underlying device.
+class VmoidRegistry {
+public:
+    virtual ~VmoidRegistry() = default;
+
+    // Allocates a vmoid registering a VMO with the underlying block device.
+    virtual zx_status_t AttachVmo(const zx::vmo& vmo, vmoid_t* out) = 0;
+
+    // Releases an allocated vmoid.
+    virtual zx_status_t DetachVmo(vmoid_t vmoid) = 0;
+};
+
+} // namespace blobfs
diff --git a/zircon/system/ulib/blobfs/ring-buffer.cpp b/zircon/system/ulib/blobfs/ring-buffer.cpp
index 04cb190..247f291 100644
--- a/zircon/system/ulib/blobfs/ring-buffer.cpp
+++ b/zircon/system/ulib/blobfs/ring-buffer.cpp
@@ -4,9 +4,12 @@
 
 #include <blobfs/ring-buffer.h>
 
+#include <algorithm>
 #include <utility>
 
+#include <blobfs/format.h>
 #include <fbl/auto_lock.h>
+#include <fs/trace.h>
 
 namespace blobfs {
 
@@ -220,10 +223,10 @@
     return buffer_->MutableData((start_ + index) % buffer_->capacity());
 }
 
-zx_status_t RingBuffer::Create(SpaceManager* space_manager, size_t blocks, const char* label,
+zx_status_t RingBuffer::Create(VmoidRegistry* vmoid_registry, size_t blocks, const char* label,
                                std::unique_ptr<RingBuffer>* out) {
     VmoBuffer buffer;
-    zx_status_t status = buffer.Initialize(space_manager, blocks, label);
+    zx_status_t status = buffer.Initialize(vmoid_registry, blocks, label);
     if (status != ZX_OK) {
         FS_TRACE_ERROR("RingBuffer: Failed to create internal buffer\n");
         return status;
diff --git a/zircon/system/ulib/blobfs/test/ring-buffer-test.cpp b/zircon/system/ulib/blobfs/test/ring-buffer-test.cpp
index 7b3e130..ff911c7 100644
--- a/zircon/system/ulib/blobfs/test/ring-buffer-test.cpp
+++ b/zircon/system/ulib/blobfs/test/ring-buffer-test.cpp
@@ -5,6 +5,8 @@
 #include <blobfs/ring-buffer.h>
 #include <blobfs/unbuffered-operations-builder.h>
 
+#include <blobfs/format.h>
+#include <blobfs/unbuffered-operations-builder.h>
 #include <lib/zx/vmo.h>
 #include <zircon/assert.h>
 #include <zxtest/zxtest.h>
@@ -12,18 +14,13 @@
 namespace blobfs {
 namespace {
 
-// TODO(smklein): This interface is larger than necessary. Can we reduce it
-// to just "attach/detach vmo"?
-class MockSpaceManager : public SpaceManager {
+class MockVmoidRegistry : public VmoidRegistry {
 public:
     vmoid_t default_vmoid() const {
         return 1;
     }
 
 private:
-    const Superblock& Info() const final {
-        ZX_ASSERT_MSG(false, "Test should not invoke function: %s\n", __FUNCTION__);
-    }
     zx_status_t AttachVmo(const zx::vmo& vmo, vmoid_t* out) override {
         *out = default_vmoid();
         return ZX_OK;
@@ -32,46 +29,40 @@
         EXPECT_EQ(default_vmoid(), vmoid);
         return ZX_OK;
     }
-    zx_status_t AddInodes(fzl::ResizeableVmoMapper* node_map) final {
-        ZX_ASSERT_MSG(false, "Test should not invoke function: %s\n", __FUNCTION__);
-    }
-    zx_status_t AddBlocks(size_t nblocks, RawBitmap* block_map) final {
-        ZX_ASSERT_MSG(false, "Test should not invoke function: %s\n", __FUNCTION__);
-    }
 };
 
 TEST(RingBufferTest, EmptyRingBuffer) {
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
-    EXPECT_EQ(ZX_ERR_INVALID_ARGS, RingBuffer::Create(&space_manager, 0, "test-buffer", &buffer));
+    EXPECT_EQ(ZX_ERR_INVALID_ARGS, RingBuffer::Create(&vmoid_registry, 0, "test-buffer", &buffer));
 }
 
 TEST(RingBufferTest, MakeRingBuffer) {
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
     const size_t kBlocks = 5;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kBlocks, "test-buffer", &buffer));
     EXPECT_EQ(kBlocks, buffer->capacity());
 }
 
 TEST(RingBufferTest, ReserveOne) {
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
     const size_t kBlocks = 5;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kBlocks, "test-buffer", &buffer));
     RingBufferReservation reservation;
     EXPECT_EQ(0, reservation.length());
     EXPECT_OK(buffer->Reserve(1, &reservation));
-    EXPECT_EQ(space_manager.default_vmoid(), reservation.vmoid());
+    EXPECT_EQ(vmoid_registry.default_vmoid(), reservation.vmoid());
     EXPECT_EQ(0, reservation.start());
     EXPECT_EQ(1, reservation.length());
 }
 
 TEST(RingBufferTest, ReserveMove) {
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
     const size_t kBlocks = 5;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kBlocks, "test-buffer", &buffer));
     RingBufferReservation reservation_a;
     ASSERT_OK(buffer->Reserve(1, &reservation_a));
     EXPECT_EQ(1, reservation_a.length());
@@ -88,10 +79,10 @@
 }
 
 TEST(RingBufferTest, ReserveAndFreeOutOfOrder) {
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
     const size_t kBlocks = 10;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kBlocks, "test-buffer", &buffer));
     RingBufferReservation reservations[4];
     ASSERT_OK(buffer->Reserve(1, &reservations[0]));
     ASSERT_OK(buffer->Reserve(2, &reservations[1]));
@@ -189,9 +180,9 @@
     builder.Add(operation);
 
     const size_t kRingBufferBlocks = 5;
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kRingBufferBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kRingBufferBlocks, "test-buffer", &buffer));
 
     RingBufferRequests request;
     ASSERT_NO_FATAL_FAILURES(ReserveAndCopyRequests(buffer, builder.TakeOperations(), &request));
@@ -227,9 +218,9 @@
     builder.Add(operation);
 
     const size_t kRingBufferBlocks = 5;
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kRingBufferBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kRingBufferBlocks, "test-buffer", &buffer));
 
     RingBufferRequests request;
     ASSERT_NO_FATAL_FAILURES(ReserveAndCopyRequests(buffer, builder.TakeOperations(), &request));
@@ -272,9 +263,9 @@
     builder.Add(operations[1]);
 
     const size_t kRingBufferBlocks = 5;
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kRingBufferBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kRingBufferBlocks, "test-buffer", &buffer));
 
     RingBufferRequests request;
     ASSERT_NO_FATAL_FAILURES(ReserveAndCopyRequests(buffer, builder.TakeOperations(), &request));
@@ -307,9 +298,9 @@
     MakeTestVmo(kVmoBlocks, seed, &vmo);
 
     const size_t kRingBufferBlocks = 5;
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kRingBufferBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kRingBufferBlocks, "test-buffer", &buffer));
 
     UnbufferedOperationsBuilder builder;
     UnbufferedOperation operations[2];
@@ -373,9 +364,9 @@
     builder.Add(operation);
 
     const size_t kRingBufferBlocks = 3;
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kRingBufferBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kRingBufferBlocks, "test-buffer", &buffer));
 
     RingBufferRequests request;
     ASSERT_NO_FATAL_FAILURES(ReserveAndCopyRequests(buffer, builder.TakeOperations(), &request));
@@ -411,9 +402,9 @@
     builder.Add(operation);
 
     const size_t kRingBufferBlocks = 3;
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kRingBufferBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kRingBufferBlocks, "test-buffer", &buffer));
 
     RingBufferRequests request;
     ASSERT_EQ(ZX_ERR_NO_SPACE, buffer->Reserve(BlockCount(builder.TakeOperations()), nullptr));
@@ -435,9 +426,9 @@
     MakeTestVmo(kVmoBlocks, seed, &vmo);
 
     const size_t kRingBufferBlocks = 6;
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kRingBufferBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kRingBufferBlocks, "test-buffer", &buffer));
 
     UnbufferedOperationsBuilder builder;
     UnbufferedOperation operations[3];
@@ -496,9 +487,9 @@
     MakeTestVmo(kVmoBlocks, seed, &vmo);
 
     const size_t kRingBufferBlocks = 6;
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     std::unique_ptr<RingBuffer> buffer;
-    ASSERT_OK(RingBuffer::Create(&space_manager, kRingBufferBlocks, "test-buffer", &buffer));
+    ASSERT_OK(RingBuffer::Create(&vmoid_registry, kRingBufferBlocks, "test-buffer", &buffer));
 
     UnbufferedOperationsBuilder builder;
     UnbufferedOperation operations[3];
@@ -558,9 +549,9 @@
     MakeTestVmo(kVmoBlocks, seed, &vmo);
 
     const size_t kRingBufferBlocks = 4;
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     VmoBuffer vmo_buffer;
-    ASSERT_OK(vmo_buffer.Initialize(&space_manager, kRingBufferBlocks, "test-buffer"));
+    ASSERT_OK(vmo_buffer.Initialize(&vmoid_registry, kRingBufferBlocks, "test-buffer"));
     auto buffer = std::make_unique<RingBuffer>(std::move(vmo_buffer));
 
     RingBufferReservation reservations[3];
@@ -631,9 +622,9 @@
     MakeTestVmo(kVmoBlocks, seed_b, &vmo_b);
 
     const size_t kRingBufferBlocks = 5;
-    MockSpaceManager space_manager;
+    MockVmoidRegistry vmoid_registry;
     VmoBuffer vmo_buffer;
-    ASSERT_OK(vmo_buffer.Initialize(&space_manager, kRingBufferBlocks, "test-buffer"));
+    ASSERT_OK(vmo_buffer.Initialize(&vmoid_registry, kRingBufferBlocks, "test-buffer"));
     auto buffer = std::make_unique<RingBuffer>(std::move(vmo_buffer));
 
     RingBufferReservation reservation;
diff --git a/zircon/system/ulib/blobfs/test/vmo-buffer-test.cpp b/zircon/system/ulib/blobfs/test/vmo-buffer-test.cpp
index e6f0670..bb3b32f 100644
--- a/zircon/system/ulib/blobfs/test/vmo-buffer-test.cpp
+++ b/zircon/system/ulib/blobfs/test/vmo-buffer-test.cpp
@@ -3,6 +3,8 @@
 // found in the LICENSE file.
 
 #include <blobfs/vmo-buffer.h>
+
+#include <blobfs/format.h>
 #include <lib/zx/vmo.h>
 #include <zxtest/zxtest.h>
 
@@ -13,17 +15,11 @@
 const size_t kCapacity = 3;
 constexpr char kGoldenLabel[] = "test-vmo";
 
-// TODO(ZX-4003): This interface is larger than necessary. Can we reduce it
-// to just "attach/detach vmo"?
-class MockSpaceManager : public SpaceManager {
+class MockVmoidRegistry : public VmoidRegistry {
 public:
     bool detached() const { return detached_; }
 
 private:
-    const Superblock& Info() const final {
-        ZX_ASSERT_MSG(false, "Test should not invoke function: %s\n", __FUNCTION__);
-    }
-
     zx_status_t AttachVmo(const zx::vmo& vmo, vmoid_t* out) override {
         *out = kGoldenVmoid;
         return ZX_OK;
@@ -36,14 +32,6 @@
         return ZX_OK;
     }
 
-    zx_status_t AddInodes(fzl::ResizeableVmoMapper* node_map) final {
-        ZX_ASSERT_MSG(false, "Test should not invoke function: %s\n", __FUNCTION__);
-    }
-
-    zx_status_t AddBlocks(size_t nblocks, RawBitmap* block_map) final {
-        ZX_ASSERT_MSG(false, "Test should not invoke function: %s\n", __FUNCTION__);
-    }
-
     bool detached_ = false;
 };
 
@@ -54,7 +42,7 @@
 }
 
 TEST(VmoBufferTest, TestLabel) {
-    class MockManager : public MockSpaceManager {
+    class MockRegistry : public MockVmoidRegistry {
         zx_status_t AttachVmo(const zx::vmo& vmo, vmoid_t* out) final {
             char name[ZX_MAX_NAME_LEN];
             EXPECT_OK(vmo.get_property(ZX_PROP_NAME, name, sizeof(name)));
@@ -62,65 +50,65 @@
             *out = kGoldenVmoid;
             return ZX_OK;
         }
-    } manager;
+    } registry;
 
     VmoBuffer buffer;
-    ASSERT_OK(buffer.Initialize(&manager, kCapacity, kGoldenLabel));
+    ASSERT_OK(buffer.Initialize(&registry, kCapacity, kGoldenLabel));
 }
 
 TEST(VmoBufferTest, VmoidRegistration) {
-    MockSpaceManager manager;
+    MockVmoidRegistry registry;
     {
         VmoBuffer buffer;
-        ASSERT_OK(buffer.Initialize(&manager, kCapacity, kGoldenLabel));
+        ASSERT_OK(buffer.Initialize(&registry, kCapacity, kGoldenLabel));
         EXPECT_EQ(kCapacity, buffer.capacity());
         EXPECT_EQ(kGoldenVmoid, buffer.vmoid());
 
-        EXPECT_FALSE(manager.detached());
+        EXPECT_FALSE(registry.detached());
     }
-    EXPECT_TRUE(manager.detached());
+    EXPECT_TRUE(registry.detached());
 }
 
 TEST(VmoBufferTest, MoveConstructorTest) {
-    MockSpaceManager manager;
+    MockVmoidRegistry registry;
 
     {
         VmoBuffer buffer;
-        ASSERT_OK(buffer.Initialize(&manager, kCapacity, kGoldenLabel));
+        ASSERT_OK(buffer.Initialize(&registry, kCapacity, kGoldenLabel));
         EXPECT_EQ(kCapacity, buffer.capacity());
         EXPECT_EQ(kGoldenVmoid, buffer.vmoid());
 
         VmoBuffer move_constructed(std::move(buffer));
         EXPECT_EQ(kCapacity, move_constructed.capacity());
         EXPECT_EQ(kGoldenVmoid, move_constructed.vmoid());
-        EXPECT_FALSE(manager.detached());
+        EXPECT_FALSE(registry.detached());
     }
-    EXPECT_TRUE(manager.detached());
+    EXPECT_TRUE(registry.detached());
 }
 
 TEST(VmoBufferTest, MoveAssignmentTest) {
-    MockSpaceManager manager;
+    MockVmoidRegistry registry;
 
     {
         VmoBuffer buffer;
-        ASSERT_OK(buffer.Initialize(&manager, kCapacity, kGoldenLabel));
+        ASSERT_OK(buffer.Initialize(&registry, kCapacity, kGoldenLabel));
         EXPECT_EQ(kCapacity, buffer.capacity());
         EXPECT_EQ(kGoldenVmoid, buffer.vmoid());
 
         auto buffer2 = std::move(buffer);
         EXPECT_EQ(kCapacity, buffer2.capacity());
         EXPECT_EQ(kGoldenVmoid, buffer2.vmoid());
-        EXPECT_FALSE(manager.detached());
+        EXPECT_FALSE(registry.detached());
     }
-    EXPECT_TRUE(manager.detached());
+    EXPECT_TRUE(registry.detached());
 }
 
 TEST(VmoBufferTest, MoveToSelfTest) {
-    MockSpaceManager manager;
+    MockVmoidRegistry registry;
 
     {
         VmoBuffer buffer;
-        ASSERT_OK(buffer.Initialize(&manager, kCapacity, kGoldenLabel));
+        ASSERT_OK(buffer.Initialize(&registry, kCapacity, kGoldenLabel));
         EXPECT_EQ(kCapacity, buffer.capacity());
         EXPECT_EQ(kGoldenVmoid, buffer.vmoid());
 
@@ -128,16 +116,16 @@
         *addr = std::move(buffer);
         EXPECT_EQ(kCapacity, buffer.capacity());
         EXPECT_EQ(kGoldenVmoid, buffer.vmoid());
-        EXPECT_FALSE(manager.detached());
+        EXPECT_FALSE(registry.detached());
     }
-    EXPECT_TRUE(manager.detached());
+    EXPECT_TRUE(registry.detached());
 }
 
 TEST(VmoBufferTest, MappingTest) {
-    MockSpaceManager manager;
+    MockVmoidRegistry registry;
 
     VmoBuffer buffer;
-    ASSERT_OK(buffer.Initialize(&manager, kCapacity, kGoldenLabel));
+    ASSERT_OK(buffer.Initialize(&registry, kCapacity, kGoldenLabel));
     char buf[kBlobfsBlockSize];
     memset(buf, 'a', sizeof(buf));
 
@@ -150,9 +138,9 @@
 }
 
 TEST(VmoBufferTest, CompareVmoToMapping) {
-    MockSpaceManager manager;
+    MockVmoidRegistry registry;
     VmoBuffer buffer;
-    ASSERT_OK(buffer.Initialize(&manager, kCapacity, kGoldenLabel));
+    ASSERT_OK(buffer.Initialize(&registry, kCapacity, kGoldenLabel));
 
     // Fill |buffer| with some arbitrary data via mapping.
     char buf[kBlobfsBlockSize * 3];
diff --git a/zircon/system/ulib/blobfs/vmo-buffer.cpp b/zircon/system/ulib/blobfs/vmo-buffer.cpp
index f7637ff..5779cf5 100644
--- a/zircon/system/ulib/blobfs/vmo-buffer.cpp
+++ b/zircon/system/ulib/blobfs/vmo-buffer.cpp
@@ -6,13 +6,15 @@
 
 #include <utility>
 
+#include <blobfs/format.h>
+#include <fs/trace.h>
 #include <zircon/status.h>
 #include <zircon/assert.h>
 
 namespace blobfs {
 
 VmoBuffer::VmoBuffer(VmoBuffer&& other)
-    : space_manager_(std::move(other.space_manager_)),
+    : vmoid_registry_(std::move(other.vmoid_registry_)),
       mapper_(std::move(other.mapper_)),
       vmoid_(other.vmoid_),
       capacity_(other.capacity_) {
@@ -21,7 +23,7 @@
 
 VmoBuffer& VmoBuffer::operator=(VmoBuffer&& other) {
     if (&other != this) {
-        space_manager_ = other.space_manager_;
+        vmoid_registry_ = other.vmoid_registry_;
         mapper_ = std::move(other.mapper_);
         vmoid_ = other.vmoid_;
         capacity_ = other.capacity_;
@@ -33,17 +35,17 @@
 
 VmoBuffer::~VmoBuffer() {
     if (vmoid_ != VMOID_INVALID) {
-        space_manager_->DetachVmo(vmoid_);
+        vmoid_registry_->DetachVmo(vmoid_);
     }
 }
 
 void VmoBuffer::Reset() {
-    space_manager_ = nullptr;
+    vmoid_registry_ = nullptr;
     vmoid_ = VMOID_INVALID;
     capacity_ = 0;
 }
 
-zx_status_t VmoBuffer::Initialize(SpaceManager* space_manager, size_t blocks, const char* label) {
+zx_status_t VmoBuffer::Initialize(VmoidRegistry* vmoid_registry, size_t blocks, const char* label) {
     ZX_DEBUG_ASSERT(vmoid_ == VMOID_INVALID);
     fzl::OwnedVmoMapper mapper;
     zx_status_t status = mapper.CreateAndMap(blocks * kBlobfsBlockSize, label);
@@ -54,14 +56,14 @@
     }
 
     vmoid_t vmoid;
-    status = space_manager->AttachVmo(mapper.vmo(), &vmoid);
+    status = vmoid_registry->AttachVmo(mapper.vmo(), &vmoid);
     if (status != ZX_OK) {
         FS_TRACE_ERROR("VmoBuffer: Failed to attach vmo %s: %s\n", label,
                        zx_status_get_string(status));
         return status;
     }
 
-    space_manager_ = space_manager;
+    vmoid_registry_ = vmoid_registry;
     mapper_ = std::move(mapper);
     vmoid_ = vmoid;
     capacity_ = mapper_.size() / kBlobfsBlockSize;