diff --git a/model/EmulatedVolume.cpp b/model/EmulatedVolume.cpp
index 6e1ffce..7ec109c 100644
--- a/model/EmulatedVolume.cpp
+++ b/model/EmulatedVolume.cpp
@@ -27,8 +27,8 @@
 #include <stdlib.h>
 #include <sys/mount.h>
 #include <sys/stat.h>
-#include <sys/types.h>
 #include <sys/sysmacros.h>
+#include <sys/types.h>
 #include <sys/wait.h>
 
 using android::base::StringPrintf;
@@ -38,22 +38,21 @@
 
 static const char* kFusePath = "/system/bin/sdcard";
 
-EmulatedVolume::EmulatedVolume(const std::string& rawPath) :
-        VolumeBase(Type::kEmulated), mFusePid(0) {
+EmulatedVolume::EmulatedVolume(const std::string& rawPath)
+    : VolumeBase(Type::kEmulated), mFusePid(0) {
     setId("emulated");
     mRawPath = rawPath;
     mLabel = "emulated";
 }
 
-EmulatedVolume::EmulatedVolume(const std::string& rawPath, dev_t device,
-        const std::string& fsUuid) : VolumeBase(Type::kEmulated), mFusePid(0) {
+EmulatedVolume::EmulatedVolume(const std::string& rawPath, dev_t device, const std::string& fsUuid)
+    : VolumeBase(Type::kEmulated), mFusePid(0) {
     setId(StringPrintf("emulated:%u,%u", major(device), minor(device)));
     mRawPath = rawPath;
     mLabel = fsUuid;
 }
 
-EmulatedVolume::~EmulatedVolume() {
-}
+EmulatedVolume::~EmulatedVolume() {}
 
 status_t EmulatedVolume::doMount() {
     // We could have migrated storage to an adopted private volume, so always
@@ -71,8 +70,8 @@
     setPath(StringPrintf("/storage/%s", label.c_str()));
 
     if (fs_prepare_dir(mFuseDefault.c_str(), 0700, AID_ROOT, AID_ROOT) ||
-            fs_prepare_dir(mFuseRead.c_str(), 0700, AID_ROOT, AID_ROOT) ||
-            fs_prepare_dir(mFuseWrite.c_str(), 0700, AID_ROOT, AID_ROOT)) {
+        fs_prepare_dir(mFuseRead.c_str(), 0700, AID_ROOT, AID_ROOT) ||
+        fs_prepare_dir(mFuseWrite.c_str(), 0700, AID_ROOT, AID_ROOT)) {
         PLOG(ERROR) << getId() << " failed to create mount points";
         return -errno;
     }
@@ -80,6 +79,7 @@
     dev_t before = GetDevice(mFuseWrite);
 
     if (!(mFusePid = fork())) {
+        // clang-format off
         if (execl(kFusePath, kFusePath,
                 "-u", "1023", // AID_MEDIA_RW
                 "-g", "1023", // AID_MEDIA_RW
@@ -90,6 +90,7 @@
                 mRawPath.c_str(),
                 label.c_str(),
                 NULL)) {
+            // clang-format on
             PLOG(ERROR) << "Failed to exec";
         }
 
@@ -105,7 +106,7 @@
     nsecs_t start = systemTime(SYSTEM_TIME_BOOTTIME);
     while (before == GetDevice(mFuseWrite)) {
         LOG(VERBOSE) << "Waiting for FUSE to spin up...";
-        usleep(50000); // 50ms
+        usleep(50000);  // 50ms
 
         nsecs_t now = systemTime(SYSTEM_TIME_BOOTTIME);
         if (nanoseconds_to_milliseconds(now - start) > 5000) {
diff --git a/model/PublicVolume.cpp b/model/PublicVolume.cpp
index 9f2ed85..7420c79 100644
--- a/model/PublicVolume.cpp
+++ b/model/PublicVolume.cpp
@@ -20,8 +20,8 @@
 #include "fs/Exfat.h"
 #include "fs/Vfat.h"
 
-#include <android-base/stringprintf.h>
 #include <android-base/logging.h>
+#include <android-base/stringprintf.h>
 #include <cutils/fs.h>
 #include <private/android_filesystem_config.h>
 #include <utils/Timers.h>
@@ -30,8 +30,8 @@
 #include <stdlib.h>
 #include <sys/mount.h>
 #include <sys/stat.h>
-#include <sys/types.h>
 #include <sys/sysmacros.h>
+#include <sys/types.h>
 #include <sys/wait.h>
 
 using android::base::StringPrintf;
@@ -43,14 +43,12 @@
 
 static const char* kAsecPath = "/mnt/secure/asec";
 
-PublicVolume::PublicVolume(dev_t device) :
-        VolumeBase(Type::kPublic), mDevice(device), mFusePid(0) {
+PublicVolume::PublicVolume(dev_t device) : VolumeBase(Type::kPublic), mDevice(device), mFusePid(0) {
     setId(StringPrintf("public:%u,%u", major(device), minor(device)));
     mDevPath = StringPrintf("/dev/block/vold/%s", getId().c_str());
 }
 
-PublicVolume::~PublicVolume() {
-}
+PublicVolume::~PublicVolume() {}
 
 status_t PublicVolume::readMetadata() {
     status_t res = ReadMetadataUntrusted(mDevPath, &mFsType, &mFsUuid, &mFsLabel);
@@ -66,8 +64,7 @@
     std::string securePath(mRawPath + "/.android_secure");
 
     // Recover legacy secure path
-    if (!access(legacyPath.c_str(), R_OK | X_OK)
-            && access(securePath.c_str(), R_OK | X_OK)) {
+    if (!access(legacyPath.c_str(), R_OK | X_OK) && access(securePath.c_str(), R_OK | X_OK)) {
         if (rename(legacyPath.c_str(), securePath.c_str())) {
             PLOG(WARNING) << getId() << " failed to rename legacy ASEC dir";
         }
@@ -158,8 +155,8 @@
     }
 
     if (fs_prepare_dir(mFuseDefault.c_str(), 0700, AID_ROOT, AID_ROOT) ||
-            fs_prepare_dir(mFuseRead.c_str(), 0700, AID_ROOT, AID_ROOT) ||
-            fs_prepare_dir(mFuseWrite.c_str(), 0700, AID_ROOT, AID_ROOT)) {
+        fs_prepare_dir(mFuseRead.c_str(), 0700, AID_ROOT, AID_ROOT) ||
+        fs_prepare_dir(mFuseWrite.c_str(), 0700, AID_ROOT, AID_ROOT)) {
         PLOG(ERROR) << getId() << " failed to create FUSE mount points";
         return -errno;
     }
@@ -168,6 +165,7 @@
 
     if (!(mFusePid = fork())) {
         if (getMountFlags() & MountFlags::kPrimary) {
+            // clang-format off
             if (execl(kFusePath, kFusePath,
                     "-u", "1023", // AID_MEDIA_RW
                     "-g", "1023", // AID_MEDIA_RW
@@ -176,9 +174,11 @@
                     mRawPath.c_str(),
                     stableName.c_str(),
                     NULL)) {
+                // clang-format on
                 PLOG(ERROR) << "Failed to exec";
             }
         } else {
+            // clang-format off
             if (execl(kFusePath, kFusePath,
                     "-u", "1023", // AID_MEDIA_RW
                     "-g", "1023", // AID_MEDIA_RW
@@ -186,6 +186,7 @@
                     mRawPath.c_str(),
                     stableName.c_str(),
                     NULL)) {
+                // clang-format on
                 PLOG(ERROR) << "Failed to exec";
             }
         }
@@ -202,7 +203,7 @@
     nsecs_t start = systemTime(SYSTEM_TIME_BOOTTIME);
     while (before == GetDevice(mFuseWrite)) {
         LOG(VERBOSE) << "Waiting for FUSE to spin up...";
-        usleep(50000); // 50ms
+        usleep(50000);  // 50ms
 
         nsecs_t now = systemTime(SYSTEM_TIME_BOOTTIME);
         if (nanoseconds_to_milliseconds(now - start) > 5000) {
diff --git a/model/VolumeBase.cpp b/model/VolumeBase.cpp
index 429f134..300add1 100644
--- a/model/VolumeBase.cpp
+++ b/model/VolumeBase.cpp
@@ -14,12 +14,12 @@
  * limitations under the License.
  */
 
-#include "Utils.h"
 #include "VolumeBase.h"
+#include "Utils.h"
 #include "VolumeManager.h"
 
-#include <android-base/stringprintf.h>
 #include <android-base/logging.h>
+#include <android-base/stringprintf.h>
 
 #include <fcntl.h>
 #include <stdlib.h>
@@ -32,10 +32,13 @@
 namespace android {
 namespace vold {
 
-VolumeBase::VolumeBase(Type type) :
-        mType(type), mMountFlags(0), mMountUserId(-1), mCreated(false), mState(
-                State::kUnmounted), mSilent(false) {
-}
+VolumeBase::VolumeBase(Type type)
+    : mType(type),
+      mMountFlags(0),
+      mMountUserId(-1),
+      mCreated(false),
+      mState(State::kUnmounted),
+      mSilent(false) {}
 
 VolumeBase::~VolumeBase() {
     CHECK(!mCreated);
@@ -45,7 +48,9 @@
     mState = state;
 
     auto listener = getListener();
-    if (listener) listener->onVolumeStateChanged(getId(), static_cast<int32_t>(mState));
+    if (listener) {
+        listener->onVolumeStateChanged(getId(), static_cast<int32_t>(mState));
+    }
 }
 
 status_t VolumeBase::setDiskId(const std::string& diskId) {
@@ -131,7 +136,9 @@
     mInternalPath = internalPath;
 
     auto listener = getListener();
-    if (listener) listener->onVolumeInternalPathChanged(getId(), mInternalPath);
+    if (listener) {
+        listener->onVolumeInternalPathChanged(getId(), mInternalPath);
+    }
 
     return OK;
 }
@@ -168,8 +175,9 @@
     status_t res = doCreate();
 
     auto listener = getListener();
-    if (listener) listener->onVolumeCreated(getId(),
-            static_cast<int32_t>(mType), mDiskId, mPartGuid);
+    if (listener) {
+        listener->onVolumeCreated(getId(), static_cast<int32_t>(mType), mDiskId, mPartGuid);
+    }
 
     setState(State::kUnmounted);
     return res;
@@ -189,9 +197,10 @@
         setState(State::kRemoved);
     }
 
-
     auto listener = getListener();
-    if (listener) listener->onVolumeDestroyed(getId());
+    if (listener) {
+        listener->onVolumeDestroyed(getId());
+    }
 
     status_t res = doDestroy();
     mCreated = false;
@@ -228,8 +237,7 @@
     setState(State::kEjecting);
     for (const auto& vol : mVolumes) {
         if (vol->destroy()) {
-            LOG(WARNING) << getId() << " failed to destroy " << vol->getId()
-                    << " stacked above";
+            LOG(WARNING) << getId() << " failed to destroy " << vol->getId() << " stacked above";
         }
     }
     mVolumes.clear();
diff --git a/model/VolumeBase.h b/model/VolumeBase.h
index 4aa8b02..6532a80 100644
--- a/model/VolumeBase.h
+++ b/model/VolumeBase.h
@@ -17,8 +17,8 @@
 #ifndef ANDROID_VOLD_VOLUME_BASE_H
 #define ANDROID_VOLD_VOLUME_BASE_H
 
-#include "android/os/IVoldListener.h"
 #include "Utils.h"
+#include "android/os/IVoldListener.h"
 
 #include <cutils/multiuser.h>
 #include <utils/Errors.h>
@@ -45,7 +45,7 @@
  * volumes and removes any bind mounts before finally unmounting itself.
  */
 class VolumeBase {
-public:
+  public:
     virtual ~VolumeBase();
 
     enum class Type {
@@ -102,7 +102,7 @@
     status_t unmount();
     status_t format(const std::string& fsType);
 
-protected:
+  protected:
     explicit VolumeBase(Type type);
 
     virtual status_t doCreate();
@@ -117,7 +117,7 @@
 
     android::sp<android::os::IVoldListener> getListener();
 
-private:
+  private:
     /* ID that uniquely references volume while alive */
     std::string mId;
     /* ID that uniquely references parent disk while alive */
