Changeset cdab59e in mainline


Ignore:
Timestamp:
2011-04-03T12:45:11Z (13 years ago)
Author:
Maurizio Lombardi <m.lombardi85@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
77bb55b
Parents:
586f123
Message:

Add mfs2_write_inode_raw() function to write back a dirty inode to disk

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/fs/minixfs/mfs_inode.c

    r586f123 rcdab59e  
    4141mfs_write_inode_raw(struct mfs_node *mnode);
    4242
     43static int
     44mfs2_write_inode_raw(struct mfs_node *mnode);
     45
    4346struct mfs_ino_info *
    4447mfs_read_inode_raw(const struct mfs_instance *instance, uint16_t inum)
     
    174177        if (sbi->fs_version == MFS_VERSION_V1)
    175178                rc = mfs_write_inode_raw(mnode);
    176         else {
    177                 /*rc = mfs2_write_inode_raw(mnode);*/
    178         }
     179        else
     180                rc = mfs2_write_inode_raw(mnode);
    179181
    180182out:
     
    224226}
    225227
     228static int
     229mfs2_write_inode_raw(struct mfs_node *mnode)
     230{
     231        struct mfs_ino_info *ino_i = mnode->ino_i;
     232        struct mfs_sb_info *sbi = mnode->instance->sbi;
     233        block_t *b;
     234        int i, r;
     235
     236        const int itable_off = sbi->itable_off;
     237        const int ino_off = ino_i->index % sbi->ino_per_block;
     238        const bool native = sbi->native;
     239       
     240        r = block_get(&b, mnode->instance->handle,
     241                                itable_off + ino_i->index / sbi->ino_per_block,
     242                                BLOCK_FLAGS_NONE);
     243
     244        if (r != EOK)
     245                goto out;
     246
     247        struct mfs2_inode *ino2 = b->data;
     248        ino2 += ino_off;
     249
     250        ino2->i_mode = conv16(native, ino_i->i_mode);
     251        ino2->i_nlinks = conv16(native, ino_i->i_mode);
     252        ino2->i_uid = conv16(native, ino_i->i_uid);
     253        ino2->i_gid = conv16(native, ino_i->i_gid);
     254        ino2->i_size = conv32(native, ino_i->i_size);   
     255        ino2->i_atime = conv32(native, ino_i->i_atime);
     256        ino2->i_mtime = conv32(native, ino_i->i_mtime);
     257        ino2->i_ctime = conv32(native, ino_i->i_ctime);
     258
     259        for (i = 0; i < V2_NR_DIRECT_ZONES; ++i)
     260                ino2->i_dzone[i] = conv32(native, ino_i->i_dzone[i]);
     261
     262        for (i = 0; i < V2_NR_INDIRECT_ZONES; ++i)
     263                ino2->i_izone[i] = conv32(native, ino_i->i_izone[i]);
     264
     265        b->dirty = true;
     266        block_put(b);
     267        ino_i->dirty = false;
     268
     269out:
     270        return r;
     271}
     272
    226273/**
    227274 * @}
Note: See TracChangeset for help on using the changeset viewer.