diff options
author | Jaegeuk Kim <jaegeuk@kernel.org> | 2021-09-10 15:38:11 -0700 |
---|---|---|
committer | Jaegeuk Kim <jaegeuk@kernel.org> | 2021-09-20 16:23:43 -0700 |
commit | 1603a3d1de98031b4c2d020999d50e7a34b731ad (patch) | |
tree | 94114671221e404e51d9b0f0b8717e477f7bb5d8 | |
parent | 63d50045739e45df19424c86ccbc80afa2bc0234 (diff) | |
download | f2fs-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.c | 2 | ||||
-rw-r--r-- | include/f2fs_fs.h | 1 | ||||
-rw-r--r-- | lib/libf2fs.c | 6 | ||||
-rw-r--r-- | mkfs/f2fs_format_main.c | 36 |
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; /* |