diff --git a/health/2.0/vts/functional/VtsHalHealthV2_0TargetTest.cpp b/health/2.0/vts/functional/VtsHalHealthV2_0TargetTest.cpp
index 972bc7f..c5431e4 100644
--- a/health/2.0/vts/functional/VtsHalHealthV2_0TargetTest.cpp
+++ b/health/2.0/vts/functional/VtsHalHealthV2_0TargetTest.cpp
@@ -190,18 +190,6 @@
     return true;
 }
 
-bool verifyDiskStats(const hidl_vec<struct DiskStats>& stats) {
-    for (size_t i = 0; i < stats.size(); i++) {
-        if (!(stats[i].reads > 0 && stats[i].readMerges > 0 && stats[i].readSectors > 0 &&
-              stats[i].readTicks > 0 && stats[i].writes > 0 && stats[i].writeMerges > 0 &&
-              stats[i].writeSectors > 0 && stats[i].writeTicks > 0 && stats[i].ioTicks > 0)) {
-            return false;
-        }
-    }
-
-    return true;
-}
-
 template <typename T>
 bool verifyEnum(T value) {
     for (auto it : hidl_enum_iterator<T>()) {
@@ -214,7 +202,7 @@
 }
 
 bool verifyHealthInfo(const HealthInfo& health_info) {
-    if (!verifyStorageInfo(health_info.storageInfos) || !verifyDiskStats(health_info.diskStats)) {
+    if (!verifyStorageInfo(health_info.storageInfos)) {
         return false;
     }
 
@@ -264,7 +252,7 @@
         EXPECT_VALID_OR_UNSUPPORTED_PROP(result, toString(value), verifyStorageInfo(value));
     }));
     EXPECT_OK(mHealth->getDiskStats([](auto result, auto& value) {
-        EXPECT_VALID_OR_UNSUPPORTED_PROP(result, toString(value), verifyDiskStats(value));
+        EXPECT_VALID_OR_UNSUPPORTED_PROP(result, toString(value), true);
     }));
     EXPECT_OK(mHealth->getHealthInfo([](auto result, auto& value) {
         EXPECT_VALID_OR_UNSUPPORTED_PROP(result, toString(value), verifyHealthInfo(value));
