Added scan_partition() function which can be used by disk systems (e.g.
in *_initialize()) to save some work. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22441 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
088136f66b
commit
8c8f8c8420
@ -102,22 +102,25 @@ partition_data *get_child_partition(partition_id partitionID, int32 index);
|
||||
// partition write access
|
||||
// (write lock required)
|
||||
partition_data *create_child_partition(partition_id partitionID, int32 index,
|
||||
partition_id childID);
|
||||
partition_id childID);
|
||||
// childID is an optional input parameter -- -1 to be ignored
|
||||
bool delete_partition(partition_id partitionID);
|
||||
void partition_modified(partition_id partitionID);
|
||||
// tells the disk device manager, that the parition has been modified
|
||||
|
||||
status_t scan_partition(partition_id partitionID);
|
||||
// Service method for disks systems: Synchronously scans the partition.
|
||||
// Device must not be locked.
|
||||
|
||||
// disk systems
|
||||
disk_system_id find_disk_system(const char *name);
|
||||
|
||||
// jobs
|
||||
bool update_disk_device_job_progress(disk_job_id jobID, float progress);
|
||||
bool update_disk_device_job_extra_progress(disk_job_id jobID,
|
||||
const char *info);
|
||||
bool update_disk_device_job_extra_progress(disk_job_id jobID, const char *info);
|
||||
bool set_disk_device_job_error_message(disk_job_id jobID, const char *message);
|
||||
uint32 update_disk_device_job_interrupt_properties(disk_job_id jobID,
|
||||
uint32 interruptProperties);
|
||||
uint32 interruptProperties);
|
||||
// returns one of B_DISK_DEVICE_JOB_{CONTINUE,CANCEL,REVERSE}
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -343,6 +343,8 @@
|
||||
#define delete_partition fssh_delete_partition
|
||||
#define partition_modified fssh_partition_modified
|
||||
|
||||
#define scan_partition fssh_scan_partition
|
||||
|
||||
// disk systems
|
||||
#define find_disk_system fssh_find_disk_system
|
||||
|
||||
|
@ -113,6 +113,10 @@ bool fssh_delete_partition(fssh_partition_id partitionID);
|
||||
void fssh_partition_modified(fssh_partition_id partitionID);
|
||||
// tells the disk device manager, that the parition has been modified
|
||||
|
||||
fssh_status_t fssh_scan_partition(fssh_partition_id partitionID);
|
||||
// Service method for disks systems: Synchronously scans the partition.
|
||||
// Device must not be locked.
|
||||
|
||||
// disk systems
|
||||
fssh_disk_system_id fssh_find_disk_system(const char *name);
|
||||
|
||||
|
@ -66,6 +66,8 @@ public:
|
||||
// Both the device and the partition is also registered and must be
|
||||
// unregistered by the caller.
|
||||
|
||||
status_t ScanPartition(KPartition* partition, bool async);
|
||||
|
||||
partition_id CreateFileDevice(const char *filePath,
|
||||
bool *newlyCreated = NULL, bool async = true);
|
||||
status_t DeleteFileDevice(const char *filePath);
|
||||
|
@ -488,9 +488,28 @@ KDiskDeviceManager::WriteLockPartition(partition_id id)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
// ScanPartition
|
||||
status_t
|
||||
KDiskDeviceManager::ScanPartition(KPartition* partition, bool async)
|
||||
{
|
||||
// TODO: This won't do. Locking the DDM while scanning the partition is not a
|
||||
// good idea. Even locking the device doesn't feels right. Marking the partition
|
||||
// busy and passing the disk system a temporary clone of the partition_data
|
||||
// should work as well.
|
||||
if (DeviceWriteLocker deviceLocker = partition->Device()) {
|
||||
if (ManagerLocker locker = this)
|
||||
return _ScanPartition(partition, async);
|
||||
}
|
||||
|
||||
return B_ERROR;
|
||||
}
|
||||
|
||||
|
||||
// CreateFileDevice
|
||||
partition_id
|
||||
KDiskDeviceManager::CreateFileDevice(const char *filePath, bool *newlyCreated, bool async)
|
||||
KDiskDeviceManager::CreateFileDevice(const char *filePath, bool *newlyCreated,
|
||||
bool async)
|
||||
{
|
||||
if (!filePath)
|
||||
return B_BAD_VALUE;
|
||||
@ -716,7 +735,8 @@ KDiskDeviceManager::RemoveJobQueue(KDiskDeviceJobQueue *jobQueue)
|
||||
return jobQueue->InitCheck();
|
||||
if (jobQueue->IsExecuting())
|
||||
return B_BAD_VALUE;
|
||||
return (_RemoveJobQueue(jobQueue) ? B_OK : B_ENTRY_NOT_FOUND);
|
||||
return (_RemoveJobQueue(jobQueue)
|
||||
? (status_t)B_OK : (status_t)B_ENTRY_NOT_FOUND);
|
||||
}
|
||||
|
||||
// DeleteJobQueue
|
||||
|
@ -178,9 +178,26 @@ delete_partition(partition_id partitionID)
|
||||
void
|
||||
partition_modified(partition_id partitionID)
|
||||
{
|
||||
// not implemented
|
||||
// TODO: implemented
|
||||
}
|
||||
|
||||
|
||||
// scan_partition
|
||||
status_t
|
||||
scan_partition(partition_id partitionID)
|
||||
{
|
||||
// get the partition
|
||||
KDiskDeviceManager* manager = KDiskDeviceManager::Default();
|
||||
KPartition* partition = manager->RegisterPartition(partitionID);
|
||||
if (partition == NULL)
|
||||
return B_ENTRY_NOT_FOUND;
|
||||
PartitionRegistrar _(partition, true);
|
||||
|
||||
// scan it
|
||||
return manager->ScanPartition(partition, false);
|
||||
}
|
||||
|
||||
|
||||
// find_disk_system
|
||||
disk_system_id
|
||||
find_disk_system(const char *name)
|
||||
|
@ -33,6 +33,7 @@ BuildPlatformStaticLibrary <build>fs_shell.a :
|
||||
atomic.cpp
|
||||
block_cache.cpp
|
||||
command_cp.cpp
|
||||
disk_device_manager.cpp
|
||||
driver_settings.cpp
|
||||
errno.cpp
|
||||
fcntl.cpp
|
||||
|
22
src/tools/fs_shell/disk_device_manager.cpp
Normal file
22
src/tools/fs_shell/disk_device_manager.cpp
Normal file
@ -0,0 +1,22 @@
|
||||
/*
|
||||
* Copyright 2007, Ingo Weinhold, bonefish@cs.tu-berlin.de.
|
||||
* Distributed under the terms of the MIT License.
|
||||
*/
|
||||
|
||||
#include "fssh_disk_device_manager.h"
|
||||
|
||||
#include "fssh_errors.h"
|
||||
|
||||
|
||||
fssh_status_t
|
||||
fssh_scan_partition(fssh_partition_id partitionID)
|
||||
{
|
||||
return FSSH_B_OK;
|
||||
}
|
||||
|
||||
|
||||
bool
|
||||
fssh_update_disk_device_job_progress(fssh_disk_job_id jobID, float progress)
|
||||
{
|
||||
return true;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user