* Applied patch by Janito that solves a TODO and utilizes the actual device
block size to align the file map. * This closes ticket #5707, thanks! git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36144 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -344,7 +344,7 @@ Volume::Mount(const char* deviceName, uint32 flags)
|
|||||||
|
|
||||||
// check if the device size is large enough to hold the file system
|
// check if the device size is large enough to hold the file system
|
||||||
off_t diskSize;
|
off_t diskSize;
|
||||||
if (opener.GetSize(&diskSize) != B_OK)
|
if (opener.GetSize(&diskSize, &fDeviceBlockSize) != B_OK)
|
||||||
RETURN_ERROR(B_ERROR);
|
RETURN_ERROR(B_ERROR);
|
||||||
if (diskSize < (NumBlocks() << BlockShift()))
|
if (diskSize < (NumBlocks() << BlockShift()))
|
||||||
RETURN_ERROR(B_BAD_VALUE);
|
RETURN_ERROR(B_BAD_VALUE);
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ public:
|
|||||||
off_t FreeBlocks() const
|
off_t FreeBlocks() const
|
||||||
{ return NumBlocks() - UsedBlocks(); }
|
{ return NumBlocks() - UsedBlocks(); }
|
||||||
|
|
||||||
|
uint32 DeviceBlockSize() const { return fDeviceBlockSize; }
|
||||||
uint32 BlockSize() const { return fBlockSize; }
|
uint32 BlockSize() const { return fBlockSize; }
|
||||||
uint32 BlockShift() const { return fBlockShift; }
|
uint32 BlockShift() const { return fBlockShift; }
|
||||||
uint32 InodeSize() const
|
uint32 InodeSize() const
|
||||||
@@ -142,6 +143,7 @@ protected:
|
|||||||
int fDevice;
|
int fDevice;
|
||||||
disk_super_block fSuperBlock;
|
disk_super_block fSuperBlock;
|
||||||
|
|
||||||
|
uint32 fDeviceBlockSize;
|
||||||
uint32 fBlockSize;
|
uint32 fBlockSize;
|
||||||
uint32 fBlockShift;
|
uint32 fBlockShift;
|
||||||
uint32 fAllocationGroupShift;
|
uint32 fAllocationGroupShift;
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2001-2009, Axel Dörfler, [email protected].
|
* Copyright 2001-2010, Axel Dörfler, [email protected].
|
||||||
* This file may be used under the terms of the MIT License.
|
* This file may be used under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -87,9 +87,9 @@ iterative_io_get_vecs_hook(void* cookie, io_request* request, off_t offset,
|
|||||||
size_t size, struct file_io_vec* vecs, size_t* _count)
|
size_t size, struct file_io_vec* vecs, size_t* _count)
|
||||||
{
|
{
|
||||||
Inode* inode = (Inode*)cookie;
|
Inode* inode = (Inode*)cookie;
|
||||||
return file_map_translate(inode->Map(), offset, size, vecs, _count, 512);
|
|
||||||
// TODO: Use the actual block size of the underlying device for the
|
return file_map_translate(inode->Map(), offset, size, vecs, _count,
|
||||||
// alignment!
|
inode->GetVolume()->BlockSize());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user