Changeset 784
- Timestamp:
- 07/13/08 20:42:47 (3 months ago)
- Location:
- Whitix/branches/fs/fs/ext3
- Files:
-
- 2 modified
Legend:
- Unmodified
- Added
- Removed
-
Whitix/branches/fs/fs/ext3/Makefile
r747 r784 1 1 DEPTH=../../ 2 MODULES = super.sys inode.sys file.sys 2 MODULES = super.sys inode.sys file.sys ialloc.sys balloc.sys 3 3 4 4 build: $(MODULES) -
Whitix/branches/fs/fs/ext3/super.c
r752 r784 23 23 #include <print.h> 24 24 25 int Ext3FreeSuper(struct VfsSuperBlock* superBlock); 26 25 27 struct SuperBlockOps ext3SbOps={ 26 28 .readVNode = Ext3ReadVNode, 27 29 .writeVNode = Ext3WriteVNode, 28 30 .dirtyVNode = Ext3DirtyVNode, 31 .freeSuper = Ext3FreeSuper, 29 32 }; 30 33 … … 32 35 .lookup = Ext3Lookup, 33 36 .blockMap = Ext3BlockMap, 37 .create = Ext3Create, 38 .truncate = Ext3Truncate, 34 39 }; 35 40 … … 40 45 }; 41 46 47 int Ext3FreeSuper(struct VfsSuperBlock* superBlock) 48 { 49 struct Ext3SbInfo* sb=EXT3_SUPERINFO(superBlock); 50 51 if (sb && sb->journal) 52 JournalDestroy(sb->journal); 53 54 if (sb) 55 free(sb); 56 57 return 0; 58 } 59 42 60 int Ext3JournalSetup(struct VfsSuperBlock* superBlock, struct Ext3SuperBlock* sb, DWORD iNo) 43 61 { … … 51 69 return 0; 52 70 } 71 72 if (!journal->size) 73 { 74 KePrint(KERN_ERROR "EXT3: Zero length journal present\n"); 75 return -EINVAL; 76 } 53 77 54 78 /* The journal node must be used (i.e. linked to somewhere). Check! */ … … 58 82 /* Let the journal layer handle the replaying. */ 59 83 EXT3_SUPERINFO(superBlock)->journal=JournalCreate(journal); 84 85 if (!journal) 86 return -EIO; 87 88 JournalSetUuid(EXT3_SUPERINFO(superBlock)->journal, sb->journalUuid); 60 89 61 90 return 0; … … 68 97 if (sb->journalINum) 69 98 { 70 Ext3JournalSetup(superBlock, sb, sb->journalINum);99 return Ext3JournalSetup(superBlock, sb, sb->journalINum); 71 100 }else 72 101 KePrint("Ext3JournalInit: get dev journal\n"); 73 102 74 return 0;103 return -ENOTIMPL; 75 104 } 76 105 … … 80 109 unsigned long block; 81 110 82 /* TODO: Figure out logic superblock sector. */ 83 84 return i+1; 111 return sb->sbSector+i+1; 85 112 86 113 /* Check features for meta block group */ … … 90 117 return sb->firstDataBlock+(block*sb->blocksPerGrp); 91 118 #endif 119 } 120 121 int Ext3ReadSuperBlock(struct VfsSuperBlock* superBlock, struct Ext3SbInfo* sbInfo) 122 { 123 int sector, offset; 124 125 sector=1*1024/BYTES_PER_SECTOR(superBlock); 126 offset=(1*1024) % BYTES_PER_SECTOR(superBlock); 127 128 sbInfo->sbBuffer=BlockRead(superBlock->sDevice, sector); 129 sbInfo->super=(struct Ext3SuperBlock*)((sbInfo->sbBuffer->data)+offset); 130 sbInfo->sbSector=sector; 92 131 } 93 132 … … 138 177 139 178 sbInfo->firstDataBlock=sb.firstDataBlock; 179 180 /* Read in the superblock again. */ 181 Ext3ReadSuperBlock(retVal, sbInfo); 140 182 141 183 /* And set the Ext3-specific parts of the superblock structure. */ … … 158 200 if (EXT3_FEATURE_COMPAT(&sb, EXT3_FEATURE_COMPAT_JOURNAL)) 159 201 { 160 Ext3JournalInit(retVal, &sb); 202 if (Ext3JournalInit(retVal, &sb)) 203 goto descsFree; 204 205 /* Write journal superblock. */ 161 206 } 162 207
