* 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:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user