We actually don't need to issue trim on entire disk by checking first
blocks having zeros.

Signed-off-by: Jaegeuk Kim <jaeg...@kernel.org>
---
 mkfs/f2fs_format_utils.c | 47 ++++++++++++++++++++++++++++++++++++++--
 1 file changed, 45 insertions(+), 2 deletions(-)

diff --git a/mkfs/f2fs_format_utils.c b/mkfs/f2fs_format_utils.c
index 8bf128c..52fedc7 100644
--- a/mkfs/f2fs_format_utils.c
+++ b/mkfs/f2fs_format_utils.c
@@ -110,13 +110,56 @@ static int trim_device(int i)
        return 0;
 }
 
+static int f2fs_zero_blocks(int i)
+{
+#ifdef WITH_ANDROID
+       struct device_info *dev = c.devices + i;
+       int fd = dev->fd;
+       char buf[F2FS_BLKSIZE];
+       char *zero_buf;
+       int j, ret;
+       int ret2 = 0;
+
+       zero_buf = calloc(1, F2FS_BLKSIZE);
+       if (zero_buf == NULL) {
+               MSG(1, "\tError: Malloc Failed for zero buf!!!\n");
+               return -1;
+       }
+
+       /* check first 16MB blocks */
+       for (j = 0; j < 4096; j++) {
+               ret = lseek(fd, j * F2FS_BLKSIZE, SEEK_SET);
+               if (ret < 0) {
+                       ret2 = -1;
+                       break;
+               }
+               ret = read(fd, buf, F2FS_BLKSIZE);
+               if (ret != F2FS_BLKSIZE) {
+                       ret2 = -1;
+                       break;
+               }
+               if (memcmp(buf, zero_buf, F2FS_BLKSIZE)) {
+                       ret2 = -1;
+                       break;
+               }
+       }
+       free(zero_buf);
+       if (!ret2)
+               MSG(0, "Info: Skip discarding blocks (found all zeros\n");
+       return ret2;
+#else
+       return -1;
+#endif
+}
+
 int f2fs_trim_devices(void)
 {
        int i;
 
-       for (i = 0; i < c.ndevs; i++)
-               if (trim_device(i))
+       for (i = 0; i < c.ndevs; i++) {
+               if (f2fs_zero_blocks(i) && trim_device(i))
                        return -1;
+       }
        c.trimmed = 1;
        return 0;
 }
-- 
2.19.0.605.g01d371f741-goog



_______________________________________________
Linux-f2fs-devel mailing list
Linux-f2fs-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to