Changeset 799 for Whitix/branches/fs/fs/journal/checkpoint.c
- Timestamp:
- 07/14/08 20:33:28 (4 months ago)
- Files:
-
- 1 modified
-
Whitix/branches/fs/fs/journal/checkpoint.c (modified) (5 diffs)
Legend:
- Unmodified
- Added
- Removed
-
Whitix/branches/fs/fs/journal/checkpoint.c
r787 r799 41 41 42 42 // KePrint("transaction->id = %u, %u\n", transaction->transId, blockNo); 43 }else if ((transaction = journal->committingTrans) || (transaction = journal->currTransaction)) 44 { 45 firstTid=transaction->transId; 46 blockNo=transaction->logStart; 43 47 }else{ 44 48 // KePrint("JournalCleanupTail: list empty!\n"); … … 49 53 50 54 if (journal->tailSequence == firstTid) 51 {52 55 return 1; 53 }54 56 55 57 freed=blockNo-journal->tail; 56 58 57 //KePrint("Journal tail from %d to %d (offset %u), freed %d\n", journal->tailSequence, firstTid, blockNo, freed);59 KePrint("Journal tail from %d to %d (offset %u), freed %d\n", journal->tailSequence, firstTid, blockNo, freed); 58 60 59 61 journal->free+=freed; … … 68 70 struct JournalTrans* curr, *curr2; 69 71 struct JournalHead* currHead, *currHead2; 72 int ret; 73 74 JournalLock(journal); 70 75 71 JournalCleanupTail(journal);76 ret=JournalCleanupTail(journal); 72 77 73 JournalLock(journal); 78 if (ret <= 0) 79 goto out; 80 81 ListForEachEntry(curr, &journal->checkpointTrans, next) 82 { 83 ListForEachEntry(currHead, &curr->forgetList, next) 84 { 85 BlockWrite(currHead->buffer->device, currHead->buffer); 86 // KePrint("Wrote %u\n", currHead->buffer->blockNum); 87 } 88 } 74 89 75 90 ListForEachEntrySafe(curr, curr2, &journal->checkpointTrans, next) … … 77 92 ListForEachEntrySafe(currHead, currHead2, &curr->forgetList, next) 78 93 { 79 BlockWrite(currHead->buffer->device, currHead->buffer); 80 // KePrint("Wrote %u\n", currHead->buffer->blockNum); 94 WaitForBuffer(currHead->buffer); 81 95 ListRemove(&currHead->next); 96 JournalRemoveHeader(currHead); 82 97 } 98 99 INIT_LIST_HEAD(&curr->forgetList); 83 100 84 101 ListRemove(&curr->next); 85 102 } 86 87 JournalUnlock(journal);103 104 INIT_LIST_HEAD(&journal->checkpointTrans); 88 105 89 106 /* Clean up the tail. */ … … 92 109 /* Update the superblock. */ 93 110 JournalUpdateSuperBlock(journal); 111 112 out: 113 JournalUnlock(journal); 94 114 95 115 return 0;
