1/* 2 * Copyright 2001-2010, Haiku Inc. All rights reserved. 3 * This file may be used under the terms of the MIT License. 4 * 5 * Authors: 6 * Janito V. Ferreira Filho 7 */ 8#ifndef INODEALLOCATOR_H 9#define INODEALLOCATOR_H 10 11#include <lock.h> 12 13#include "ext2.h" 14#include "Transaction.h" 15 16 17class Inode; 18class Volume; 19 20 21class InodeAllocator { 22public: 23 InodeAllocator(Volume* volume); 24 virtual ~InodeAllocator(); 25 26 virtual status_t New(Transaction& transaction, Inode* parent, 27 int32 mode, ino_t& id); 28 virtual status_t Free(Transaction& transaction, ino_t id, 29 bool isDirectory); 30 31private: 32 status_t _Allocate(Transaction& transaction, 33 uint32 preferredBlockGroup, bool isDirectory, 34 ino_t& id); 35 status_t _AllocateInGroup(Transaction& transaction, 36 uint32 blockGroup, bool isDirectory, 37 ino_t& id, uint32 numInodes); 38 status_t _MarkInBitmap(Transaction& transaction, 39 fsblock_t bitmapBlock, uint32 blockGroup, 40 uint32 numInodes, uint32& pos, uint32& checksum); 41 status_t _UnmarkInBitmap(Transaction& transaction, 42 fsblock_t bitmapBlock, uint32 numInodes, ino_t id, 43 uint32& checksum); 44 status_t _InitGroup(Transaction& transaction, 45 ext2_block_group* group, fsblock_t bitmapBlock, 46 uint32 numInodes); 47 void _SetInodeBitmapChecksum(ext2_block_group* group, 48 uint32 checksum); 49 50 Volume* fVolume; 51 mutex fLock; 52}; 53 54#endif // INODEALLOCATOR_H 55