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:
@@ -1122,9 +1122,9 @@ static file_system_module_info sDosFileSystem = {
|
|||||||
&dosfs_remove_vnode,
|
&dosfs_remove_vnode,
|
||||||
|
|
||||||
/* VM file access */
|
/* VM file access */
|
||||||
NULL, //&fs_can_page,
|
&dosfs_can_page,
|
||||||
NULL, //&fs_read_pages,
|
&dosfs_read_pages,
|
||||||
NULL, //&fs_write_pages,
|
&dosfs_write_pages,
|
||||||
|
|
||||||
&dosfs_get_file_map,
|
&dosfs_get_file_map,
|
||||||
|
|
||||||
|
|||||||
@@ -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
|
status_t
|
||||||
dosfs_get_file_map(void *_fs, void *_node, off_t pos, size_t len,
|
dosfs_get_file_map(void *_fs, void *_node, off_t pos, size_t len,
|
||||||
struct file_io_vec *vecs, size_t *_count)
|
struct file_io_vec *vecs, size_t *_count)
|
||||||
|
|||||||
@@ -29,5 +29,10 @@ status_t dosfs_write(void *vol, void *node, void *cookie, off_t pos,
|
|||||||
const void *buf, size_t *len);
|
const void *buf, size_t *len);
|
||||||
status_t dosfs_get_file_map(void *fs, void *node, off_t pos, size_t reqLen,
|
status_t dosfs_get_file_map(void *fs, void *node, off_t pos, size_t reqLen,
|
||||||
struct file_io_vec *vecs, size_t *_count);
|
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
|
#endif
|
||||||
|
|||||||
Reference in New Issue
Block a user