hi,

We can specify fs size in function f2fs_parse_options as follow:
     if ((optind + 1) < argc) {
         /* We have a sector count. */
         config.total_sectors = atoll(argv[optind+1]);
which one is better?

Thanks

On 2015/11/10 16:48, Chao Yu wrote:
> 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;
>


------------------------------------------------------------------------------
_______________________________________________
Linux-f2fs-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/linux-f2fs-devel

Reply via email to