Changeset 760 for Whitix/branches

Show
Ignore:
Timestamp:
07/09/08 15:27:23 (5 months ago)
Author:
mwhitworth
Message:

Add to dirty inode code (actually update the inode in memory), and force commit on inode write.

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • Whitix/branches/fs/fs/ext3/inode.c

    r757 r760  
    8989int Ext3WriteVNode(struct VNode* vNode) 
    9090{ 
    91         KePrint("Ext3WriteVNode\n"); 
    92         return 0; 
     91        int err; 
     92 
     93        /* Force a commit to the journal, to make sure this vNode is written to disk. */ 
     94        PreemptDisable(); 
     95        err=JournalForceCommit(EXT3_JOURNAL(vNode)); 
     96        PreemptEnable(); 
     97 
     98        return err; 
    9399} 
    94100 
     
    107113 
    108114        return err; 
     115} 
     116 
     117int Ext3INodeUpdate(struct JournalHandle* handle, struct VNode* vNode, 
     118        struct Buffer* buffer, struct Ext3INode* iNode) 
     119{ 
     120        if (handle) 
     121        { 
     122                /* Call GetWriteAccess? */ 
     123        } 
     124 
     125        /* Fill in the raw inode structure. */ 
     126        iNode->aTime=vNode->aTime.seconds; 
     127        iNode->cTime=vNode->cTime.seconds; 
     128        iNode->mTime=vNode->mTime.seconds; 
     129        iNode->size=vNode->size; 
     130 
     131        /* TODO: Complete. */ 
     132 
     133        JournalDirtyMetadata(handle, buffer); 
     134 
     135        BufferRelease(buffer); 
     136 
     137        return 0; 
    109138} 
    110139 
     
    114143        struct Buffer* buffer; 
    115144        struct Ext3INode* iNode; 
     145        int err=0; 
    116146 
    117147        handle=JournalStart(EXT3_JOURNAL(vNode), 2); 
     
    119149        if (handle) 
    120150        { 
    121                 Ext3INodeReserveWrite(handle, vNode, &buffer, &iNode); 
    122         } 
    123  
    124         return 0; 
     151                err=Ext3INodeReserveWrite(handle, vNode, &buffer, &iNode); 
     152 
     153                if (!err) 
     154                { 
     155                        BufferGet(buffer); 
     156                        err=Ext3INodeUpdate(handle, vNode, buffer, iNode); 
     157                        BufferRelease(buffer); 
     158                } 
     159        } 
     160 
     161        JournalStop(handle); 
     162 
     163        return err; 
    125164} 
    126165 
    127166int Ext3Lookup(struct VNode** retVal,struct VNode* dir,char* name,int nameLength) 
    128167{ 
    129         int i=0; 
     168        DWORD i=0; 
    130169        struct Ext3DirEntry* ext3Entry; 
    131170        int bytesPerSec=BYTES_PER_SECTOR(dir->superBlock); 
    132171 
    133         while (i<dir->size) 
     172        while (i < dir->size) 
    134173        { 
    135174                int block=i/bytesPerSec;