This change allows for f2fs_format to work on a non-standard device (e.g.
sparse-memory backed file).
Removes direct access to config.fd from within f2fs_format.c.
Now, f2fs_format_device() can be made to work against any device by
providing
f2fs_finalize_device()
f2fs_trim_device()
and the lib2fs.c functions
ASCIIToUNICODE
dev_write
f2fs_cal_crc32
f2fs_set_bit
log_base_2
This will allow Android's fastboot to use f2fs against a libsparse.
Signed-off-by: JP Abgrall <jpa@google.com>
Signed-off-by: Jaegeuk Kim <jaegeuk.kim@samsung.com>
AM_CPPFLAGS = ${libuuid_CFLAGS} -I$(top_srcdir)/include
AM_CFLAGS = -Wall
sbin_PROGRAMS = mkfs.f2fs
-mkfs_f2fs_SOURCES = f2fs_format.c
+mkfs_f2fs_SOURCES = f2fs_format.c f2fs_format_utils.c
mkfs_f2fs_LDADD = ${libuuid_LIBS} $(top_builddir)/lib/libf2fs.la
#include <uuid/uuid.h>
#include "f2fs_fs.h"
+#include "f2fs_format_utils.h"
extern struct f2fs_configuration config;
struct f2fs_super_block super_block;
return err;
}
-int f2fs_trim_device()
-{
- unsigned long long range[2];
- struct stat stat_buf;
-
- if (!config.trim)
- return 0;
-
- range[0] = 0;
- range[1] = config.total_sectors * DEFAULT_SECTOR_SIZE;
-
- if (fstat(config.fd, &stat_buf) < 0 ) {
- MSG(1, "\tError: Failed to get the device stat!!!\n");
- return -1;
- }
-
- MSG(0, "Info: Discarding device\n");
- if (S_ISREG(stat_buf.st_mode))
- return 0;
- else if (S_ISBLK(stat_buf.st_mode)) {
- if (ioctl(config.fd, BLKDISCARD, &range) < 0)
- MSG(0, "Info: This device doesn't support TRIM\n");
- } else
- return -1;
- return 0;
-}
-
static int f2fs_format_device(void)
{
int err = 0;
if (err)
MSG(0, "\tError: Could not format the device!!!\n");
- /*
- * We should call fsync() to flush out all the dirty pages
- * in the block device page cache.
- */
- if (fsync(config.fd) < 0)
- MSG(0, "\tError: Could not conduct fsync!!!\n");
-
- if (close(config.fd) < 0)
- MSG(0, "\tError: Failed to close device file!!!\n");
+ f2fs_finalize_device();
return err;
}
--- /dev/null
+/**
+ * f2fs_format_utils.c
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * http://www.samsung.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#define _LARGEFILE64_SOURCE
+
+#include <stdio.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <linux/fs.h>
+
+#include "f2fs_fs.h"
+
+void f2fs_finalize_device()
+{
+ /*
+ * We should call fsync() to flush out all the dirty pages
+ * in the block device page cache.
+ */
+ if (fsync(config.fd) < 0)
+ MSG(0, "\tError: Could not conduct fsync!!!\n");
+
+ if (close(config.fd) < 0)
+ MSG(0, "\tError: Failed to close device file!!!\n");
+
+}
+
+int f2fs_trim_device()
+{
+ unsigned long long range[2];
+ struct stat stat_buf;
+
+ if (!config.trim)
+ return 0;
+
+ range[0] = 0;
+ range[1] = config.total_sectors * DEFAULT_SECTOR_SIZE;
+
+ if (fstat(config.fd, &stat_buf) < 0 ) {
+ MSG(1, "\tError: Failed to get the device stat!!!\n");
+ return -1;
+ }
+
+ MSG(0, "Info: Discarding device\n");
+ if (S_ISREG(stat_buf.st_mode))
+ return 0;
+ else if (S_ISBLK(stat_buf.st_mode)) {
+ if (ioctl(config.fd, BLKDISCARD, &range) < 0)
+ MSG(0, "Info: This device doesn't support TRIM\n");
+ } else
+ return -1;
+ return 0;
+}
+
--- /dev/null
+/**
+ * f2fs_format_utils.c
+ *
+ * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * http://www.samsung.com/
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#define _LARGEFILE64_SOURCE
+
+#include "f2fs_fs.h"
+
+extern struct f2fs_configuration config;
+
+void f2fs_finalize_device();
+int f2fs_trim_device();