Added a "cookie" parameter to the fs_read|write|has_page[s]().
This has the advantage that the device can now be access in the right context. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@8876 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -462,7 +462,7 @@ devfs_publish_device(const char *path, pnp_node_info *node, pnp_devfs_driver_inf
|
|||||||
status_t status = B_OK;
|
status_t status = B_OK;
|
||||||
char temp[B_PATH_NAME_LENGTH + 1];
|
char temp[B_PATH_NAME_LENGTH + 1];
|
||||||
|
|
||||||
TRACE(("devfs_publish_device: entry path '%s', ident %p, hooks %p\n", path, ident, ops));
|
TRACE(("devfs_publish_device: entry path '%s', node %p, info %p, hooks %p\n", path, node, info, ops));
|
||||||
|
|
||||||
if (sDeviceFileSystem == NULL) {
|
if (sDeviceFileSystem == NULL) {
|
||||||
panic("devfs_publish_device called before devfs mounted\n");
|
panic("devfs_publish_device called before devfs mounted\n");
|
||||||
@@ -805,7 +805,7 @@ devfs_open(fs_volume _fs, fs_vnode _vnode, int openMode, fs_cookie *_cookie)
|
|||||||
struct devfs_cookie *cookie;
|
struct devfs_cookie *cookie;
|
||||||
status_t status = 0;
|
status_t status = 0;
|
||||||
|
|
||||||
TRACE(("devfs_open: vnode %p, oflags 0x%x, fs_cookie %p \n", vnode, oflags, _cookie));
|
TRACE(("devfs_open: vnode %p, oflags 0x%x, fs_cookie %p \n", vnode, openMode, _cookie));
|
||||||
|
|
||||||
cookie = (struct devfs_cookie *)malloc(sizeof(struct devfs_cookie));
|
cookie = (struct devfs_cookie *)malloc(sizeof(struct devfs_cookie));
|
||||||
if (cookie == NULL)
|
if (cookie == NULL)
|
||||||
@@ -1061,11 +1061,11 @@ devfs_ioctl(fs_volume _fs, fs_vnode _vnode, fs_cookie _cookie, ulong op, void *b
|
|||||||
|
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
devfs_can_page(fs_volume _fs, fs_vnode _vnode)
|
devfs_can_page(fs_volume _fs, fs_vnode _vnode, fs_cookie cookie)
|
||||||
{
|
{
|
||||||
struct devfs_vnode *vnode = (devfs_vnode *)_vnode;
|
struct devfs_vnode *vnode = (devfs_vnode *)_vnode;
|
||||||
|
|
||||||
TRACE(("devfs_canpage: vnode 0x%x\n", vnode));
|
TRACE(("devfs_canpage: vnode %p\n", vnode));
|
||||||
|
|
||||||
if (vnode->stream.type != STREAM_TYPE_DEVICE
|
if (vnode->stream.type != STREAM_TYPE_DEVICE
|
||||||
|| vnode->stream.u.dev.node == NULL)
|
|| vnode->stream.u.dev.node == NULL)
|
||||||
@@ -1076,11 +1076,12 @@ devfs_can_page(fs_volume _fs, fs_vnode _vnode)
|
|||||||
|
|
||||||
|
|
||||||
static status_t
|
static status_t
|
||||||
devfs_read_pages(fs_volume _fs, fs_vnode _vnode, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
devfs_read_pages(fs_volume _fs, fs_vnode _vnode, fs_cookie _cookie, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
||||||
{
|
{
|
||||||
struct devfs_vnode *vnode = (devfs_vnode *)_vnode;
|
struct devfs_vnode *vnode = (devfs_vnode *)_vnode;
|
||||||
|
struct devfs_cookie *cookie = (struct devfs_cookie *)_cookie;
|
||||||
|
|
||||||
TRACE(("devfs_read_page: vnode 0x%x, vecs 0x%x, pos 0x%x 0x%x\n", vnode, vecs, pos));
|
TRACE(("devfs_read_pages: vnode %p, vecs %p, count = %lu, pos = %Ld, size = %lu\n", vnode, vecs, count, pos, *_numBytes));
|
||||||
|
|
||||||
if (vnode->stream.type != STREAM_TYPE_DEVICE
|
if (vnode->stream.type != STREAM_TYPE_DEVICE
|
||||||
|| vnode->stream.u.dev.info->read_pages == NULL)
|
|| vnode->stream.u.dev.info->read_pages == NULL)
|
||||||
@@ -1089,16 +1090,17 @@ devfs_read_pages(fs_volume _fs, fs_vnode _vnode, off_t pos, const iovec *vecs, s
|
|||||||
if (vnode->stream.u.dev.part_map)
|
if (vnode->stream.u.dev.part_map)
|
||||||
translate_partition_access(vnode->stream.u.dev.part_map, pos, *_numBytes);
|
translate_partition_access(vnode->stream.u.dev.part_map, pos, *_numBytes);
|
||||||
|
|
||||||
return vnode->stream.u.dev.info->read_pages(vnode->stream.u.dev.node->cookie, pos, vecs, count, _numBytes);
|
return vnode->stream.u.dev.info->read_pages(cookie->u.dev.dcookie, pos, vecs, count, _numBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static status_t
|
static status_t
|
||||||
devfs_write_pages(fs_volume _fs, fs_vnode _vnode, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
devfs_write_pages(fs_volume _fs, fs_vnode _vnode, fs_cookie _cookie, off_t pos, const iovec *vecs, size_t count, size_t *_numBytes)
|
||||||
{
|
{
|
||||||
struct devfs_vnode *vnode = (devfs_vnode *)_vnode;
|
struct devfs_vnode *vnode = (devfs_vnode *)_vnode;
|
||||||
|
struct devfs_cookie *cookie = (struct devfs_cookie *)_cookie;
|
||||||
|
|
||||||
TRACE(("devfs_write_page: vnode 0x%x, vecs 0x%x, pos 0x%x 0x%x\n", vnode, vecs, pos));
|
TRACE(("devfs_write_pages: vnode %p, vecs %p, count = %lu, pos = %Ld, size = %lu\n", vnode, vecs, count, pos, *_numBytes));
|
||||||
|
|
||||||
if (vnode->stream.type != STREAM_TYPE_DEVICE
|
if (vnode->stream.type != STREAM_TYPE_DEVICE
|
||||||
|| vnode->stream.u.dev.info->write_pages == NULL)
|
|| vnode->stream.u.dev.info->write_pages == NULL)
|
||||||
@@ -1107,7 +1109,7 @@ devfs_write_pages(fs_volume _fs, fs_vnode _vnode, off_t pos, const iovec *vecs,
|
|||||||
if (vnode->stream.u.dev.part_map)
|
if (vnode->stream.u.dev.part_map)
|
||||||
translate_partition_access(vnode->stream.u.dev.part_map, pos, *_numBytes);
|
translate_partition_access(vnode->stream.u.dev.part_map, pos, *_numBytes);
|
||||||
|
|
||||||
return vnode->stream.u.dev.info->write_pages(vnode->stream.u.dev.node->cookie, pos, vecs, count, _numBytes);
|
return vnode->stream.u.dev.info->write_pages(cookie->u.dev.dcookie, pos, vecs, count, _numBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user