* Adding volume ops to the overlay filesystem.

* Remove the previous method of applying the overlay by flags. In the future the
  overlay can just be mounted as a filesystem layer. This is probably how layers
  were intended to work in the first place.
* Move the filesystem module info and filesystem name from the fs_mount to the
  fs_volume structure. Filesystem layering is done by having multiple layered
  volumes and we want to be able to have a different fs per layer.
* Adapt VFS code to this move.
* Implement mounting layered filesystems. Specifying multiple filesystems
  separated by a colon on mount will cause the layers to be set up and the
  corresponding filesystems to be mounted at that layer.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29199 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Michael Lotz
2009-02-14 20:30:49 +00:00
parent 95da064570
commit a26c243920
3 changed files with 156 additions and 78 deletions
+12 -11
View File
@@ -43,7 +43,6 @@ struct file_io_vec {
// flags for publish_vnode() and fs_volume_ops::get_vnode()
#define B_VNODE_PUBLISH_REMOVED 0x01
#define B_VNODE_DONT_CREATE_SPECIAL_SUB_NODE 0x02
#define B_VNODE_WANTS_OVERLAY_SUB_NODE 0x04
#ifdef __cplusplus
@@ -54,16 +53,18 @@ typedef struct fs_volume fs_volume;
typedef struct fs_volume_ops fs_volume_ops;
typedef struct fs_vnode fs_vnode;
typedef struct fs_vnode_ops fs_vnode_ops;
typedef struct file_system_module_info file_system_module_info;
struct fs_volume {
dev_t id;
partition_id partition;
int32 layer;
void* private_volume;
fs_volume_ops* ops;
fs_volume* sub_volume;
fs_volume* super_volume;
dev_t id;
partition_id partition;
int32 layer;
void* private_volume;
fs_volume_ops* ops;
fs_volume* sub_volume;
fs_volume* super_volume;
file_system_module_info* file_system;
char* file_system_name;
};
struct fs_vnode {
@@ -240,7 +241,7 @@ struct fs_vnode_ops {
fs_volume *superVolume, fs_vnode *superVnode);
};
typedef struct file_system_module_info {
struct file_system_module_info {
struct module_info info;
const char* short_name;
const char* pretty_name;
@@ -290,7 +291,7 @@ typedef struct file_system_module_info {
const char *parameters, disk_job_id job);
status_t (*initialize)(int fd, partition_id partition, const char *name,
const char *parameters, off_t partitionSize, disk_job_id job);
} file_system_module_info;
};
/* file system add-ons only prototypes */