This patch introduces a new option '-b', with this option user can specify required fs size for formating. _scratch_mkfs_sized in xfstest is one of user cases.
Signed-off-by: Chao Yu <[email protected]> --- include/f2fs_fs.h | 1 + lib/libf2fs.c | 9 +++++++-- mkfs/f2fs_format_main.c | 6 +++++- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/include/f2fs_fs.h b/include/f2fs_fs.h index 359deec..dedc143 100644 --- a/include/f2fs_fs.h +++ b/include/f2fs_fs.h @@ -223,6 +223,7 @@ enum f2fs_config_func { }; struct f2fs_configuration { + u_int64_t fs_size; u_int32_t sector_size; u_int32_t reserved_segments; double overprovision; diff --git a/lib/libf2fs.c b/lib/libf2fs.c index 33a82aa..e755f20 100644 --- a/lib/libf2fs.c +++ b/lib/libf2fs.c @@ -347,6 +347,7 @@ int f2fs_crc_valid(u_int32_t blk_crc, void *buf, int len) */ void f2fs_init_configuration(struct f2fs_configuration *c) { + c->fs_size = 0; c->total_sectors = 0; c->sector_size = DEFAULT_SECTOR_SIZE; c->sectors_per_blk = DEFAULT_SECTORS_PER_BLOCK; @@ -473,15 +474,19 @@ int f2fs_get_device_info(struct f2fs_configuration *c) MSG(0, "\tError: Cannot get the device size\n"); return -1; } - c->total_sectors /= c->sector_size; #else if (ioctl(fd, BLKGETSIZE, &total_sectors) < 0) { MSG(0, "\tError: Cannot get the device size\n"); return -1; } - total_sectors /= c->sector_size; c->total_sectors = total_sectors; #endif + if (c->fs_size && c->fs_size < c->total_sectors) + c->total_sectors = (c->fs_size + c->sector_size - 1) / + c->sector_size; + else + c->total_sectors /= c->sector_size; + if (ioctl(fd, HDIO_GETGEO, &geom) < 0) c->start_sector = 0; else diff --git a/mkfs/f2fs_format_main.c b/mkfs/f2fs_format_main.c index 2ea809c..07f101f 100644 --- a/mkfs/f2fs_format_main.c +++ b/mkfs/f2fs_format_main.c @@ -29,6 +29,7 @@ static void mkfs_usage() MSG(0, "\nUsage: mkfs.f2fs [options] device [sectors]\n"); MSG(0, "[options]:\n"); MSG(0, " -a heap-based allocation [default:1]\n"); + MSG(0, " -b file system size\n"); MSG(0, " -d debug level [default:0]\n"); MSG(0, " -e [extension list] e.g. \"mp3,gif,mov\"\n"); MSG(0, " -l label\n"); @@ -73,7 +74,7 @@ static void parse_feature(char *features) static void f2fs_parse_options(int argc, char *argv[]) { - static const char *option_string = "qa:d:e:l:o:O:s:z:t:"; + static const char *option_string = "qa:b:d:e:l:o:O:s:z:t:"; int32_t option=0; while ((option = getopt(argc,argv,option_string)) != EOF) { @@ -84,6 +85,9 @@ static void f2fs_parse_options(int argc, char *argv[]) case 'a': config.heap = atoi(optarg); break; + case 'b': + config.fs_size = atoll(optarg); + break; case 'd': config.dbg_lv = atoi(optarg); break; -- 2.6.1 ------------------------------------------------------------------------------ _______________________________________________ Linux-f2fs-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel
