* support for setting volume label (bug #7100).

* minor cleanup


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@40243 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval 2011-01-18 19:03:46 +00:00
parent 65012a2746
commit 823a23829a
5 changed files with 43 additions and 5 deletions

View File

@ -83,7 +83,7 @@ ExtentStream::FindBlock(off_t offset, fsblock_t& block, uint32 *_count)
int32 high = stream->extent_header.NumEntries() - 1;
int32 middle = 0;
while (low <= high) {
middle = (high + low) / 2;
middle = (high + low) >> 1;
if (stream->extent_entries[middle].LogicalBlock() == index)
break;
if (stream->extent_entries[middle].LogicalBlock() < index)

View File

@ -266,6 +266,13 @@ Volume::Name() const
}
void
Volume::SetName(const char* name)
{
strlcpy(fSuperBlock.name, name, sizeof(fSuperBlock.name));
}
status_t
Volume::Mount(const char* deviceName, uint32 flags)
{

View File

@ -34,7 +34,7 @@ public:
bool IsValidSuperBlock();
bool IsReadOnly() const
{ return (fFlags & VOLUME_READ_ONLY) != 0; }
mutex& Lock();
bool HasExtendedAttributes() const;
Inode* RootNode() const { return fRootNode; }
@ -44,6 +44,7 @@ public:
{ return fFSVolume ? fFSVolume->id : -1; }
fs_volume* FSVolume() const { return fFSVolume; }
const char* Name() const;
void SetName(const char* name);
uint32 NumInodes() const
{ return fNumInodes; }
@ -174,4 +175,11 @@ private:
Inode* fRootNode;
};
inline mutex&
Volume::Lock()
{
return fLock;
}
#endif // VOLUME_H

View File

@ -177,6 +177,28 @@ ext2_read_fs_info(fs_volume* _volume, struct fs_info* info)
}
static status_t
ext2_write_fs_info(fs_volume* _volume, const struct fs_info* info, uint32 mask)
{
Volume* volume = (Volume*)_volume->private_volume;
if (volume->IsReadOnly())
return B_READ_ONLY_DEVICE;
MutexLocker locker(volume->Lock());
status_t status = B_BAD_VALUE;
if (mask & FS_WRITE_FSINFO_NAME) {
Transaction transaction(volume->GetJournal());
volume->SetName(info->volume_name);
status = volume->WriteSuperBlock(transaction);
transaction.Done();
}
return status;
}
static status_t
ext2_sync(fs_volume* _volume)
{
@ -1629,7 +1651,7 @@ ext2_remove_attr(fs_volume* _volume, fs_vnode* vnode,
fs_volume_ops gExt2VolumeOps = {
&ext2_unmount,
&ext2_read_fs_info,
NULL, // write_fs_info()
&ext2_write_fs_info,
&ext2_sync,
&ext2_get_vnode,
};
@ -1717,7 +1739,8 @@ static file_system_module_info sExt2FileSystem = {
"ext2", // short_name
"Ext2 File System", // pretty_name
B_DISK_SYSTEM_SUPPORTS_WRITING, // DDM flags
B_DISK_SYSTEM_SUPPORTS_WRITING
| B_DISK_SYSTEM_SUPPORTS_CONTENT_NAME, // DDM flags
// scanning
ext2_identify_partition,