aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJaegeuk Kim <jaegeuk@kernel.org>2021-09-10 15:38:11 -0700
committerJaegeuk Kim <jaegeuk@kernel.org>2021-09-20 16:23:43 -0700
commit1603a3d1de98031b4c2d020999d50e7a34b731ad (patch)
tree94114671221e404e51d9b0f0b8717e477f7bb5d8
parent63d50045739e45df19424c86ccbc80afa2bc0234 (diff)
downloadf2fs-tools-1603a3d1de98031b4c2d020999d50e7a34b731ad.tar.gz
mkfs.f2fs: wipe other FS magics given -f
This patch fixes the below stale magic info. $ mkfs.btrfs -f test.img btrfs-progs v5.10.1 See http://btrfs.wiki.kernel.org for more information. Label: (null) UUID: 941d2db7-3ece-4090-8b22-c4ea548b5dae Node size: 16384 Sector size: 4096 Filesystem size: 1.00GiB Block group profiles: Data: single 8.00MiB Metadata: DUP 51.19MiB System: DUP 8.00MiB SSD detected: no Incompat features: extref, skinny-metadata Runtime features: Checksum: crc32c Number of devices: 1 Devices: ID SIZE PATH 1 1.00GiB test.img $ hexdump -s 0x10000 -n 128 -C test.img 00010000 81 29 94 0a 00 00 00 00 00 00 00 00 00 00 00 00 |.)..............| 00010010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00010020 94 1d 2d b7 3e ce 40 90 8b 22 c4 ea 54 8b 5d ae |..-.>.@.."..T.].| 00010030 00 00 01 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 00010040 5f 42 48 52 66 53 5f 4d 05 00 00 00 00 00 00 00 |_BHRfS_M........| 00010050 00 40 d2 01 00 00 00 00 00 40 50 01 00 00 00 00 |.@.......@P.....| 00010060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00010070 00 00 00 40 00 00 00 00 00 00 02 00 00 00 00 00 |...@............| 00010080 $ mkfs.f2fs -t 0 -f test.img F2FS-tools: mkfs.f2fs Ver: 1.14.0 (2020-12-28) Info: Disable heap-based policy Info: Debug level = 0 Info: Trim is disabled Info: Segments per section = 1 Info: Sections per zone = 1 Info: sector size = 512 Info: total sectors = 2097152 (1024 MB) Info: zone aligned segment0 blkaddr: 512 Info: format version with "Linux version 5.10.46-4rodete1-amd64 (glinux-team@google.com) (gcc-10 (Debian 10.2.1-6+build2) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.46-4rodete1 (2021-08-20)" Info: Overprovision ratio = 6.360% Info: Overprovision segments = 68 (GC reserved = 39) Info: format successful $hexdump -s 0x10000 -n 128 -C test.img 00010000 c2 8a c8 26 00 00 00 00 00 00 00 00 00 00 00 00 |...&............| 00010010 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00010020 92 ab 3f c6 b7 82 49 5e 93 23 e8 c9 e9 45 7d ac |..?...I^.#...E}.| 00010030 00 00 01 00 00 00 00 00 01 00 00 00 00 00 00 00 |................| 00010040 5f 42 48 52 66 53 5f 4d 05 00 00 00 00 00 00 00 |_BHRfS_M........| 00010050 00 40 d2 01 00 00 00 00 00 40 50 01 00 00 00 00 |.@.......@P.....| 00010060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00010070 00 00 00 40 00 00 00 00 00 00 02 00 00 00 00 00 |...@............| 00010080 --- After this patch --- $ mkfs.f2fs -t 0 -f test.img F2FS-tools: mkfs.f2fs Ver: 1.14.0 (2020-12-28) Info: Disable heap-based policy Info: Debug level = 0 Info: Trim is disabled test.img appears to contain an existing filesystem (btrfs). Info: Segments per section = 1 Info: Sections per zone = 1 Info: sector size = 512 Info: total sectors = 2097152 (1024 MB) Info: zone aligned segment0 blkaddr: 512 Info: format version with "Linux version 5.10.46-4rodete1-amd64 (glinux-team@google.com) (gcc-10 (Debian 10.2.1-6+build2) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2) #1 SMP Debian 5.10.46-4rodete1 (2021-08-20)" Info: Overprovision ratio = 6.360% Info: Overprovision segments = 68 (GC reserved = 39) Info: format successful $ hexdump -s 0x10000 -n 128 -C test.img 00010000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * 00010080 Signed-off-by: Jaegeuk Kim <jaegeuk@kernel.org>
-rw-r--r--fsck/main.c2
-rw-r--r--include/f2fs_fs.h1
-rw-r--r--lib/libf2fs.c6
-rw-r--r--mkfs/f2fs_format_main.c36
4 files changed, 38 insertions, 7 deletions
diff --git a/fsck/main.c b/fsck/main.c
index eda399c..e4cfdf4 100644
--- a/fsck/main.c
+++ b/fsck/main.c
@@ -1120,7 +1120,7 @@ int main(int argc, char **argv)
}
/* Get device */
- if (f2fs_get_device_info() < 0) {
+ if (f2fs_get_device_info() < 0 || f2fs_get_f2fs_info() < 0) {
ret = -1;
if (c.func == FSCK)
ret = FSCK_OPERATIONAL_ERROR;
diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h
index 2a9c116..69260a6 100644
--- a/include/f2fs_fs.h
+++ b/include/f2fs_fs.h
@@ -1341,6 +1341,7 @@ extern int f2fs_devs_are_umounted(void);
extern int f2fs_dev_is_writable(void);
extern int f2fs_dev_is_umounted(char *);
extern int f2fs_get_device_info(void);
+extern int f2fs_get_f2fs_info(void);
extern unsigned int calc_extra_isize(void);
extern int get_device_info(int);
extern int f2fs_init_sparse_file(void);
diff --git a/lib/libf2fs.c b/lib/libf2fs.c
index b27785d..420dfda 100644
--- a/lib/libf2fs.c
+++ b/lib/libf2fs.c
@@ -1183,6 +1183,12 @@ int f2fs_get_device_info(void)
for (i = 0; i < c.ndevs; i++)
if (get_device_info(i))
return -1;
+ return 0;
+}
+
+int f2fs_get_f2fs_info(void)
+{
+ int i;
if (c.wanted_total_sectors < c.total_sectors) {
MSG(0, "Info: total device sectors = %"PRIu64" (in %u bytes)\n",
diff --git a/mkfs/f2fs_format_main.c b/mkfs/f2fs_format_main.c
index 031244d..b89efe6 100644
--- a/mkfs/f2fs_format_main.c
+++ b/mkfs/f2fs_format_main.c
@@ -396,18 +396,42 @@ int main(int argc, char *argv[])
c.func = MKFS;
- if (!force_overwrite && f2fs_check_overwrite()) {
- MSG(0, "\tUse the -f option to force overwrite.\n");
- return -1;
- }
-
if (f2fs_devs_are_umounted() < 0) {
if (errno != EBUSY)
MSG(0, "\tError: Not available on mounted device!\n");
- return -1;
+ goto err_format;
}
if (f2fs_get_device_info() < 0)
+ return -1;
+
+ if (f2fs_check_overwrite()) {
+ char *zero_buf = NULL;
+ int i;
+
+ if (!force_overwrite) {
+ MSG(0, "\tUse the -f option to force overwrite.\n");
+ goto err_format;
+ }
+ zero_buf = calloc(F2FS_BLKSIZE, 1);
+ if (!zero_buf) {
+ MSG(0, "\tError: Fail to allocate zero buffer.\n");
+ goto err_format;
+ }
+ /* wipe out other FS magics mostly first 4MB space */
+ for (i = 0; i < 1024; i++)
+ if (dev_fill_block(zero_buf, i))
+ break;
+ free(zero_buf);
+ if (i != 1024) {
+ MSG(0, "\tError: Fail to fill zeros till %d.\n", i);
+ goto err_format;
+ }
+ if (f2fs_fsync_device())
+ goto err_format;
+ }
+
+ if (f2fs_get_f2fs_info() < 0)
goto err_format;
/*