diff options
author | Alex Auvolat <alex@adnab.me> | 2015-03-09 15:43:44 +0100 |
---|---|---|
committer | Alex Auvolat <alex@adnab.me> | 2015-03-09 15:43:44 +0100 |
commit | 436418e575b68fd7e85f7fdaf039e03874ec1cb9 (patch) | |
tree | a18413eaa89ce9a9fffb40617b5dddfef9bc5d97 /src/kernel/include/pager.h | |
parent | a9a2ea9125f89347e0aa038a136ebd43e6b251b4 (diff) | |
download | kogata-436418e575b68fd7e85f7fdaf039e03874ec1cb9.tar.gz kogata-436418e575b68fd7e85f7fdaf039e03874ec1cb9.zip |
Nullfs now uses pager.
Diffstat (limited to 'src/kernel/include/pager.h')
-rw-r--r-- | src/kernel/include/pager.h | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/src/kernel/include/pager.h b/src/kernel/include/pager.h index 5491d10..7ef8b6c 100644 --- a/src/kernel/include/pager.h +++ b/src/kernel/include/pager.h @@ -12,6 +12,7 @@ typedef struct pager pager_t; typedef struct user_region user_region_t; typedef struct fs_node fs_node_t; +typedef struct fs_handle fs_handle_t; typedef struct { size_t (*read)(fs_node_t* data, size_t offset, size_t len, char* ptr); @@ -24,6 +25,7 @@ typedef struct { void (*page_commit)(pager_t *p, size_t offset, size_t len); // writes pages back to storage (if applicable) void (*page_out)(pager_t *p, size_t offset, size_t len); // frees the pages (no need to write back) void (*page_release)(pager_t *p, size_t offset, size_t len); // called on delete/resize + bool (*resize)(pager_t *p, size_t new_size); } pager_ops_t; typedef struct pager { @@ -49,13 +51,14 @@ typedef struct pager { pager_t* new_swap_pager(size_t size); pager_t* new_vfs_pager(size_t size, fs_node_t* vfs_node, vfs_pager_ops_t *vfs_ops); -pager_t* new_dev_pager(size_t size, size_t phys_offset); +pager_t* new_device_pager(size_t size, size_t phys_offset); void delete_pager(pager_t *p); bool pager_resize(pager_t *p, size_t newsize); -// void pager_pin_region(pager_t *pager, size_t offset, size_t len); // implement later +// implement later, when we implement freeing +// void pager_pin_region(pager_t *pager, size_t offset, size_t len); // void pager_unpin_region(pager_t *pager, size_t offset, size_t len); void pager_access(pager_t *p, size_t offset, size_t len, bool accessed, bool dirty); @@ -69,5 +72,8 @@ size_t pager_write(pager_t *p, size_t offset, size_t len, const char* buf); void pager_add_map(pager_t *p, user_region_t *reg); void pager_rm_map(pager_t *p, user_region_t *reg); +// for use by files that use a pager for caching +size_t fs_read_from_pager(fs_handle_t *f, size_t offset, size_t len, char* buf); +size_t fs_write_to_pager(fs_handle_t *f, size_t offset, size_t len, const char* buf); /* vim: set ts=4 sw=4 tw=0 noet :*/ |