Changeset 92dd5c8 in mainline


Ignore:
Timestamp:
2011-03-13T20:14:29Z (13 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
245eb02d
Parents:
ccbc5b56
Message:

Read superblock and look for a corrispondent magic number, fix first data zone calculation in mkminix

Location:
uspace
Files:
4 edited

Legend:

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

    rccbc5b56 r92dd5c8  
    5858#define UPPER(n, size)                  (((n) / (size)) + (((n) % (size)) != 0))
    5959#define NEXT_DENTRY(p, dirsize)         (p += dirsize)
    60 #define FIRST_ZONE(bs)                  ((MFS_BOOTBLOCK_SIZE + MFS_SUPERBLOCK_SIZE) / (bs))
     60#define FIRST_ZONE(bs)                  (1 + (bs) / MFS_MIN_BLOCKSIZE)
    6161#define CONVERT_1K_OFF(off, bs)         ((off) * ((bs) / MFS_MIN_BLOCKSIZE))
    6262
     
    329329
    330330        /*Convert to 1K offset*/
    331         itable_off = CONVERT_1K_OFF(itable_off, sb->block_size) + 2;
     331        itable_off = CONVERT_1K_OFF(itable_off, sb->block_size) +
     332                                        FIRST_ZONE(sb->block_size);
    332333        itable_size = CONVERT_1K_OFF(sb->itable_size, sb->block_size);
    333334
     
    392393
    393394        /*Convert to 1K block offset*/
    394         itable_off = CONVERT_1K_OFF(itable_off, sb->block_size) + 2;
     395        itable_off = CONVERT_1K_OFF(itable_off, sb->block_size) +
     396                                        FIRST_ZONE(sb->block_size);
    395397
    396398        const time_t sec = time(NULL);
     
    468470
    469471        /*Compute first data zone position*/
    470         sb->first_data_zone = FIRST_ZONE(sb->block_size) + sb->itable_size +
     472        sb->first_data_zone = 2 + sb->itable_size +
    471473                                sb->zbmap_blocks + sb->ibmap_blocks;
    472474
     
    582584        zbmap_buf8 = (uint8_t *) zbmap_buf;
    583585
    584         int start_block = 2;
     586        int start_block = FIRST_ZONE(sb->block_size);
    585587
    586588        for (i = 0; i < ibmap_nblocks; ++i) {
     
    590592        }
    591593
    592         start_block = 2 + ibmap_nblocks;
     594        start_block = FIRST_ZONE(sb->block_size) + ibmap_nblocks;
    593595
    594596        for (i = 0; i < zbmap_nblocks; ++i) {
  • uspace/srv/fs/minixfs/mfs.c

    rccbc5b56 r92dd5c8  
    9797                callid = async_get_call(&call);
    9898                switch  (IPC_GET_IMETHOD(call)) {
    99                 default:
    10099                case IPC_M_PHONE_HUNGUP:
    101100                        return;
    102101                case VFS_OUT_MOUNTED:
     102                        mfsdebug("Mount request received\n");
    103103                        mfs_mounted(callid, &call);
     104                        break;
     105                case VFS_OUT_MOUNT:
     106                        mfsdebug("Mounting...\n");
     107                        break;
     108                default:
     109                        async_answer_0(callid, ENOTSUP);
    104110                        break;
    105111                }
  • uspace/srv/fs/minixfs/mfs.h

    rccbc5b56 r92dd5c8  
    3737#include "../../vfs/vfs.h"
    3838
     39#define DEBUG_MODE
     40
     41#ifdef DEBUG_MODE
     42#define mfsdebug(...)   printf(__VA_ARGS__)
     43#else
     44#define mfsdebug(...)
     45#endif
     46
    3947typedef enum {
    4048        MFS_VERSION_V1 = 1,
  • uspace/srv/fs/minixfs/mfs_super.c

    rccbc5b56 r92dd5c8  
    3232
    3333#include <libfs.h>
     34#include <stdio.h>
    3435#include <stdlib.h>
    3536#include <libblock.h>
     
    4748        devmap_handle_t devmap_handle = (devmap_handle_t) IPC_GET_ARG1(*request);
    4849        enum cache_mode cmode; 
    49         struct mfs3_superblock *sp;
     50        struct mfs_superblock *sp;
    5051        bool native, longnames;
    5152        mfs_version_t version;
     
    5657       
    5758        if (rc != EOK) {
     59                mfsdebug("Can't accept async data write\n");
    5860                async_answer_0(rid, rc);
    5961                return;
     
    6971
    7072        /* initialize libblock */
    71         rc = block_init(devmap_handle, MFS_SUPERBLOCK_SIZE);
     73        rc = block_init(devmap_handle, 1024);
    7274        if (rc != EOK) {
     75                mfsdebug("libblock initialization failed\n");
    7376                async_answer_0(rid, rc);
    7477                return;
    7578        }
    7679
    77         /* prepare the superblock */
    78         rc = block_bb_read(devmap_handle, MFS_SUPERBLOCK);
     80        sp = malloc(MFS_SUPERBLOCK_SIZE);
     81
     82        /* Read the superblock */
     83        rc = block_read_direct(devmap_handle, MFS_SUPERBLOCK << 1, 1, sp);
    7984        if (rc != EOK) {
    8085                block_fini(devmap_handle);
     
    8388        }
    8489
    85         /* get the buffer with the superblock */
    86         sp = block_bb_get(devmap_handle);
    87 
    8890        if (!check_magic_number(sp->s_magic, &native, &version, &longnames)) {
    8991                /*Magic number is invalid!*/
     92                mfsdebug("magic number not recognized\n");
    9093                block_fini(devmap_handle);
    9194                async_answer_0(rid, ENOTSUP);
    9295                return;
    9396        }
     97
     98        mfsdebug("magic number recognized\n");
     99        free(sp);
    94100}
    95101
     
    98104{
    99105        *longfilenames = false;
     106
     107        mfsdebug("magic = %d\n", magic);
    100108
    101109        if (magic == MFS_MAGIC_V1 || magic == MFS_MAGIC_V1R) {
Note: See TracChangeset for help on using the changeset viewer.