コード例 #1
0
ファイル: kernel_interface.cpp プロジェクト: DonCN/haiku
static status_t
btrfs_io(fs_volume* _volume, fs_vnode* _node, void* _cookie, io_request* request)
{
	Volume* volume = (Volume*)_volume->private_volume;
	Inode* inode = (Inode*)_node->private_node;

#ifndef BTRFS_SHELL
	if (io_request_is_write(request) && volume->IsReadOnly()) {
		notify_io_request(request, B_READ_ONLY_DEVICE);
		return B_READ_ONLY_DEVICE;
	}
#endif

	if (inode->FileCache() == NULL) {
#ifndef BTRFS_SHELL
		notify_io_request(request, B_BAD_VALUE);
#endif
		return B_BAD_VALUE;
	}

	// We lock the node here and will unlock it in the "finished" hook.
	rw_lock_read_lock(inode->Lock());

	return do_iterative_fd_io(volume->Device(), request,
		iterative_io_get_vecs_hook, iterative_io_finished_hook, inode);
}
コード例 #2
0
static status_t
udf_io(fs_volume *volume, fs_vnode *vnode, void *cookie, io_request *request)
{
	if (io_request_is_write(request)) {
		notify_io_request(request, B_READ_ONLY_DEVICE);
		return B_READ_ONLY_DEVICE;
	}

	Icb *icb = (Icb *)vnode->private_node;
	if (icb->FileCache() == NULL) {
		notify_io_request(request, B_BAD_VALUE);
		return B_BAD_VALUE;
	}

	return do_iterative_fd_io(((Volume *)volume->private_volume)->Device(),
		request, iterative_io_get_vecs_hook, iterative_io_finished_hook, icb);
}
コード例 #3
0
static status_t
fs_io(fs_volume* _volume, fs_vnode* _node, void* _cookie, io_request* request)
{
	iso9660_volume* volume = (iso9660_volume*)_volume->private_volume;
	iso9660_inode* node = (iso9660_inode*)_node->private_node;

	if (io_request_is_write(request)) {
		notify_io_request(request, B_READ_ONLY_DEVICE);
		return B_READ_ONLY_DEVICE;
	}

	if ((node->flags & ISO_IS_DIR) != 0) {
		notify_io_request(request, B_IS_A_DIRECTORY);
		return B_IS_A_DIRECTORY;
	}

	return do_iterative_fd_io(volume->fd, request, iterative_io_get_vecs_hook,
		iterative_io_finished_hook, node);
}