diff --git a/zircon/system/ulib/blobfs/blobfs.cc b/zircon/system/ulib/blobfs/blobfs.cc
index 5c2cdb45..7c15a81 100644
--- a/zircon/system/ulib/blobfs/blobfs.cc
+++ b/zircon/system/ulib/blobfs/blobfs.cc
@@ -885,8 +885,7 @@
 
   // Assume |AlignForVerification| already called on |offset| and |length|.
   ZX_DEBUG_ASSERT(offset % kBlobfsBlockSize == 0);
-  ZX_DEBUG_ASSERT(length % kBlobfsBlockSize == 0 ||
-                  offset + length == info->data_length_bytes);
+  ZX_DEBUG_ASSERT(length % kBlobfsBlockSize == 0 || offset + length == info->data_length_bytes);
 
   fzl::VmoMapper mapping;
   // We need to unmap the transfer VMO before its pages can be transferred to the destination VMO,
diff --git a/zircon/system/ulib/blobfs/compression/zstd-seekable-blob.cc b/zircon/system/ulib/blobfs/compression/zstd-seekable-blob.cc
index a6600bd..c217e45 100644
--- a/zircon/system/ulib/blobfs/compression/zstd-seekable-blob.cc
+++ b/zircon/system/ulib/blobfs/compression/zstd-seekable-blob.cc
@@ -20,8 +20,8 @@
 #include <fs/trace.h>
 #include <zstd/zstd_seekable.h>
 
-#include "zstd-seekable.h"
 #include "zstd-seekable-blob-collection.h"
+#include "zstd-seekable.h"
 
 namespace blobfs {
 
@@ -219,22 +219,25 @@
   uint32_t data_block_start = static_cast<uint32_t>(data_block_start64);
   uint64_t data_byte_end;
   if (add_overflow(data_byte_offset, num_bytes, &data_byte_end)) {
-    FS_TRACE_ERROR("[blobfs][zstd-seekable] Oversized data block end: data_byte_offset=%lu, num_bytes=%lu\n",
-                   data_byte_offset, num_bytes);
+    FS_TRACE_ERROR(
+        "[blobfs][zstd-seekable] Oversized data block end: data_byte_offset=%lu, num_bytes=%lu\n",
+        data_byte_offset, num_bytes);
     file->status = ZX_ERR_OUT_OF_RANGE;
     return -1;
   }
   uint64_t data_block_end64 = fbl::round_up(data_byte_end, kBlobfsBlockSize) / kBlobfsBlockSize;
   uint64_t num_blocks64;
   if (sub_overflow(data_block_end64, data_block_start64, &num_blocks64)) {
-    FS_TRACE_ERROR("[blobfs][zstd-seekable] Block calculation error: (data_block_end=%lu - data_block_start=%lu) should be non-negative\n",
-                   data_block_end64, data_block_start64);
+    FS_TRACE_ERROR(
+        "[blobfs][zstd-seekable] Block calculation error: (data_block_end=%lu - "
+        "data_block_start=%lu) should be non-negative\n",
+        data_block_end64, data_block_start64);
     file->status = ZX_ERR_INTERNAL;
     return -1;
   }
   if (num_blocks64 > std::numeric_limits<uint32_t>::max()) {
-    FS_TRACE_ERROR("[blobfs][zstd-seekable] Oversized number of blocks: %lu > %u\n",
-                   num_blocks64, std::numeric_limits<uint32_t>::max());
+    FS_TRACE_ERROR("[blobfs][zstd-seekable] Oversized number of blocks: %lu > %u\n", num_blocks64,
+                   std::numeric_limits<uint32_t>::max());
     file->status = ZX_ERR_OUT_OF_RANGE;
     return -1;
   }
diff --git a/zircon/system/ulib/blobfs/test/unit/zstd-seekable-blob-test.cc b/zircon/system/ulib/blobfs/test/unit/zstd-seekable-blob-test.cc
index 911a51f..49c013c 100644
--- a/zircon/system/ulib/blobfs/test/unit/zstd-seekable-blob-test.cc
+++ b/zircon/system/ulib/blobfs/test/unit/zstd-seekable-blob-test.cc
@@ -16,7 +16,6 @@
 #include <zircon/device/block.h>
 #include <zircon/errors.h>
 #include <zircon/types.h>
-#include <fbl/auto_call.h>
 
 #include <limits>
 #include <memory>
@@ -24,6 +23,7 @@
 #include <blobfs/common.h>
 #include <blobfs/mkfs.h>
 #include <block-client/cpp/fake-device.h>
+#include <fbl/auto_call.h>
 #include <zxtest/base/test.h>
 #include <zxtest/zxtest.h>
 
@@ -81,8 +81,8 @@
   void CheckRead(uint32_t node_index, std::vector<uint8_t>* buf, std::vector<uint8_t>* expected_buf,
                  uint64_t data_byte_offset, uint64_t num_bytes) {
     uint8_t* expected = expected_buf->data() + data_byte_offset;
-    ASSERT_OK(compressed_blob_collection()->Read(node_index, buf->data(), data_byte_offset,
-                                                 num_bytes));
+    ASSERT_OK(
+        compressed_blob_collection()->Read(node_index, buf->data(), data_byte_offset, num_bytes));
     ASSERT_BYTES_EQ(expected, buf->data(), num_bytes);
   }
 
@@ -185,10 +185,9 @@
 
     // Construct BlobFS with non-seekable ZSTD algorithm. This should cause errors in the seekable
     // read path.
-    ASSERT_OK(Blobfs::CreateWithWriteCompressionAlgorithm(loop_.dispatcher(), std::move(device),
-                                                          &options,
-                                                          CompressionAlgorithm::ZSTD_SEEKABLE,
-                                                          zx::resource(), &fs_));
+    ASSERT_OK(Blobfs::CreateWithWriteCompressionAlgorithm(
+        loop_.dispatcher(), std::move(device), &options, CompressionAlgorithm::ZSTD_SEEKABLE,
+        zx::resource(), &fs_));
 
     ASSERT_OK(ZSTDSeekableBlobCollection::Create(vmoid_registry(), space_manager(),
                                                  transaction_handler(), node_finder(),
@@ -200,7 +199,6 @@
   }
 };
 
-
 class NullNodeFinder : public NodeFinder {
  public:
   Inode* GetNode(uint32_t node_index) final { return nullptr; }
@@ -232,7 +230,8 @@
   const uint64_t read_buffer_num_bytes = fbl::round_up(blob_data_size, kBlobfsBlockSize);
   ASSERT_OK(zx::vmo::create(read_buffer_num_bytes, 0, &read_buffer_vmo));
   fzl::VmoMapper mapper;
-  ASSERT_OK(mapper.Map(read_buffer_vmo, 0, read_buffer_num_bytes, ZX_VM_PERM_READ | ZX_VM_PERM_WRITE));
+  ASSERT_OK(
+      mapper.Map(read_buffer_vmo, 0, read_buffer_num_bytes, ZX_VM_PERM_READ | ZX_VM_PERM_WRITE));
   auto unmap = fbl::MakeAutoCall([&]() { mapper.Unmap(); });
   storage::OwnedVmoid vmoid(vmoid_registry());
   ASSERT_OK(vmoid.AttachVmo(read_buffer_vmo));
