Fork us on GitHub Follow us on Facebook Follow us on Twitter

Changeset 99f043e in mainline


Ignore:
Timestamp:
2011-07-28T19:53:21Z (10 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master
Children:
bb8cd79
Parents:
e91b898
Message:

Compute the maximum size of each inode

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/app/mkminix/mkminix.c

    re91b898 r99f043e  
    446446{
    447447        aoff64_t inodes;
     448        unsigned long ind;
     449        unsigned long ind2;
     450        unsigned long zones;
    448451        int rc;
    449452
     
    457460                sb->n_zones = sb->dev_nblocks > UINT16_MAX ?
    458461                                UINT16_MAX : sb->dev_nblocks;
     462                ind = MFS_BLOCKSIZE / sizeof(uint16_t);
     463                ind2 = ind * ind;
     464                sb->max_file_size = (V1_NR_DIRECT_ZONES + ind + ind2) * MFS_BLOCKSIZE;
    459465        } else {
    460466                /*Valid for MFS V2/V3*/
     467                size_t ptrsize;
     468                if (sb->fs_version == 2)
     469                        ptrsize = sizeof(uint16_t);
     470                else
     471                        ptrsize = sizeof(uint32_t);
     472                ind = sb->block_size / ptrsize;
     473                ind2 = ind * ind;
     474                zones = V2_NR_DIRECT_ZONES + ind + ind2;
     475                sb->max_file_size = zones * sb->block_size;
    461476                sb->n_zones = sb->dev_nblocks > UINT32_MAX ?
    462477                                UINT32_MAX : sb->dev_nblocks;
    463478
    464479                if (sb->fs_version == 3) {
     480                        if(INT32_MAX / sb->block_size < zones)
     481                                sb->max_file_size = INT32_MAX;
    465482                        sb->ino_per_block = V3_INODES_PER_BLOCK(sb->block_size);
    466483                        sb->n_zones /= (sb->block_size / MFS_MIN_BLOCKSIZE);
     
    512529        printf(NAME ": zone bitmap blocks = %ld\n", sb->zbmap_blocks);
    513530        printf(NAME ": first data zone = %d\n", (uint32_t) sb->first_data_zone);
     531        printf(NAME ": max file size = %u\n", sb->max_file_size);
    514532        printf(NAME ": long fnames = %s\n", sb->longnames ? "Yes" : "No");
    515533
     
    545563        sb->s_first_data_zone = (uint16_t) sbi->first_data_zone;
    546564        sb->s_log2_zone_size = sbi->log2_zone_size;
    547         sb->s_max_file_size = UINT32_MAX;
     565        sb->s_max_file_size = sbi->max_file_size;
    548566        sb->s_magic = sbi->magic;
    549567        sb->s_state = MFS_VALID_FS;
     
    577595        sb->s_first_data_zone = (uint16_t) sbi->first_data_zone;
    578596        sb->s_log2_zone_size = sbi->log2_zone_size;
    579         sb->s_max_file_size = UINT32_MAX;
     597        sb->s_max_file_size = sbi->max_file_size;
    580598        sb->s_magic = sbi->magic;
    581599        sb->s_block_size = sbi->block_size;
Note: See TracChangeset for help on using the changeset viewer.