* Moved partition scanning back to KDiskDeviceManager. ATM only

synchronous scanning is supported.
* Removed the disk device job support from the disk device manager.
* K{Disk,File,Partitioning}System:
  - Remove querying and validation methods.
  - Commented out the modification methods until their fate is decided.
* Removed obsolete _user_get_partitionable_spaces().


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@22799 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Ingo Weinhold
2007-11-01 22:41:22 +00:00
parent c5e454a288
commit 327887959e
47 changed files with 162 additions and 5127 deletions
@@ -1,103 +0,0 @@
/*
* Copyright 2003-2007, Haiku, Inc. All Rights Reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* Ingo Weinhold <[email protected]>
* Lubos Kulic
*/
#ifndef _K_DISK_DEVICE_JOB_H
#define _K_DISK_DEVICE_JOB_H
#include "disk_device_manager.h"
#include <KPartitionVisitor.h>
struct user_disk_device_job_info;
namespace BPrivate {
namespace DiskDevice {
class KDiskDeviceJobQueue;
/**
* Represents some action executed on the disk device.
*/
class KDiskDeviceJob {
public:
KDiskDeviceJob(uint32 type, partition_id partitionID,
partition_id scopeID = -1);
virtual ~KDiskDeviceJob();
disk_job_id ID() const;
void SetJobQueue(KDiskDeviceJobQueue *queue);
KDiskDeviceJobQueue *JobQueue() const;
uint32 Type() const;
void SetStatus(uint32 status);
uint32 Status() const;
status_t SetDescription(const char *description);
const char *Description() const;
partition_id PartitionID() const;
partition_id ScopeID() const;
status_t SetErrorMessage(const char *message);
const char *ErrorMessage() const;
void SetTaskCount(int32 count);
int32 TaskCount() const;
void SetCompletedTasks(int32 count);
int32 CompletedTasks() const;
void SetInterruptProperties(uint32 properties);
uint32 InterruptProperties() const;
virtual void GetTaskDescription(char *description);
void UpdateProgress(float progress);
// may trigger a notification
void UpdateExtraProgress(const char *info);
// triggers a notification
float Progress() const;
status_t GetInfo(user_disk_device_job_info *info);
status_t GetProgressInfo(disk_device_job_progress_info *info);
virtual status_t Do() = 0;
private:
static disk_job_id _NextID();
disk_job_id fID;
KDiskDeviceJobQueue *fJobQueue;
uint32 fType;
uint32 fStatus;
partition_id fPartitionID;
partition_id fScopeID;
char *fDescription;
char *fErrorMessage;
int32 fTaskCount;
int32 fCompletedTasks;
uint32 fInterruptProperties;
float fProgress;
static disk_job_id fNextID;
protected:
// some stuff useful for all descendants
bool IsPartitionNotBusy(KPartition* partition);
};
} // namespace DiskDevice
} // namespace BPrivate
using BPrivate::DiskDevice::KDiskDeviceJob;
#endif // _DISK_DEVICE_JOB_H
@@ -1,59 +0,0 @@
// KDiskDeviceJobFactory.h
#ifndef _K_DISK_DEVICE_JOB_FACTORY_H
#define _K_DISK_DEVICE_JOB_FACTORY_H
#include "disk_device_manager.h"
namespace BPrivate {
namespace DiskDevice {
class KDiskDeviceJob;
class KDiskDeviceJobFactory {
public:
KDiskDeviceJobFactory();
~KDiskDeviceJobFactory();
KDiskDeviceJob *CreateDefragmentJob(partition_id partitionID);
KDiskDeviceJob *CreateRepairJob(partition_id partitionID, bool checkOnly);
KDiskDeviceJob *CreateResizeJob(partition_id parentID,
partition_id partitionID, off_t size);
KDiskDeviceJob *CreateMoveJob(partition_id parentID,
partition_id partitionID, off_t offset,
const partition_id *contentsToMove,
int32 contentsToMoveCount);
KDiskDeviceJob *CreateSetNameJob(partition_id parentID,
partition_id partitionID,
const char *name);
KDiskDeviceJob *CreateSetContentNameJob(partition_id partitionID,
const char *name);
KDiskDeviceJob *CreateSetTypeJob(partition_id parentID,
partition_id partitionID,
const char *type);
KDiskDeviceJob *CreateSetParametersJob(partition_id parentID,
partition_id partitionID,
const char *parameters);
KDiskDeviceJob *CreateSetContentParametersJob(partition_id partitionID,
const char *parameters);
KDiskDeviceJob *CreateInitializeJob(partition_id partitionID,
disk_system_id diskSystemID,
const char *name,
const char *parameters);
KDiskDeviceJob *CreateUninitializeJob(partition_id partitionID);
KDiskDeviceJob *CreateCreateChildJob(partition_id partitionID,
partition_id childID, off_t offset,
off_t size, const char *type,
const char *parameters);
KDiskDeviceJob *CreateDeleteChildJob(partition_id parentID,
partition_id partitionID);
KDiskDeviceJob *CreateScanPartitionJob(partition_id partitionID);
};
} // namespace DiskDevice
} // namespace BPrivate
using BPrivate::DiskDevice::KDiskDeviceJobFactory;
#endif // _K_DISK_DEVICE_JOB_FACTORY_H
@@ -1,72 +0,0 @@
// KDiskDeviceJobQueue.h
#ifndef _K_DISK_DEVICE_JOB_QUEUE_H
#define _K_DISK_DEVICE_JOB_QUEUE_H
#include <OS.h>
#include "disk_device_manager.h"
namespace BPrivate {
namespace DiskDevice {
class KDiskDevice;
class KDiskDeviceJob;
class KDiskDeviceJobQueue {
public:
KDiskDeviceJobQueue(KDiskDevice *device = NULL);
~KDiskDeviceJobQueue();
status_t InitCheck() const;
void SetDevice(KDiskDevice *device);
KDiskDevice *Device() const;
int32 ActiveJobIndex() const;
KDiskDeviceJob *ActiveJob() const;
// list of scheduled jobs
bool AddJob(KDiskDeviceJob *job);
KDiskDeviceJob *RemoveJob(int32 index);
bool RemoveJob(KDiskDeviceJob *job);
// Adding/removing is only possible before the queues is added to the
// manager.
KDiskDeviceJob *JobAt(int32 index) const;
int32 CountJobs() const;
status_t Execute();
// Called by the manager, when the queue is added to it.
// manager must be locked
status_t Cancel(bool reverse);
status_t Pause();
status_t Continue();
sem_id ReadyToPause();
// called only by the queue's thread from within a module hook
bool IsExecuting() const;
bool IsCanceled() const;
bool ShallReverse() const;
bool IsPaused() const;
bool IsPauseRequested() const;
private:
struct JobQueue;
int32 _ThreadLoop();
static int32 _ThreadEntry(void *data);
KDiskDevice *fDevice;
int32 fActiveJob;
JobQueue *fJobs;
uint32 fFlags;
thread_id fThread;
sem_id fSyncSemaphore;
};
} // namespace DiskDevice
} // namespace BPrivate
using BPrivate::DiskDevice::KDiskDeviceJobQueue;
#endif // _K_DISK_DEVICE_JOB_QUEUE_H
@@ -16,9 +16,6 @@ namespace BPrivate {
namespace DiskDevice {
class KDiskDevice;
class KDiskDeviceJob;
class KDiskDeviceJobFactory;
class KDiskDeviceJobQueue;
class KDiskSystem;
class KFileDiskDevice;
class KPartition;
@@ -66,10 +63,10 @@ public:
// Both the device and the partition is also registered and must be
// unregistered by the caller.
status_t ScanPartition(KPartition* partition, bool async);
status_t ScanPartition(KPartition* partition);
partition_id CreateFileDevice(const char *filePath,
bool *newlyCreated = NULL, bool async = true);
partition_id CreateFileDevice(const char* filePath,
bool* newlyCreated = NULL);
status_t DeleteFileDevice(const char *filePath);
status_t DeleteFileDevice(partition_id id);
@@ -81,29 +78,6 @@ public:
bool PartitionRemoved(KPartition *partition); //
bool DeletePartition(KPartition *partition); //
// Jobs
// manager must be locked
KDiskDeviceJob *FindJob(disk_job_id id);
int32 CountJobs();
KDiskDeviceJob *NextJob(int32 *cookie);
// manager must be locked
status_t AddJobQueue(KDiskDeviceJobQueue *jobQueue);
// the device must be write locked
status_t RemoveJobQueue(KDiskDeviceJobQueue *jobQueue);
status_t DeleteJobQueue(KDiskDeviceJobQueue *jobQueue);
// called when the execution is done
int32 CountJobQueues();
KDiskDeviceJobQueue *NextJobQueue(int32 *cookie);
KDiskDeviceJobFactory *JobFactory() const;
// manager must *not* be locked
status_t UpdateBusyPartitions(KDiskDevice *device);
status_t UpdateJobStatus(KDiskDeviceJob *job, uint32 status,
bool updateBusyPartitions);
// Disk Systems
// manager must be locked
@@ -137,20 +111,14 @@ private:
bool _AddDevice(KDiskDevice *device);
bool _RemoveDevice(KDiskDevice *device);
bool _RemoveJobQueue(KDiskDeviceJobQueue *jobQueue);
status_t _UpdateBusyPartitions(KDiskDevice *device);
status_t _UpdateJobStatus(KDiskDeviceJob *job, uint32 status,
bool updateBusyPartitions);
status_t _Scan(const char *path);
status_t _ScanPartition(KPartition *partition, bool async);
// the manager must be locked and the device write locked
status_t _ScanPartition(KPartition *partition);
// used by the other _ScanPartition() version only
struct DeviceMap;
struct DiskSystemMap;
struct JobMap;
struct JobQueueVector;
struct PartitionMap;
struct PartitionSet;
@@ -159,9 +127,6 @@ private:
PartitionMap *fPartitions;
DiskSystemMap *fDiskSystems;
PartitionSet *fObsoletePartitions;
JobMap *fJobs;
JobQueueVector *fJobQueues;
KDiskDeviceJobFactory *fJobFactory;
static KDiskDeviceManager *sDefaultManager;
};
@@ -15,7 +15,7 @@ struct user_disk_system_info;
namespace BPrivate {
namespace DiskDevice {
class KDiskDeviceJob;
//class KDiskDeviceJob;
class KPartition;
//! \brief Common ancestor for disk system add-on wrappers
@@ -51,60 +51,10 @@ public:
virtual void FreeCookie(KPartition *partition);
virtual void FreeContentCookie(KPartition *partition);
// Querying
// Device must be read locked.
virtual uint32 GetSupportedOperations(KPartition* partition, uint32 mask);
virtual uint32 GetSupportedChildOperations(KPartition* child, uint32 mask);
// for convenience
bool SupportsOperations(KPartition* partition, uint32 operations)
{ return (GetSupportedOperations(partition, operations) & operations)
== operations; }
bool SupportsChildOperations(KPartition* child, uint32 operations)
{ return (GetSupportedChildOperations(child, operations) & operations)
== operations; }
virtual bool SupportsInitializingChild(KPartition *child,
const char *diskSystem);
virtual bool IsSubSystemFor(KPartition *partition);
virtual bool ValidateResize(KPartition *partition, off_t *size);
virtual bool ValidateResizeChild(KPartition *child, off_t *size);
virtual bool ValidateMove(KPartition *partition, off_t *start);
virtual bool ValidateMoveChild(KPartition *child, off_t *start);
virtual bool ValidateSetName(KPartition *partition, char *name);
virtual bool ValidateSetContentName(KPartition *partition, char *name);
virtual bool ValidateSetType(KPartition *partition, const char *type);
virtual bool ValidateSetParameters(KPartition *partition,
const char *parameters);
virtual bool ValidateSetContentParameters(KPartition *parameters,
const char *parameters);
virtual bool ValidateInitialize(KPartition *partition, char *name,
const char *parameters);
virtual bool ValidateCreateChild(KPartition *partition, off_t *start,
off_t *size, const char *type,
const char *parameters, int32 *index);
virtual int32 CountPartitionableSpaces(KPartition *partition);
virtual status_t GetPartitionableSpaces(KPartition *partition,
partitionable_space_data *buffer,
int32 count,
int32 *actualCount = NULL);
virtual status_t GetNextSupportedType(KPartition *partition, int32 *cookie,
char *type);
virtual status_t GetTypeForContentType(const char *contentType,
char *type);
// Shadow partition modification
// Device must be write locked.
virtual status_t ShadowPartitionChanged(KPartition *partition,
KPartition *child, uint32 operation);
// Writing
// Device should not be locked.
#if 0
virtual status_t Defragment(KPartition *partition, KDiskDeviceJob *job);
virtual status_t Repair(KPartition *partition, bool checkOnly,
KDiskDeviceJob *job);
@@ -140,6 +90,7 @@ public:
// since the device will not be locked, when they are called. The KPartition
// is registered though, so that it is at least guaranteed that the object
// won't go away.
#endif // 0
protected:
virtual status_t LoadModule();
@@ -33,25 +33,9 @@ public:
virtual void FreeIdentifyCookie(KPartition *partition, void *cookie);
virtual void FreeContentCookie(KPartition *partition);
// Querying
virtual uint32 GetSupportedOperations(KPartition* partition, uint32 mask);
virtual bool ValidateResize(KPartition *partition, off_t *size);
virtual bool ValidateMove(KPartition *partition, off_t *start);
virtual bool ValidateSetContentName(KPartition *partition, char *name);
virtual bool ValidateSetContentParameters(KPartition *partition,
const char *parameters);
virtual bool ValidateInitialize(KPartition *partition, char *name,
const char *parameters);
// Shadow partition modification
virtual status_t ShadowPartitionChanged(KPartition *partition,
KPartition *child, uint32 operation);
// Writing
#if 0
virtual status_t Defragment(KPartition *partition, KDiskDeviceJob *job);
virtual status_t Repair(KPartition *partition, bool checkOnly,
KDiskDeviceJob *job);
@@ -66,6 +50,7 @@ public:
KDiskDeviceJob *job);
virtual status_t Initialize(KPartition *partition, const char *name,
const char *parameters, KDiskDeviceJob *job);
#endif // 0
protected:
virtual status_t LoadModule();
@@ -35,49 +35,9 @@ public:
virtual void FreeCookie(KPartition *partition);
virtual void FreeContentCookie(KPartition *partition);
// Querying
virtual uint32 GetSupportedOperations(KPartition* partition, uint32 mask);
virtual uint32 GetSupportedChildOperations(KPartition* child, uint32 mask);
virtual bool SupportsInitializingChild(KPartition *child,
const char *diskSystem);
virtual bool IsSubSystemFor(KPartition *partition);
virtual bool ValidateResize(KPartition *partition, off_t *size);
virtual bool ValidateResizeChild(KPartition *child, off_t *size);
virtual bool ValidateMove(KPartition *partition, off_t *start);
virtual bool ValidateMoveChild(KPartition *child, off_t *start);
virtual bool ValidateSetName(KPartition *partition, char *name);
virtual bool ValidateSetContentName(KPartition *partition, char *name);
virtual bool ValidateSetType(KPartition *partition, const char *type);
virtual bool ValidateSetParameters(KPartition *partition,
const char *parameters);
virtual bool ValidateSetContentParameters(KPartition *parameters,
const char *parameters);
virtual bool ValidateInitialize(KPartition *partition, char *name,
const char *parameters);
virtual bool ValidateCreateChild(KPartition *partition, off_t *start,
off_t *size, const char *type,
const char *parameters, int32 *index);
virtual int32 CountPartitionableSpaces(KPartition *partition);
virtual status_t GetPartitionableSpaces(KPartition *partition,
partitionable_space_data *buffer,
int32 count,
int32 *actualCount = NULL);
virtual status_t GetNextSupportedType(KPartition *partition, int32 *cookie,
char *type);
virtual status_t GetTypeForContentType(const char *contentType,
char *type);
// Shadow partition modification
virtual status_t ShadowPartitionChanged(KPartition *partition,
KPartition *child, uint32 operation);
// Writing
#if 0
virtual status_t Repair(KPartition *partition, bool checkOnly,
KDiskDeviceJob *job);
virtual status_t Resize(KPartition *partition, off_t size,
@@ -108,6 +68,7 @@ public:
virtual status_t DeleteChild(KPartition *child, KDiskDeviceJob *job);
virtual status_t Initialize(KPartition *partition, const char *name,
const char *parameters, KDiskDeviceJob *job);
#endif // 0
protected:
virtual status_t LoadModule();