The VM fs interface has changed to better match the one of the device interface.
Added a new fs call for the file cache. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8851 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
33657fc8ac
commit
14d725bb50
|
@ -810,7 +810,7 @@ bootfs_ioctl(fs_volume _fs, fs_vnode _v, fs_cookie _cookie, ulong op, void *buf,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static status_t
|
static bool
|
||||||
bootfs_can_page(fs_volume _fs, fs_vnode _v)
|
bootfs_can_page(fs_volume _fs, fs_vnode _v)
|
||||||
{
|
{
|
||||||
struct bootfs_vnode *v = _v;
|
struct bootfs_vnode *v = _v;
|
||||||
|
@ -818,44 +818,46 @@ bootfs_can_page(fs_volume _fs, fs_vnode _v)
|
||||||
TRACE(("bootfs_canpage: vnode %p\n", v));
|
TRACE(("bootfs_canpage: vnode %p\n", v));
|
||||||
|
|
||||||
if (v->stream.type == S_IFREG)
|
if (v->stream.type == S_IFREG)
|
||||||
return 1;
|
return true;
|
||||||
else
|
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ssize_t
|
static status_t
|
||||||
bootfs_read_pages(fs_volume _fs, fs_vnode _v, iovecs *vecs, off_t pos)
|
bootfs_read_pages(fs_volume _fs, fs_vnode _v, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
||||||
{
|
{
|
||||||
struct bootfs_vnode *v = _v;
|
struct bootfs_vnode *v = _v;
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
|
|
||||||
TRACE(("bootfs_readpage: fs_cookie %p vnode %p, vecs %p, pos 0x%Ld\n", _fs, v, vecs, pos));
|
TRACE(("bootfs_readpage: fs_cookie %p vnode %p, vecs %p, pos 0x%Ld\n", _fs, v, vecs, pos));
|
||||||
|
|
||||||
for (i = 0; i < vecs->num; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
if (pos >= v->stream.u.file.len) {
|
if (pos >= v->stream.u.file.len) {
|
||||||
memset(vecs->vec[i].iov_base, 0, vecs->vec[i].iov_len);
|
memset(vecs[i].iov_base, 0, vecs[i].iov_len);
|
||||||
pos += vecs->vec[i].iov_len;
|
pos += vecs[i].iov_len;
|
||||||
} else {
|
} else {
|
||||||
unsigned int copy_len;
|
unsigned int copy_len;
|
||||||
|
|
||||||
copy_len = min(vecs->vec[i].iov_len, v->stream.u.file.len - pos);
|
copy_len = min(vecs[i].iov_len, v->stream.u.file.len - pos);
|
||||||
|
|
||||||
memcpy(vecs->vec[i].iov_base, v->stream.u.file.start + pos, copy_len);
|
memcpy(vecs[i].iov_base, v->stream.u.file.start + pos, copy_len);
|
||||||
|
|
||||||
if (copy_len < vecs->vec[i].iov_len)
|
if (copy_len < vecs[i].iov_len) {
|
||||||
memset((char *)vecs->vec[i].iov_base + copy_len, 0, vecs->vec[i].iov_len - copy_len);
|
memset((char *)vecs[i].iov_base + copy_len, 0, vecs[i].iov_len - copy_len);
|
||||||
|
*_numBytes = v->stream.u.file.len - pos;
|
||||||
|
}
|
||||||
|
|
||||||
pos += vecs->vec[i].iov_len;
|
pos += vecs[i].iov_len;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return EPERM;
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ssize_t
|
static status_t
|
||||||
bootfs_write_pages(fs_volume _fs, fs_vnode _v, iovecs *vecs, off_t pos)
|
bootfs_write_pages(fs_volume _fs, fs_vnode _v, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
||||||
{
|
{
|
||||||
TRACE(("bootfs_writepage: fs_cookie %p vnode %p, vecs %p, pos %Ld \n", _fs, _v, vecs, pos));
|
TRACE(("bootfs_writepage: fs_cookie %p vnode %p, vecs %p, pos %Ld \n", _fs, _v, vecs, pos));
|
||||||
|
|
||||||
|
@ -970,6 +972,8 @@ file_system_info gBootFileSystem = {
|
||||||
&bootfs_read_pages,
|
&bootfs_read_pages,
|
||||||
&bootfs_write_pages,
|
&bootfs_write_pages,
|
||||||
|
|
||||||
|
NULL, // get_file_map()
|
||||||
|
|
||||||
/* common */
|
/* common */
|
||||||
&bootfs_ioctl,
|
&bootfs_ioctl,
|
||||||
&bootfs_fsync,
|
&bootfs_fsync,
|
||||||
|
|
|
@ -1200,22 +1200,22 @@ pipefs_ioctl(fs_volume _volume, fs_vnode _vnode, fs_cookie _cookie, ulong op,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static status_t
|
static bool
|
||||||
pipefs_can_page(fs_volume _volume, fs_vnode _v)
|
pipefs_can_page(fs_volume _volume, fs_vnode _v)
|
||||||
{
|
{
|
||||||
return -1;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ssize_t
|
static status_t
|
||||||
pipefs_read_pages(fs_volume _volume, fs_vnode _v, iovecs *vecs, off_t pos)
|
pipefs_read_pages(fs_volume _volume, fs_vnode _v, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
||||||
{
|
{
|
||||||
return EPERM;
|
return EPERM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ssize_t
|
static status_t
|
||||||
pipefs_write_pages(fs_volume _volume, fs_vnode _v, iovecs *vecs, off_t pos)
|
pipefs_write_pages(fs_volume _volume, fs_vnode _v, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
||||||
{
|
{
|
||||||
return EPERM;
|
return EPERM;
|
||||||
}
|
}
|
||||||
|
@ -1293,6 +1293,8 @@ file_system_info gPipeFileSystem = {
|
||||||
&pipefs_read_pages,
|
&pipefs_read_pages,
|
||||||
&pipefs_write_pages,
|
&pipefs_write_pages,
|
||||||
|
|
||||||
|
NULL, // get_file_map()
|
||||||
|
|
||||||
/* common */
|
/* common */
|
||||||
&pipefs_ioctl,
|
&pipefs_ioctl,
|
||||||
&pipefs_fsync,
|
&pipefs_fsync,
|
||||||
|
|
|
@ -698,22 +698,22 @@ rootfs_ioctl(fs_volume _fs, fs_vnode _v, fs_cookie _cookie, ulong op, void *buf,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static status_t
|
static bool
|
||||||
rootfs_can_page(fs_volume _fs, fs_vnode _v)
|
rootfs_can_page(fs_volume _fs, fs_vnode _v)
|
||||||
{
|
{
|
||||||
return -1;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ssize_t
|
static status_t
|
||||||
rootfs_read_pages(fs_volume _fs, fs_vnode _v, iovecs *vecs, off_t pos)
|
rootfs_read_pages(fs_volume _fs, fs_vnode _v, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
||||||
{
|
{
|
||||||
return EPERM;
|
return EPERM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static ssize_t
|
static status_t
|
||||||
rootfs_write_pages(fs_volume _fs, fs_vnode _v, iovecs *vecs, off_t pos)
|
rootfs_write_pages(fs_volume _fs, fs_vnode _v, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
||||||
{
|
{
|
||||||
return EPERM;
|
return EPERM;
|
||||||
}
|
}
|
||||||
|
@ -939,6 +939,8 @@ file_system_info gRootFileSystem = {
|
||||||
&rootfs_read_pages,
|
&rootfs_read_pages,
|
||||||
&rootfs_write_pages,
|
&rootfs_write_pages,
|
||||||
|
|
||||||
|
NULL, // get_file_map()
|
||||||
|
|
||||||
/* common */
|
/* common */
|
||||||
&rootfs_ioctl,
|
&rootfs_ioctl,
|
||||||
&rootfs_fsync,
|
&rootfs_fsync,
|
||||||
|
|
|
@ -1570,7 +1570,7 @@ vfs_put_vnode_ptr(void *_vnode)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ssize_t
|
bool
|
||||||
vfs_can_page(void *_vnode)
|
vfs_can_page(void *_vnode)
|
||||||
{
|
{
|
||||||
struct vnode *vnode = (struct vnode *)_vnode;
|
struct vnode *vnode = (struct vnode *)_vnode;
|
||||||
|
@ -1580,29 +1580,29 @@ vfs_can_page(void *_vnode)
|
||||||
if (FS_CALL(vnode, can_page))
|
if (FS_CALL(vnode, can_page))
|
||||||
return FS_CALL(vnode, can_page)(vnode->mount->cookie, vnode->private_node);
|
return FS_CALL(vnode, can_page)(vnode->mount->cookie, vnode->private_node);
|
||||||
|
|
||||||
return 0;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ssize_t
|
status_t
|
||||||
vfs_read_page(void *_vnode, iovecs *vecs, off_t pos)
|
vfs_read_pages(void *_vnode, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
||||||
{
|
{
|
||||||
struct vnode *vnode = (struct vnode *)_vnode;
|
struct vnode *vnode = (struct vnode *)_vnode;
|
||||||
|
|
||||||
FUNCTION(("vfs_readpage: vnode %p, vecs %p, pos %Ld\n", vnode, vecs, pos));
|
FUNCTION(("vfs_readpage: vnode %p, vecs %p, pos %Ld\n", vnode, vecs, pos));
|
||||||
|
|
||||||
return FS_CALL(vnode, read_pages)(vnode->mount->cookie, vnode->private_node, vecs, pos);
|
return FS_CALL(vnode, read_pages)(vnode->mount->cookie, vnode->private_node, pos, vecs, count, _numBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ssize_t
|
status_t
|
||||||
vfs_write_page(void *_vnode, iovecs *vecs, off_t pos)
|
vfs_write_pages(void *_vnode, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
||||||
{
|
{
|
||||||
struct vnode *vnode = (struct vnode *)_vnode;
|
struct vnode *vnode = (struct vnode *)_vnode;
|
||||||
|
|
||||||
FUNCTION(("vfs_writepage: vnode %p, vecs %p, pos %Ld\n", vnode, vecs, pos));
|
FUNCTION(("vfs_writepage: vnode %p, vecs %p, pos %Ld\n", vnode, vecs, pos));
|
||||||
|
|
||||||
return FS_CALL(vnode, write_pages)(vnode->mount->cookie, vnode->private_node, vecs, pos);
|
return FS_CALL(vnode, write_pages)(vnode->mount->cookie, vnode->private_node, pos, vecs, count, _numBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue