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:
@@ -102,22 +102,25 @@ partition_data *get_child_partition(partition_id partitionID, int32 index);
|
|||||||
// partition write access
|
// partition write access
|
||||||
// (write lock required)
|
// (write lock required)
|
||||||
partition_data *create_child_partition(partition_id partitionID, int32 index,
|
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
|
// childID is an optional input parameter -- -1 to be ignored
|
||||||
bool delete_partition(partition_id partitionID);
|
bool delete_partition(partition_id partitionID);
|
||||||
void partition_modified(partition_id partitionID);
|
void partition_modified(partition_id partitionID);
|
||||||
// tells the disk device manager, that the parition has been modified
|
// 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 systems
|
||||||
disk_system_id find_disk_system(const char *name);
|
disk_system_id find_disk_system(const char *name);
|
||||||
|
|
||||||
// jobs
|
// jobs
|
||||||
bool update_disk_device_job_progress(disk_job_id jobID, float progress);
|
bool update_disk_device_job_progress(disk_job_id jobID, float progress);
|
||||||
bool update_disk_device_job_extra_progress(disk_job_id jobID,
|
bool update_disk_device_job_extra_progress(disk_job_id jobID, const char *info);
|
||||||
const char *info);
|
|
||||||
bool set_disk_device_job_error_message(disk_job_id jobID, const char *message);
|
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 update_disk_device_job_interrupt_properties(disk_job_id jobID,
|
||||||
uint32 interruptProperties);
|
uint32 interruptProperties);
|
||||||
// returns one of B_DISK_DEVICE_JOB_{CONTINUE,CANCEL,REVERSE}
|
// returns one of B_DISK_DEVICE_JOB_{CONTINUE,CANCEL,REVERSE}
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|||||||
@@ -343,6 +343,8 @@
|
|||||||
#define delete_partition fssh_delete_partition
|
#define delete_partition fssh_delete_partition
|
||||||
#define partition_modified fssh_partition_modified
|
#define partition_modified fssh_partition_modified
|
||||||
|
|
||||||
|
#define scan_partition fssh_scan_partition
|
||||||
|
|
||||||
// disk systems
|
// disk systems
|
||||||
#define find_disk_system fssh_find_disk_system
|
#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);
|
void fssh_partition_modified(fssh_partition_id partitionID);
|
||||||
// tells the disk device manager, that the parition has been modified
|
// 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
|
// disk systems
|
||||||
fssh_disk_system_id fssh_find_disk_system(const char *name);
|
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
|
// Both the device and the partition is also registered and must be
|
||||||
// unregistered by the caller.
|
// unregistered by the caller.
|
||||||
|
|
||||||
|
status_t ScanPartition(KPartition* partition, bool async);
|
||||||
|
|
||||||
partition_id CreateFileDevice(const char *filePath,
|
partition_id CreateFileDevice(const char *filePath,
|
||||||
bool *newlyCreated = NULL, bool async = true);
|
bool *newlyCreated = NULL, bool async = true);
|
||||||
status_t DeleteFileDevice(const char *filePath);
|
status_t DeleteFileDevice(const char *filePath);
|
||||||
|
|||||||
@@ -488,9 +488,28 @@ KDiskDeviceManager::WriteLockPartition(partition_id id)
|
|||||||
return NULL;
|
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
|
// CreateFileDevice
|
||||||
partition_id
|
partition_id
|
||||||
KDiskDeviceManager::CreateFileDevice(const char *filePath, bool *newlyCreated, bool async)
|
KDiskDeviceManager::CreateFileDevice(const char *filePath, bool *newlyCreated,
|
||||||
|
bool async)
|
||||||
{
|
{
|
||||||
if (!filePath)
|
if (!filePath)
|
||||||
return B_BAD_VALUE;
|
return B_BAD_VALUE;
|
||||||
@@ -716,7 +735,8 @@ KDiskDeviceManager::RemoveJobQueue(KDiskDeviceJobQueue *jobQueue)
|
|||||||
return jobQueue->InitCheck();
|
return jobQueue->InitCheck();
|
||||||
if (jobQueue->IsExecuting())
|
if (jobQueue->IsExecuting())
|
||||||
return B_BAD_VALUE;
|
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
|
// DeleteJobQueue
|
||||||
|
|||||||
@@ -178,9 +178,26 @@ delete_partition(partition_id partitionID)
|
|||||||
void
|
void
|
||||||
partition_modified(partition_id partitionID)
|
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
|
// find_disk_system
|
||||||
disk_system_id
|
disk_system_id
|
||||||
find_disk_system(const char *name)
|
find_disk_system(const char *name)
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ BuildPlatformStaticLibrary <build>fs_shell.a :
|
|||||||
atomic.cpp
|
atomic.cpp
|
||||||
block_cache.cpp
|
block_cache.cpp
|
||||||
command_cp.cpp
|
command_cp.cpp
|
||||||
|
disk_device_manager.cpp
|
||||||
driver_settings.cpp
|
driver_settings.cpp
|
||||||
errno.cpp
|
errno.cpp
|
||||||
fcntl.cpp
|
fcntl.cpp
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user