43 lines
905 B
C
43 lines
905 B
C
#pragma once
|
|
#include "sys/types.h"
|
|
#include "sys/list.h"
|
|
|
|
struct statvfs;
|
|
struct blkdev;
|
|
struct vnode;
|
|
struct fs;
|
|
|
|
struct fs_class {
|
|
char name[64];
|
|
|
|
int opt;
|
|
|
|
struct vnode *(*get_root) (struct fs *fs);
|
|
int (*init) (struct fs *fs, const char *opt);
|
|
void (*destroy) (struct fs *fs);
|
|
int (*statvfs) (struct fs *fs, struct statvfs *st);
|
|
|
|
struct list_head link;
|
|
};
|
|
|
|
// The actual filesystem instance,
|
|
// one per each mount
|
|
struct fs {
|
|
// Block device on which the filesystem resides
|
|
struct blkdev *blk;
|
|
|
|
uint32_t flags;
|
|
|
|
// Private data structure per-mount
|
|
void *fs_private;
|
|
|
|
struct fs_class *cls;
|
|
|
|
struct list_head link;
|
|
};
|
|
|
|
struct fs *fs_create(struct fs_class *cls, struct blkdev *blk, uint32_t flags, const char *opt);
|
|
void fs_release(struct fs *fs);
|
|
struct fs_class *fs_class_by_name(const char *name);
|
|
int fs_class_register(struct fs_class *cls);
|