added vm pages functions based on file_cache

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18697 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Jérôme Duval 2006-08-29 15:42:16 +00:00
parent 7ee49d9f64
commit 98396cd878
3 changed files with 64 additions and 3 deletions

View File

@ -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,

View File

@ -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)

View File

@ -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