Lines Matching refs:exp

70 static void fuse_export_shutdown(BlockExport *exp);
71 static void fuse_export_delete(BlockExport *exp);
75 static int setup_fuse_export(FuseExport *exp, const char *mountpoint,
84 FuseExport *exp = opaque; in fuse_export_drained_begin() local
86 aio_set_fd_handler(exp->common.ctx, in fuse_export_drained_begin()
87 fuse_session_fd(exp->fuse_session), in fuse_export_drained_begin()
89 exp->fd_handler_set_up = false; in fuse_export_drained_begin()
94 FuseExport *exp = opaque; in fuse_export_drained_end() local
97 exp->common.ctx = blk_get_aio_context(exp->common.blk); in fuse_export_drained_end()
99 aio_set_fd_handler(exp->common.ctx, in fuse_export_drained_end()
100 fuse_session_fd(exp->fuse_session), in fuse_export_drained_end()
101 read_from_fuse_export, NULL, NULL, NULL, exp); in fuse_export_drained_end()
102 exp->fd_handler_set_up = true; in fuse_export_drained_end()
107 FuseExport *exp = opaque; in fuse_export_drained_poll() local
109 return qatomic_read(&exp->in_flight) > 0; in fuse_export_drained_poll()
122 FuseExport *exp = container_of(blk_exp, FuseExport, common); in fuse_export_create() local
132 blk_get_perm(exp->common.blk, &blk_perm, &blk_shared_perm); in fuse_export_create()
134 ret = blk_set_perm(exp->common.blk, blk_perm | BLK_PERM_RESIZE, in fuse_export_create()
141 blk_set_dev_ops(exp->common.blk, &fuse_export_blk_dev_ops, exp); in fuse_export_create()
148 blk_set_disable_request_queuing(exp->common.blk, true); in fuse_export_create()
178 exp->mountpoint = g_strdup(args->mountpoint); in fuse_export_create()
179 exp->writable = blk_exp_args->writable; in fuse_export_create()
180 exp->growable = args->growable; in fuse_export_create()
187 exp->st_mode = S_IFREG | S_IRUSR; in fuse_export_create()
188 if (exp->writable) { in fuse_export_create()
189 exp->st_mode |= S_IWUSR; in fuse_export_create()
191 exp->st_uid = getuid(); in fuse_export_create()
192 exp->st_gid = getgid(); in fuse_export_create()
196 ret = setup_fuse_export(exp, args->mountpoint, true, NULL); in fuse_export_create()
197 exp->allow_other = ret == 0; in fuse_export_create()
199 ret = setup_fuse_export(exp, args->mountpoint, false, errp); in fuse_export_create()
202 exp->allow_other = args->allow_other == FUSE_EXPORT_ALLOW_OTHER_ON; in fuse_export_create()
203 ret = setup_fuse_export(exp, args->mountpoint, exp->allow_other, errp); in fuse_export_create()
231 static int setup_fuse_export(FuseExport *exp, const char *mountpoint, in setup_fuse_export() argument
253 exp->fuse_session = fuse_session_new(&fuse_args, &fuse_ops, in setup_fuse_export()
254 sizeof(fuse_ops), exp); in setup_fuse_export()
256 if (!exp->fuse_session) { in setup_fuse_export()
262 ret = fuse_session_mount(exp->fuse_session, mountpoint); in setup_fuse_export()
268 exp->mounted = true; in setup_fuse_export()
272 aio_set_fd_handler(exp->common.ctx, in setup_fuse_export()
273 fuse_session_fd(exp->fuse_session), in setup_fuse_export()
274 read_from_fuse_export, NULL, NULL, NULL, exp); in setup_fuse_export()
275 exp->fd_handler_set_up = true; in setup_fuse_export()
280 fuse_export_shutdown(&exp->common); in setup_fuse_export()
290 FuseExport *exp = opaque; in read_from_fuse_export() local
293 blk_exp_ref(&exp->common); in read_from_fuse_export()
295 qatomic_inc(&exp->in_flight); in read_from_fuse_export()
298 ret = fuse_session_receive_buf(exp->fuse_session, &exp->fuse_buf); in read_from_fuse_export()
304 fuse_session_process_buf(exp->fuse_session, &exp->fuse_buf); in read_from_fuse_export()
307 if (qatomic_fetch_dec(&exp->in_flight) == 1) { in read_from_fuse_export()
311 blk_exp_unref(&exp->common); in read_from_fuse_export()
316 FuseExport *exp = container_of(blk_exp, FuseExport, common); in fuse_export_shutdown() local
318 if (exp->fuse_session) { in fuse_export_shutdown()
319 fuse_session_exit(exp->fuse_session); in fuse_export_shutdown()
321 if (exp->fd_handler_set_up) { in fuse_export_shutdown()
322 aio_set_fd_handler(exp->common.ctx, in fuse_export_shutdown()
323 fuse_session_fd(exp->fuse_session), in fuse_export_shutdown()
325 exp->fd_handler_set_up = false; in fuse_export_shutdown()
329 if (exp->mountpoint) { in fuse_export_shutdown()
334 g_hash_table_remove(exports, exp->mountpoint); in fuse_export_shutdown()
340 FuseExport *exp = container_of(blk_exp, FuseExport, common); in fuse_export_delete() local
342 if (exp->fuse_session) { in fuse_export_delete()
343 if (exp->mounted) { in fuse_export_delete()
344 fuse_session_unmount(exp->fuse_session); in fuse_export_delete()
347 fuse_session_destroy(exp->fuse_session); in fuse_export_delete()
350 free(exp->fuse_buf.mem); in fuse_export_delete()
351 g_free(exp->mountpoint); in fuse_export_delete()
412 FuseExport *exp = fuse_req_userdata(req); in fuse_getattr() local
414 length = blk_getlength(exp->common.blk); in fuse_getattr()
420 allocated_blocks = bdrv_get_allocated_file_size(blk_bs(exp->common.blk)); in fuse_getattr()
429 .st_mode = exp->st_mode, in fuse_getattr()
431 .st_uid = exp->st_uid, in fuse_getattr()
432 .st_gid = exp->st_gid, in fuse_getattr()
434 .st_blksize = blk_bs(exp->common.blk)->bl.request_alignment, in fuse_getattr()
444 static int fuse_do_truncate(const FuseExport *exp, int64_t size, in fuse_do_truncate() argument
453 add_resize_perm = !exp->growable && !exp->writable; in fuse_do_truncate()
466 blk_get_perm(exp->common.blk, &blk_perm, &blk_shared_perm); in fuse_do_truncate()
468 ret = blk_set_perm(exp->common.blk, blk_perm | BLK_PERM_RESIZE, in fuse_do_truncate()
475 ret = blk_truncate(exp->common.blk, size, true, prealloc, in fuse_do_truncate()
480 ret_check = blk_set_perm(exp->common.blk, blk_perm, in fuse_do_truncate()
499 FuseExport *exp = fuse_req_userdata(req); in fuse_setattr() local
504 if (exp->allow_other) { in fuse_setattr()
519 if (!exp->allow_other && in fuse_setattr()
527 if (!exp->writable && in fuse_setattr()
536 if (!exp->writable) { in fuse_setattr()
541 ret = fuse_do_truncate(exp, statbuf->st_size, true, PREALLOC_MODE_OFF); in fuse_setattr()
550 exp->st_mode = (statbuf->st_mode & 07777) | S_IFREG; in fuse_setattr()
554 exp->st_uid = statbuf->st_uid; in fuse_setattr()
558 exp->st_gid = statbuf->st_gid; in fuse_setattr()
579 FuseExport *exp = fuse_req_userdata(req); in fuse_read() local
594 length = blk_getlength(exp->common.blk); in fuse_read()
604 buf = qemu_try_blockalign(blk_bs(exp->common.blk), size); in fuse_read()
610 ret = blk_pread(exp->common.blk, offset, size, buf, 0); in fuse_read()
626 FuseExport *exp = fuse_req_userdata(req); in fuse_write() local
636 if (!exp->writable) { in fuse_write()
645 length = blk_getlength(exp->common.blk); in fuse_write()
652 if (exp->growable) { in fuse_write()
653 ret = fuse_do_truncate(exp, offset + size, true, PREALLOC_MODE_OFF); in fuse_write()
663 ret = blk_pwrite(exp->common.blk, offset, size, buf, 0); in fuse_write()
678 FuseExport *exp = fuse_req_userdata(req); in fuse_fallocate() local
682 if (!exp->writable) { in fuse_fallocate()
687 blk_len = blk_getlength(exp->common.blk); in fuse_fallocate()
708 ret = fuse_do_truncate(exp, offset, true, PREALLOC_MODE_OFF); in fuse_fallocate()
715 ret = fuse_do_truncate(exp, offset + length, true, in fuse_fallocate()
728 ret = blk_pwrite_zeroes(exp->common.blk, offset, size, in fuse_fallocate()
747 ret = fuse_do_truncate(exp, offset + length, false, in fuse_fallocate()
758 ret = blk_pwrite_zeroes(exp->common.blk, in fuse_fallocate()
778 FuseExport *exp = fuse_req_userdata(req); in fuse_fsync() local
781 ret = blk_flush(exp->common.blk); in fuse_fsync()
802 FuseExport *exp = fuse_req_userdata(req); in fuse_lseek() local
813 ret = bdrv_block_status_above(blk_bs(exp->common.blk), NULL, in fuse_lseek()
832 blk_len = blk_getlength(exp->common.blk); in fuse_lseek()