1272286Sjkim/* 2272286Sjkim * Copyright 2001-2010, Haiku Inc. All rights reserved. 3272286Sjkim * This file may be used under the terms of the MIT License. 4272286Sjkim * 5272286Sjkim * Authors: 6272286Sjkim * Janito V. Ferreira Filho 7272286Sjkim */ 8306536Sjkim 9272286Sjkim 10272286Sjkim#include "InodeJournal.h" 11272286Sjkim 12272286Sjkim#include <new> 13272286Sjkim 14272286Sjkim#include <fs_cache.h> 15272286Sjkim 16272286Sjkim#include "HashRevokeManager.h" 17272286Sjkim 18272286Sjkim 19272286Sjkim//#define TRACE_EXT2 20272286Sjkim#ifdef TRACE_EXT2 21272286Sjkim# define TRACE(x...) dprintf("\33[34mext2:\33[0m " x) 22272286Sjkim#else 23272286Sjkim# define TRACE(x...) ; 24272286Sjkim#endif 25272286Sjkim 26272286Sjkim 27272286SjkimInodeJournal::InodeJournal(Inode* inode) 28272286Sjkim : 29272286Sjkim Journal(), 30272286Sjkim fInode(inode) 31272286Sjkim{ 32272286Sjkim if (inode == NULL) 33272286Sjkim fInitStatus = B_BAD_DATA; 34272286Sjkim else { 35272286Sjkim Volume* volume = inode->GetVolume(); 36272286Sjkim 37272286Sjkim fFilesystemVolume = volume; 38272286Sjkim fFilesystemBlockCache = volume->BlockCache(); 39272286Sjkim fJournalVolume = volume; 40272286Sjkim fJournalBlockCache = volume->BlockCache(); 41272286Sjkim 42272286Sjkim if (!inode->IsFileCacheDisabled()) 43272286Sjkim fInitStatus = inode->DisableFileCache(); 44272444Sjkim else 45272444Sjkim fInitStatus = B_OK; 46272444Sjkim 47272444Sjkim if (fInitStatus == B_OK) { 48272286Sjkim TRACE("InodeJournal::InodeJournal(): Inode's file cache disabled " 49272444Sjkim "successfully\n"); 50272444Sjkim HashRevokeManager* revokeManager = new(std::nothrow) 51272444Sjkim HashRevokeManager; 52272444Sjkim TRACE("InodeJournal::InodeJournal(): Allocated a hash revoke " 53272286Sjkim "manager at %p\n", revokeManager); 54272286Sjkim 55272286Sjkim if (revokeManager == NULL) { 56272286Sjkim TRACE("InodeJournal::InodeJournal(): Insufficient memory to " 57272286Sjkim "create the hash revoke manager\n"); 58272286Sjkim fInitStatus = B_NO_MEMORY; 59272286Sjkim } else { 60272286Sjkim fInitStatus = revokeManager->Init(); 61272286Sjkim 62272286Sjkim if (fInitStatus == B_OK) { 63272286Sjkim fRevokeManager = revokeManager; 64272286Sjkim fInitStatus = _LoadSuperBlock(); 65272286Sjkim } else 66272286Sjkim delete revokeManager; 67272286Sjkim } 68272286Sjkim } 69272286Sjkim } 70272286Sjkim} 71272286Sjkim 72272286Sjkim 73272286SjkimInodeJournal::~InodeJournal() 74272286Sjkim{ 75272286Sjkim} 76272286Sjkim 77272286Sjkim 78272286Sjkimstatus_t 79272286SjkimInodeJournal::InitCheck() 80272286Sjkim{ 81272286Sjkim if (fInitStatus != B_OK) 82272286Sjkim TRACE("InodeJournal: Initialization error\n"); 83272286Sjkim return fInitStatus; 84272286Sjkim} 85272286Sjkim 86272286Sjkim 87272286Sjkimstatus_t 88272286SjkimInodeJournal::MapBlock(off_t logical, fsblock_t& physical) 89272286Sjkim{ 90272286Sjkim TRACE("InodeJournal::MapBlock()\n"); 91272286Sjkim return fInode->FindBlock(logical * fBlockSize, physical); 92272286Sjkim} 93272286Sjkim