root/src/add-ons/kernel/file_systems/ext2/NoJournal.cpp
/*
 * Copyright 2001-2010, Haiku Inc. All rights reserved.
 * This file may be used under the terms of the MIT License.
 *
 * Authors:
 *              Janito V. Ferreira Filho
 */


#include "NoJournal.h"

#include <string.h>

#include <fs_cache.h>


//#define TRACE_EXT2
#ifdef TRACE_EXT2
#       define TRACE(x...) dprintf("\33[34mext2:\33[0m " x)
#else
#       define TRACE(x...) ;
#endif


NoJournal::NoJournal(Volume* volume)
        :
        Journal()
{
        fFilesystemVolume = volume;
        fFilesystemBlockCache = volume->BlockCache();
        fJournalVolume = volume;
        fHasSubTransaction = false;
        fSeparateSubTransactions = false;
}


NoJournal::~NoJournal()
{
}


status_t
NoJournal::InitCheck()
{
        return B_OK;
}


status_t
NoJournal::Recover()
{
        return B_OK;
}


status_t
NoJournal::StartLog()
{
        return B_OK;
}


status_t
NoJournal::Lock(Transaction* owner, bool separateSubTransactions)
{
        status_t status = block_cache_sync(fFilesystemBlockCache);
        TRACE("NoJournal::Lock(): block_cache_sync: %s\n", strerror(status));
        
        if (status == B_OK)
                status = Journal::Lock(owner, separateSubTransactions);
        
        return status;
}


status_t
NoJournal::Unlock(Transaction* owner, bool success)
{
        TRACE("NoJournal::Unlock\n");
        return Journal::Unlock(owner, success);
}


status_t
NoJournal::_WriteTransactionToLog()
{
        TRACE("NoJournal::_WriteTransactionToLog(): Ending transaction %" B_PRId32
                "\n", fTransactionID);

        fTransactionID = cache_end_transaction(fFilesystemBlockCache,
                fTransactionID, _TransactionWritten, NULL);
        
        return B_OK;
}


/*static*/ void
NoJournal::_TransactionWritten(int32 transactionID, int32 event, void* param)
{
        TRACE("Transaction %" B_PRId32" checkpointed\n", transactionID);
}