From d5a48f5dcf84dda1d78b5717c5fa88f5e56ccc93 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Sat, 4 Sep 2004 17:52:32 +0000 Subject: [PATCH] The VM fs interface has changed to better match the one of the device interface. Added an fs call for the file cache. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8852 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../file_systems/bfs/kernel_interface.cpp | 35 +++++++++++-------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp index 1304f45add..737eaa9d8b 100644 --- a/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp +++ b/src/add-ons/kernel/file_systems/bfs/kernel_interface.cpp @@ -306,15 +306,17 @@ bfs_remove_vnode(void *_ns, void *_node, bool reenter) } -static status_t +static bool bfs_can_page(fs_volume _fs, fs_vnode _v) { - return 0; + // ToDo: we're obviously not even asked... + return false; } -static ssize_t -bfs_read_pages(fs_volume _fs, fs_vnode _node, iovecs *vecs, off_t pos) +static status_t +bfs_read_pages(fs_volume _fs, fs_vnode _node, off_t pos, + const iovec *vecs, size_t count, size_t *_numBytes) { Inode *inode = (Inode *)_node; @@ -323,21 +325,24 @@ bfs_read_pages(fs_volume _fs, fs_vnode _node, iovecs *vecs, off_t pos) ReadLocked locked(inode->Lock()); - for (uint32 i = 0; i < vecs->num; i++) { + for (uint32 i = 0; i < count; i++) { if (pos >= inode->Size()) { - memset(vecs->vec[i].iov_base, 0, vecs->vec[i].iov_len); - pos += vecs->vec[i].iov_len; + memset(vecs[i].iov_base, 0, vecs[i].iov_len); + pos += vecs[i].iov_len; + *_numBytes -= vecs[i].iov_len; } else { - uint32 length = vecs->vec[i].iov_len; + uint32 length = vecs[i].iov_len; if (length > inode->Size() - pos) length = inode->Size() - pos; - inode->ReadAt(pos, (uint8 *)vecs->vec[i].iov_base, &length); + inode->ReadAt(pos, (uint8 *)vecs[i].iov_base, &length); - if (length < vecs->vec[i].iov_len) - memset((char *)vecs->vec[i].iov_base + length, 0, vecs->vec[i].iov_len - length); + if (length < vecs[i].iov_len) { + memset((char *)vecs[i].iov_base + length, 0, vecs[i].iov_len - length); + *_numBytes -= vecs[i].iov_len - length; + } - pos += vecs->vec[i].iov_len; + pos += vecs[i].iov_len; } } @@ -345,8 +350,8 @@ bfs_read_pages(fs_volume _fs, fs_vnode _node, iovecs *vecs, off_t pos) } -static ssize_t -bfs_write_pages(fs_volume _fs, fs_vnode _v, iovecs *vecs, off_t pos) +static status_t +bfs_write_pages(fs_volume _fs, fs_vnode _v, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes) { return EPERM; } @@ -2001,6 +2006,8 @@ static file_system_info sBeFileSystem = { &bfs_can_page, &bfs_read_pages, &bfs_write_pages, + + NULL, // get_file_map() &bfs_ioctl, // ioctl &bfs_fsync, // sync