linux-f2fs-devel.lists.sourceforge.net archive mirror
 help / color / mirror / Atom feed
* [f2fs-dev] [PATCH] mkfs.f2fs: check zeros in first 16MB for Android
@ 2019-08-08 23:11 Jaegeuk Kim
  2019-08-09 15:12 ` [f2fs-dev] [PATCH v2] " Jaegeuk Kim
  0 siblings, 1 reply; 9+ messages in thread
From: Jaegeuk Kim @ 2019-08-08 23:11 UTC (permalink / raw)
  To: linux-f2fs-devel; +Cc: Jaegeuk Kim

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

Signed-off-by: Jaegeuk Kim <jaegeuk@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

^ permalink raw reply related	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2019-08-16  1:23 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-08-08 23:11 [f2fs-dev] [PATCH] mkfs.f2fs: check zeros in first 16MB for Android Jaegeuk Kim
2019-08-09 15:12 ` [f2fs-dev] [PATCH v2] " Jaegeuk Kim
     [not found]   ` <CAD14+f2V=j8o=0sUGMgmJHmwKgm80WyzJC5yW7qmyffL=CBJhw@mail.gmail.com>
2019-08-09 15:39     ` Jaegeuk Kim
2019-08-12  3:26       ` Chao Yu
2019-08-12  2:19   ` Chao Yu
2019-08-15 22:21     ` Jaegeuk Kim
2019-08-16  1:00       ` Chao Yu
2019-08-16  1:02         ` Jaegeuk Kim
2019-08-16  1:23           ` Chao Yu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).