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); }
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); }
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); }