Changeset 2bbbfd3 in mainline


Ignore:
Timestamp:
2011-04-05T19:28:23Z (13 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
7bd68e6
Parents:
af8ce880
Message:

Add functions to add or remove zones from inodes

Location:
uspace/srv/fs/minixfs
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/minixfs/mfs.h

    raf8ce880 r2bbbfd3  
    163163put_inode(struct mfs_node *mnode);
    164164
    165 /*mfs_read.c*/
    166 int read_map(uint32_t *b, const struct mfs_node *mnode, const uint32_t pos);
     165/*mfs_rw.c*/
     166extern int
     167read_map(uint32_t *b, const struct mfs_node *mnode, const uint32_t pos);
     168
     169extern int
     170write_map(struct mfs_node *mnode, uint32_t pos, uint32_t new_zone,
     171                                uint32_t *old_zone);
     172
     173extern int
     174free_zone(struct mfs_node *mnode, const uint32_t zone);
    167175
    168176/*mfs_dentry.c*/
  • uspace/srv/fs/minixfs/mfs_rw.c

    raf8ce880 r2bbbfd3  
    11/*
     2g
    23 * Copyright (c) 2011 Maurizio Lombardi
    34 * All rights reserved.
     
    5253 *Returns zero if the block does not exist.
    5354 */
    54 int read_map(uint32_t *b, const struct mfs_node *mnode, const uint32_t pos)
     55int
     56read_map(uint32_t *b, const struct mfs_node *mnode, uint32_t pos)
    5557{
    5658        int r;
    57 
    58         assert(mnode);
    59         assert(mnode->instance);
    60 
    6159        const struct mfs_sb_info *sbi = mnode->instance->sbi;
    62         assert(sbi);
    63 
    6460        const int block_size = sbi->block_size;
    6561
     
    7975}
    8076
     77int
     78write_map(struct mfs_node *mnode, const uint32_t pos, uint32_t new_zone,
     79                                uint32_t *old_zone)
     80{
     81        const struct mfs_sb_info *sbi = mnode->instance->sbi;
     82        const int block_size = sbi->block_size;
     83
     84        /*Compute the relative block number in file*/
     85        int rblock = pos / block_size;
     86
     87        return rw_map_ondisk(old_zone, mnode, rblock, true, new_zone);
     88}
     89
     90int
     91free_zone(struct mfs_node *mnode, const uint32_t zone)
     92{
     93        int r;
     94        uint32_t old_zone;
     95
     96        r = rw_map_ondisk(&old_zone, mnode, zone, true, 0);
     97        if (r != EOK)
     98                return r;
     99
     100        if (old_zone > 0)
     101                mfs_free_bit(mnode->instance, old_zone, BMAP_ZONE);
     102
     103        return EOK;
     104}
     105
    81106static int
    82107rw_map_ondisk(uint32_t *b, const struct mfs_node *mnode, int rblock,
     
    98123        assert(sbi);
    99124
    100         const int fs_version = sbi->fs_version;
     125        const mfs_version_t fs_version = sbi->fs_version;
    101126
    102127        if (fs_version == MFS_VERSION_V1) {
     
    115140                        ino_i->dirty = true;
    116141                }
    117                 r = EOK;
    118                 goto out;
     142                return EOK;
    119143        }
    120144        rblock -= nr_direct - 1;
     
    127151                                r = alloc_zone_and_clear(inst, &block);
    128152                                if (r != EOK)
    129                                         goto out;
     153                                        return r;
    130154
    131155                                ino_i->i_izone[0] = block;
    132156                                ino_i->dirty = true;
    133                         } else {
    134                                 r = -1;
    135                                 goto out;
    136                         }
     157                        } else
     158                                return -1;
    137159                }
    138160
     
    140162                                BLOCK_FLAGS_NONE);
    141163                if (r != EOK)
    142                         goto out;
     164                        return r;
    143165
    144166                if (fs_version == MFS_VERSION_V1) {
     
    171193                        r = alloc_zone_and_clear(inst, &block);
    172194                        if (r != EOK)
    173                                 goto out;
     195                                return r;
    174196
    175197                        ino_i->i_izone[1] = block;
    176198                        ino_i->dirty = true;
    177                 } else {
    178                         r = -1;
    179                         goto out;
    180                 }
     199                } else
     200                        return -1;
    181201        }
    182202
    183203        r = block_get(&bi1, inst->handle, ino_i->i_izone[1],
    184204                        BLOCK_FLAGS_NONE);
    185 
    186205        if (r != EOK)
    187                 goto out;
     206                return r;
    188207
    189208        /*
     
    203222                                r = alloc_zone_and_clear(inst, &block);
    204223                                if (r != EOK)
    205                                         goto out;
     224                                        return r;
    206225
    207226                                blk = block;
    208227                                pt16[ind2_block] = conv16(sbi->native, blk);
    209228                                bi1->dirty = true;
    210                         } else {
    211                                 r = -1;
    212                                 goto out;
    213                         }
     229                        } else
     230                                return -1;
    214231                }
    215232       
     
    235252                                r = alloc_zone_and_clear(inst, &block);
    236253                                if (r != EOK)
    237                                         goto out;
     254                                        return r;
    238255
    239256                                blk = block;
    240257                                pt32[ind2_block] = conv32(sbi->native, blk);
    241258                                bi1->dirty = true;
    242                         } else {
    243                                 r = -1;
    244                                 goto out;
    245                         }
     259                        } else
     260                                return -1;
    246261                }
    247262       
     
    264279out_put_1:
    265280        block_put(bi1);
    266 out:
    267281        return r;
    268282}
Note: See TracChangeset for help on using the changeset viewer.