Reduce cryptfs logspam

Bug: 17572886
Change-Id: I91302ccc284e0f908299852650db5bf645f2ff71
diff --git a/cryptfs.c b/cryptfs.c
index 197bf1e..020fc7e 100644
--- a/cryptfs.c
+++ b/cryptfs.c
@@ -2121,7 +2121,6 @@
         data->cur_pct = data->new_pct;
         snprintf(buf, sizeof(buf), "%" PRId64, data->cur_pct);
         property_set("vold.encrypt_progress", buf);
-        SLOGI("Encrypted %" PRId64 " percent of drive", data->cur_pct);
     }
 
     if (data->cur_pct >= 5) {
@@ -2139,14 +2138,37 @@
             char buf[8];
             snprintf(buf, sizeof(buf), "%d", remaining_time);
             property_set("vold.encrypt_time_remaining", buf);
-
-            SLOGI("Encrypted %" PRId64 " percent of drive, %d seconds to go",
-                  data->cur_pct, remaining_time);
             data->remaining_time = remaining_time;
         }
     }
 }
 
+static void log_progress(struct encryptGroupsData const* data, bool completed)
+{
+    // Precondition - if completed data = 0 else data != 0
+
+    // Track progress so we can skip logging blocks
+    static off64_t offset = -1;
+
+    // Need to close existing 'Encrypting from' log?
+    if (completed || (offset != -1 && data->offset != offset)) {
+        SLOGI("Encrypted to sector %" PRId64,
+              offset / info.block_size * CRYPT_SECTOR_SIZE);
+        offset = -1;
+    }
+
+    // Need to start new 'Encrypting from' log?
+    if (!completed && offset != data->offset) {
+        SLOGI("Encrypting from sector %" PRId64,
+              data->offset / info.block_size * CRYPT_SECTOR_SIZE);
+    }
+
+    // Update offset
+    if (!completed) {
+        offset = data->offset + (off64_t)data->count * info.block_size;
+    }
+}
+
 static int flush_outstanding_data(struct encryptGroupsData* data)
 {
     if (data->count == 0) {
@@ -2170,8 +2192,7 @@
               data->crypto_blkdev);
         return -1;
     } else {
-        SLOGI("Encrypted %d blocks at sector %" PRId64,
-              data->count, data->offset / info.block_size * CRYPT_SECTOR_SIZE);
+      log_progress(data, false);
     }
 
     data->count = 0;
@@ -2260,6 +2281,7 @@
     rc = 0;
 
 errout:
+    log_progress(0, true);
     free(data->buffer);
     free(block_bitmap);
     return rc;
@@ -2343,6 +2365,30 @@
     return rc;
 }
 
+static void log_progress_f2fs(u64 block, bool completed)
+{
+    // Precondition - if completed data = 0 else data != 0
+
+    // Track progress so we can skip logging blocks
+    static u64 last_block = (u64)-1;
+
+    // Need to close existing 'Encrypting from' log?
+    if (completed || (last_block != (u64)-1 && block != last_block + 1)) {
+        SLOGI("Encrypted to block %" PRId64, last_block);
+        last_block = -1;
+    }
+
+    // Need to start new 'Encrypting from' log?
+    if (!completed && (last_block == (u64)-1 || block != last_block + 1)) {
+        SLOGI("Encrypting from block %" PRId64, block);
+    }
+
+    // Update offset
+    if (!completed) {
+        last_block = block;
+    }
+}
+
 static int encrypt_one_block_f2fs(u64 pos, void *data)
 {
     struct encryptGroupsData *priv_dat = (struct encryptGroupsData *)data;
@@ -2361,7 +2407,7 @@
         SLOGE("Error writing crypto_blkdev %s for inplace encrypt", priv_dat->crypto_blkdev);
         return -1;
     } else {
-        SLOGD("Encrypted block %"PRIu64, pos);
+        log_progress_f2fs(pos, false);
     }
 
     return 0;
@@ -2436,6 +2482,7 @@
     if (rc)
         SLOGE("Failed to encrypt f2fs filesystem on %s", real_blkdev);
 
+    log_progress_f2fs(0, true);
     free(f2fs_info);
     free(data.buffer);
     close(data.realfd);