From 98396cd8786aecbb7591700cfbca13788dfe020d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Tue, 29 Aug 2006 15:42:16 +0000 Subject: [PATCH] added vm pages functions based on file_cache git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18697 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/add-ons/kernel/file_systems/dos/dosfs.c | 6 +-- src/add-ons/kernel/file_systems/dos/file.c | 56 +++++++++++++++++++++ src/add-ons/kernel/file_systems/dos/file.h | 5 ++ 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/add-ons/kernel/file_systems/dos/dosfs.c b/src/add-ons/kernel/file_systems/dos/dosfs.c index 6756a4f2b8..7b05eebff7 100644 --- a/src/add-ons/kernel/file_systems/dos/dosfs.c +++ b/src/add-ons/kernel/file_systems/dos/dosfs.c @@ -1122,9 +1122,9 @@ static file_system_module_info sDosFileSystem = { &dosfs_remove_vnode, /* VM file access */ - NULL, //&fs_can_page, - NULL, //&fs_read_pages, - NULL, //&fs_write_pages, + &dosfs_can_page, + &dosfs_read_pages, + &dosfs_write_pages, &dosfs_get_file_map, diff --git a/src/add-ons/kernel/file_systems/dos/file.c b/src/add-ons/kernel/file_systems/dos/file.c index 130cc1af9b..3e41145c44 100644 --- a/src/add-ons/kernel/file_systems/dos/file.c +++ b/src/add-ons/kernel/file_systems/dos/file.c @@ -1468,6 +1468,62 @@ dosfs_rmdir(void *vol, void *dir, const char *name) } +bool +dosfs_can_page(fs_volume _fs, fs_vnode _v, fs_cookie _cookie) +{ + // ToDo: we're obviously not even asked... + return false; +} + + +status_t +dosfs_read_pages(fs_volume _fs, fs_vnode _node, fs_cookie _cookie, off_t pos, + const iovec *vecs, size_t count, size_t *_numBytes, bool reenter) +{ + nspace *vol = (nspace *)_fs; + vnode *node = (vnode *)_node; + status_t status; + + if (check_nspace_magic(vol, "dosfs_read_pages") || + check_vnode_magic(node, "dosfs_read_pages")) + return EINVAL; + + if (node->cache == NULL) + return(B_BAD_VALUE); + + LOCK_VOL(vol); + status = file_cache_read_pages(node->cache, pos, vecs, count, + _numBytes); + UNLOCK_VOL(vol); + + return status; +} + + +status_t +dosfs_write_pages(fs_volume _fs, fs_vnode _node, fs_cookie _cookie, off_t pos, + const iovec *vecs, size_t count, size_t *_numBytes, bool reenter) +{ + nspace *vol = (nspace *)_fs; + vnode *node = (vnode *)_node; + status_t status; + + if (check_nspace_magic(vol, "dosfs_write_pages") || + check_vnode_magic(node, "dosfs_write_pages")) + return EINVAL; + + if (node->cache == NULL) + return B_BAD_VALUE; + + LOCK_VOL(vol); + status = file_cache_write_pages(node->cache, pos, vecs, count, + _numBytes); + UNLOCK_VOL(vol); + + return status; +} + + status_t dosfs_get_file_map(void *_fs, void *_node, off_t pos, size_t len, struct file_io_vec *vecs, size_t *_count) diff --git a/src/add-ons/kernel/file_systems/dos/file.h b/src/add-ons/kernel/file_systems/dos/file.h index 5b188fabb1..490fbae8ca 100644 --- a/src/add-ons/kernel/file_systems/dos/file.h +++ b/src/add-ons/kernel/file_systems/dos/file.h @@ -29,5 +29,10 @@ status_t dosfs_write(void *vol, void *node, void *cookie, off_t pos, const void *buf, size_t *len); status_t dosfs_get_file_map(void *fs, void *node, off_t pos, size_t reqLen, struct file_io_vec *vecs, size_t *_count); +bool dosfs_can_page(fs_volume _fs, fs_vnode _v, fs_cookie _cookie); +status_t dosfs_read_pages(fs_volume _fs, fs_vnode _node, fs_cookie _cookie, off_t pos, + const iovec *vecs, size_t count, size_t *_numBytes, bool reenter); +status_t dosfs_write_pages(fs_volume _fs, fs_vnode _node, fs_cookie _cookie, off_t pos, + const iovec *vecs, size_t count, size_t *_numBytes, bool reenter); #endif