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

Reply via email to