Changeset 30796


Ignore:
Timestamp:
2012-03-03T11:08:31+01:00 (6 years ago)
Author:
juhosg
Message:

tools/mtd-utils: update mkfs.ubifs XZ support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/mtd-utils/patches/136-mkfs.ubifs-xz-support.patch

    r30795 r30796  
    218218--- a/mkfs.ubifs/mkfs.ubifs.c 
    219219+++ b/mkfs.ubifs/mkfs.ubifs.c 
    220 @@ -178,8 +178,8 @@ static const char *helptext = 
     220@@ -98,6 +98,9 @@ struct ubifs_info info_; 
     221 static struct ubifs_info *c = &info_; 
     222 static libubi_t ubi; 
     223  
     224+static int force_compr_set; 
     225+static int force_compr; 
     226+ 
     227 /* Debug levels are: 0 (none), 1 (statistics), 2 (files) ,3 (more details) */ 
     228 int debug_level; 
     229 int verbose; 
     230@@ -132,7 +135,7 @@ static struct inum_mapping **hash_table; 
     231 /* Inode creation sequence number */ 
     232 static unsigned long long creat_sqnum; 
     233  
     234-static const char *optstring = "d:r:m:o:D:h?vVe:c:g:f:Fp:k:x:X:j:R:l:j:UQq"; 
     235+static const char *optstring = "d:r:m:o:D:h?vVe:c:g:f:Fp:k:x:X:y:j:R:l:j:UQq"; 
     236  
     237 static const struct option longopts[] = { 
     238        {"root",               1, NULL, 'r'}, 
     239@@ -149,6 +152,7 @@ static const struct option longopts[] = 
     240        {"reserved",           1, NULL, 'R'}, 
     241        {"compr",              1, NULL, 'x'}, 
     242        {"favor-percent",      1, NULL, 'X'}, 
     243+       {"force-compr",        1, NULL, 'y'}, 
     244        {"fanout",             1, NULL, 'f'}, 
     245        {"space-fixup",        0, NULL, 'F'}, 
     246        {"keyhash",            1, NULL, 'k'}, 
     247@@ -178,11 +182,13 @@ static const char *helptext = 
    221248 "-o, --output=FILE        output to FILE\n" 
    222249 "-j, --jrn-size=SIZE      journal size\n" 
     
    224251-"-x, --compr=TYPE         compression type - \"lzo\", \"favor_lzo\", \"zlib\" or\n" 
    225252-"                         \"none\" (default: \"lzo\")\n" 
    226 +"-x, --compr=TYPE         compression type - \"lzo\", \"favor_lzo\", \"zlib\",\n" 
    227 +"                         \"xz\" or \"none\" (default: \"lzo\")\n" 
     253+"-x, --compr=TYPE         default compression type - \"lzo\", \"favor_lzo\",\n" 
     254+"                         \"zlib\" or \"none\" (default: \"lzo\")\n" 
    228255 "-X, --favor-percent      may only be used with favor LZO compression and defines\n" 
    229256 "                         how many percent better zlib should compress to make\n" 
    230257 "                         mkfs.ubifs use zlib instead of LZO (default 20%)\n" 
    231 @@ -208,7 +208,7 @@ static const char *helptext = 
    232  "-h, --help               display this help text\n\n" 
    233  "Note, SIZE is specified in bytes, but it may also be specified in Kilobytes,\n" 
    234  "Megabytes, and Gigabytes if a KiB, MiB, or GiB suffix is used.\n\n" 
    235 -"If you specify \"lzo\" or \"zlib\" compressors, mkfs.ubifs will use this compressor\n" 
    236 +"If you specify \"lzo\", \"xz\" or \"zlib\" compressors, mkfs.ubifs will use this compressor\n" 
    237  "for all data. The \"none\" disables any data compression. The \"favor_lzo\" is not\n" 
    238  "really a separate compressor. It is just a method of combining \"lzo\" and \"zlib\"\n" 
    239  "compressors. Namely, mkfs.ubifs tries to compress data with both \"lzo\" and \"zlib\"\n" 
    240 @@ -653,10 +653,13 @@ static int get_options(int argc, char**a 
    241                                 c->favor_lzo = 1; 
    242                         else if (strcmp(optarg, "zlib") == 0) 
    243                                 c->default_compr = UBIFS_COMPR_ZLIB; 
    244 +                       else if (strcmp(optarg, "xz") == 0) 
    245 +                               c->default_compr = UBIFS_COMPR_XZ; 
    246                         else if (strcmp(optarg, "none") == 0) 
    247                                 c->default_compr = UBIFS_COMPR_NONE; 
    248                         else if (strcmp(optarg, "lzo") != 0) 
     258+"-y, --force-compr=TYPE   force to build the fs with different compression -\n" 
     259+"                         \"lzo\", \"zlib\" or \"none\"\n" 
     260 "-f, --fanout=NUM         fanout NUM (default: 8)\n" 
     261 "-F, --space-fixup        file-system free space has to be fixed up on first mount\n" 
     262 "                         (requires kernel version 3.0 or greater)\n" 
     263@@ -530,6 +536,43 @@ static int open_ubi(const char *node) 
     264        return 0; 
     265 } 
     266  
     267+static const char *get_compr_str(int compr) 
     268+{ 
     269+       switch (compr) { 
     270+       case UBIFS_COMPR_LZO: 
     271+               return "lzo"; 
     272+       case UBIFS_COMPR_ZLIB: 
     273+               return "zlib"; 
     274+       case UBIFS_COMPR_XZ: 
     275+               return "xz"; 
     276+       case UBIFS_COMPR_NONE: 
     277+               return "none"; 
     278+       } 
     279+ 
     280+       return "unknown"; 
     281+} 
     282+ 
     283+static int get_compr_option(char *opt, int *compr_type, int *favor_lzo) 
     284+{ 
     285+       *compr_type = UBIFS_COMPR_LZO; 
     286+ 
     287+       if (favor_lzo) 
     288+               *favor_lzo = 0; 
     289+ 
     290+       if (favor_lzo && strcmp(optarg, "favor_lzo") == 0) 
     291+               *favor_lzo = 1; 
     292+       else if (strcmp(optarg, "zlib") == 0) 
     293+               *compr_type = UBIFS_COMPR_ZLIB; 
     294+       else if (strcmp(optarg, "xz") == 0) 
     295+               *compr_type = UBIFS_COMPR_XZ; 
     296+       else if (strcmp(optarg, "none") == 0) 
     297+               *compr_type = UBIFS_COMPR_NONE; 
     298+       else if (strcmp(optarg, "lzo") != 0) 
     299+               return -1; 
     300+ 
     301+       return 0; 
     302+} 
     303+ 
     304 static int get_options(int argc, char**argv) 
     305 { 
     306        int opt, i; 
     307@@ -649,14 +692,13 @@ static int get_options(int argc, char**a 
     308                                return err_msg("bad key hash"); 
     309                        break; 
     310                case 'x': 
     311-                       if (strcmp(optarg, "favor_lzo") == 0) 
     312-                               c->favor_lzo = 1; 
     313-                       else if (strcmp(optarg, "zlib") == 0) 
     314-                               c->default_compr = UBIFS_COMPR_ZLIB; 
     315-                       else if (strcmp(optarg, "none") == 0) 
     316-                               c->default_compr = UBIFS_COMPR_NONE; 
     317-                       else if (strcmp(optarg, "lzo") != 0) 
    249318-                               return err_msg("bad compressor name"); 
     319+                       if (get_compr_option(optarg, &c->default_compr, 
     320+                                            &c->favor_lzo)) 
    250321+                               return err_msg("bad compressor name '%s'", 
    251 +                                              optarg); 
     322+                                               optarg); 
     323+                       if (c->default_compr == UBIFS_COMPR_XZ) 
     324+                               return err_msg("'%s' can't be used as default compressor", 
     325+                                               optarg); 
    252326                        break; 
    253327                case 'X': 
    254328                        c->favor_percent = strtol(optarg, &endp, 0); 
    255 @@ -765,6 +768,9 @@ static int get_options(int argc, char**a 
    256                 case UBIFS_COMPR_ZLIB: 
    257                         printf("\tcompr:        zlib\n"); 
     329@@ -665,6 +707,12 @@ static int get_options(int argc, char**a 
     330                                return err_msg("bad favor LZO percent '%s'", 
     331                                               optarg); 
    258332                        break; 
    259 +               case UBIFS_COMPR_XZ: 
    260 +                       printf("\tcompr:        xz\n"); 
     333+               case 'y': 
     334+                       if (get_compr_option(optarg, &force_compr, NULL)) 
     335+                               return err_msg("bad forced compressor name '%s'", 
     336+                                               optarg); 
     337+                       force_compr_set = 1; 
    261338+                       break; 
    262                 case UBIFS_COMPR_NONE: 
    263                         printf("\tcompr:        none\n"); 
    264                         break; 
     339                case 'j': 
     340                        c->max_bud_bytes = get_bytes(optarg); 
     341                        if (c->max_bud_bytes <= 0) 
     342@@ -749,6 +797,9 @@ static int get_options(int argc, char**a 
     343                c->min_io_size = 8; 
     344        c->rp_size = add_space_overhead(c->rp_size); 
     345  
     346+       if (force_compr_set == 0) 
     347+               force_compr = c->default_compr; 
     348+ 
     349        if (verbose) { 
     350                printf("mkfs.ubifs\n"); 
     351                printf("\troot:         %s\n", root); 
     352@@ -758,17 +809,10 @@ static int get_options(int argc, char**a 
     353                printf("\toutput:       %s\n", output); 
     354                printf("\tjrn_size:     %llu\n", c->max_bud_bytes); 
     355                printf("\treserved:     %llu\n", c->rp_size); 
     356-               switch (c->default_compr) { 
     357-               case UBIFS_COMPR_LZO: 
     358-                       printf("\tcompr:        lzo\n"); 
     359-                       break; 
     360-               case UBIFS_COMPR_ZLIB: 
     361-                       printf("\tcompr:        zlib\n"); 
     362-                       break; 
     363-               case UBIFS_COMPR_NONE: 
     364-                       printf("\tcompr:        none\n"); 
     365-                       break; 
     366-               } 
     367+               printf("\tcompr:        %s\n", get_compr_str(c->default_compr)); 
     368+               if (forced_compr_set) 
     369+                       printf("\tforced compr: %s\n", 
     370+                              get_compr_str(force_compr)); 
     371                printf("\tkeyhash:      %s\n", (c->key_hash == key_r5_hash) ? 
     372                                                "r5" : "test"); 
     373                printf("\tfanout:       %d\n", c->fanout); 
     374@@ -1353,7 +1397,7 @@ static int add_file(const char *path_nam 
     375                        use_compr = UBIFS_COMPR_LZO; 
     376                else 
     377 #endif 
     378-                       use_compr = c->default_compr; 
     379+                       use_compr = force_compr; 
     380                compr_type = compress_data(buf, bytes_read, &dn->data, 
     381                                           &out_len, use_compr); 
     382                dn->compr_type = cpu_to_le16(compr_type); 
    265383--- a/mkfs.ubifs/mkfs.ubifs.h 
    266384+++ b/mkfs.ubifs/mkfs.ubifs.h 
Note: See TracChangeset for help on using the changeset viewer.