Lines Matching refs:se

27     struct fuse_session *se;  member
115 struct fuse_session *se = req->se; in fuse_free_req() local
117 pthread_mutex_lock(&se->lock); in fuse_free_req()
123 pthread_mutex_unlock(&se->lock); in fuse_free_req()
129 static struct fuse_req *fuse_ll_alloc_req(struct fuse_session *se) in fuse_ll_alloc_req() argument
137 req->se = se; in fuse_ll_alloc_req()
147 static int fuse_send_msg(struct fuse_session *se, struct fuse_chan *ch, in fuse_send_msg() argument
166 if (fuse_lowlevel_is_virtio(se)) { in fuse_send_msg()
167 return virtio_send_msg(se, ch, iov, count); in fuse_send_msg()
191 return fuse_send_msg(req->se, req->ch, iov, count); in fuse_send_reply_iov_nofree()
458 static int fuse_send_data_iov_fallback(struct fuse_session *se, in fuse_send_data_iov_fallback() argument
474 return fuse_send_msg(se, ch, iov, iov_count); in fuse_send_data_iov_fallback()
477 if (fuse_lowlevel_is_virtio(se) && buf->count == 1 && in fuse_send_data_iov_fallback()
479 return virtio_send_data_iov(se, ch, iov, iov_count, buf, len); in fuse_send_data_iov_fallback()
486 static int fuse_send_data_iov(struct fuse_session *se, struct fuse_chan *ch, in fuse_send_data_iov() argument
492 return fuse_send_data_iov_fallback(se, ch, iov, iov_count, buf, len); in fuse_send_data_iov()
506 res = fuse_send_data_iov(req->se, req->ch, iov, 1, bufv); in fuse_reply_data()
710 if (req->se->op.lookup) { in do_lookup()
711 req->se->op.lookup(req, nodeid, name); in do_lookup()
728 if (req->se->op.forget) { in do_forget()
729 req->se->op.forget(req, nodeid, arg->nlookup); in do_forget()
772 if (req->se->op.forget_multi) { in do_batch_forget()
773 req->se->op.forget_multi(req, arg->count, forgets); in do_batch_forget()
774 } else if (req->se->op.forget) { in do_batch_forget()
780 dummy_req = fuse_ll_alloc_req(req->se); in do_batch_forget()
789 req->se->op.forget(dummy_req, forgets[i].ino, forgets[i].nlookup); in do_batch_forget()
817 if (req->se->op.getattr) { in do_getattr()
818 req->se->op.getattr(req, nodeid, fip); in do_getattr()
827 if (req->se->op.setattr) { in do_setattr()
853 req->se->op.setattr(req, nodeid, &stbuf, arg->valid, fi); in do_setattr()
870 if (req->se->op.access) { in do_access()
871 req->se->op.access(req, nodeid, arg->mask); in do_access()
882 if (req->se->op.readlink) { in do_readlink()
883 req->se->op.readlink(req, nodeid); in do_readlink()
904 if (req->se->op.mknod) { in do_mknod()
905 req->se->op.mknod(req, nodeid, name, arg->mode, arg->rdev); in do_mknod()
926 if (req->se->op.mkdir) { in do_mkdir()
927 req->se->op.mkdir(req, nodeid, name, arg->mode); in do_mkdir()
943 if (req->se->op.unlink) { in do_unlink()
944 req->se->op.unlink(req, nodeid, name); in do_unlink()
960 if (req->se->op.rmdir) { in do_rmdir()
961 req->se->op.rmdir(req, nodeid, name); in do_rmdir()
978 if (req->se->op.symlink) { in do_symlink()
979 req->se->op.symlink(req, linkname, nodeid, name); in do_symlink()
1000 if (req->se->op.rename) { in do_rename()
1001 req->se->op.rename(req, nodeid, oldname, arg->newdir, newname, 0); in do_rename()
1022 if (req->se->op.rename) { in do_rename2()
1023 req->se->op.rename(req, nodeid, oldname, arg->newdir, newname, in do_rename2()
1041 if (req->se->op.link) { in do_link()
1042 req->se->op.link(req, arg->oldnodeid, nodeid, name); in do_link()
1051 if (req->se->op.create) { in do_create()
1069 req->se->op.create(req, nodeid, name, arg->mode, &fi); in do_create()
1097 if (req->se->op.open) { in do_open()
1098 req->se->op.open(req, nodeid, &fi); in do_open()
1107 if (req->se->op.read) { in do_read()
1121 req->se->op.read(req, nodeid, arg->size, arg->offset, &fi); in do_read()
1154 if (req->se->op.write) { in do_write()
1155 req->se->op.write(req, nodeid, param, arg->size, arg->offset, &fi); in do_write()
1164 struct fuse_session *se = req->se; in do_write_buf() local
1208 se->op.write_buf(req, nodeid, pbufv, arg->offset, &fi); in do_write_buf()
1228 if (req->se->op.flush) { in do_flush()
1229 req->se->op.flush(req, nodeid, &fi); in do_flush()
1257 if (req->se->op.release) { in do_release()
1258 req->se->op.release(req, nodeid, &fi); in do_release()
1281 if (req->se->op.fsync) { in do_fsync()
1283 req->se->op.fsync(req, nodeid, datasync, NULL); in do_fsync()
1285 req->se->op.fsync(req, nodeid, datasync, &fi); in do_fsync()
1307 if (req->se->op.opendir) { in do_opendir()
1308 req->se->op.opendir(req, nodeid, &fi); in do_opendir()
1329 if (req->se->op.readdir) { in do_readdir()
1330 req->se->op.readdir(req, nodeid, arg->size, arg->offset, &fi); in do_readdir()
1351 if (req->se->op.readdirplus) { in do_readdirplus()
1352 req->se->op.readdirplus(req, nodeid, arg->size, arg->offset, &fi); in do_readdirplus()
1374 if (req->se->op.releasedir) { in do_releasedir()
1375 req->se->op.releasedir(req, nodeid, &fi); in do_releasedir()
1398 if (req->se->op.fsyncdir) { in do_fsyncdir()
1399 req->se->op.fsyncdir(req, nodeid, datasync, &fi); in do_fsyncdir()
1411 if (req->se->op.statfs) { in do_statfs()
1412 req->se->op.statfs(req, nodeid); in do_statfs()
1428 bool setxattr_ext = req->se->conn.want & FUSE_CAP_SETXATTR_EXT; in do_setxattr()
1447 if (req->se->op.setxattr) { in do_setxattr()
1449 req->se->op.setxattr(req, nodeid, name, value, arg->size, arg->flags, in do_setxattr()
1469 if (req->se->op.getxattr) { in do_getxattr()
1470 req->se->op.getxattr(req, nodeid, name, arg->size); in do_getxattr()
1487 if (req->se->op.listxattr) { in do_listxattr()
1488 req->se->op.listxattr(req, nodeid, arg->size); in do_listxattr()
1504 if (req->se->op.removexattr) { in do_removexattr()
1505 req->se->op.removexattr(req, nodeid, name); in do_removexattr()
1544 if (req->se->op.getlk) { in do_getlk()
1545 req->se->op.getlk(req, nodeid, &fi, &flock); in do_getlk()
1586 if (req->se->op.flock) { in do_setlk_common()
1587 req->se->op.flock(req, nodeid, &fi, op); in do_setlk_common()
1593 if (req->se->op.setlk) { in do_setlk_common()
1594 req->se->op.setlk(req, nodeid, &fi, &flock, sleep); in do_setlk_common()
1613 static int find_interrupted(struct fuse_session *se, struct fuse_req *req) in find_interrupted() argument
1617 for (curr = se->list.next; curr != &se->list; curr = curr->next) { in find_interrupted()
1623 pthread_mutex_unlock(&se->lock); in find_interrupted()
1627 pthread_mutex_lock(&se->lock); in find_interrupted()
1631 pthread_mutex_unlock(&se->lock); in find_interrupted()
1637 pthread_mutex_lock(&se->lock); in find_interrupted()
1646 for (curr = se->interrupts.next; curr != &se->interrupts; in find_interrupted()
1659 struct fuse_session *se = req->se; in do_interrupt() local
1674 pthread_mutex_lock(&se->lock); in do_interrupt()
1675 if (find_interrupted(se, req)) { in do_interrupt()
1678 list_add_req(req, &se->interrupts); in do_interrupt()
1680 pthread_mutex_unlock(&se->lock); in do_interrupt()
1683 static struct fuse_req *check_interrupt(struct fuse_session *se, in check_interrupt() argument
1688 for (curr = se->interrupts.next; curr != &se->interrupts; in check_interrupt()
1697 curr = se->interrupts.next; in check_interrupt()
1698 if (curr != &se->interrupts) { in check_interrupt()
1717 if (req->se->op.bmap) { in do_bmap()
1718 req->se->op.bmap(req, nodeid, arg->blocksize, arg->block); in do_bmap()
1739 if (flags & FUSE_IOCTL_DIR && !(req->se->conn.want & FUSE_CAP_IOCTL_DIR)) { in do_ioctl()
1759 if (req->se->op.ioctl) { in do_ioctl()
1760 req->se->op.ioctl(req, nodeid, arg->cmd, (void *)(uintptr_t)arg->arg, in do_ioctl()
1788 if (req->se->op.poll) { in do_poll()
1798 ph->se = req->se; in do_poll()
1801 req->se->op.poll(req, nodeid, &fi, ph); in do_poll()
1822 if (req->se->op.fallocate) { in do_fallocate()
1823 req->se->op.fallocate(req, nodeid, arg->mode, arg->offset, arg->length, in do_fallocate()
1849 if (req->se->op.copy_file_range) { in do_copy_file_range()
1850 req->se->op.copy_file_range(req, nodeid_in, arg->off_in, &fi_in, in do_copy_file_range()
1872 if (req->se->op.lseek) { in do_lseek()
1873 req->se->op.lseek(req, nodeid, arg->offset, arg->whence, &fi); in do_lseek()
1885 struct fuse_session *se = req->se; in do_init() local
1886 size_t bufsize = se->bufsize; in do_init()
1911 se->conn.proto_major = arg->major; in do_init()
1912 se->conn.proto_minor = arg->minor; in do_init()
1913 se->conn.capable = 0; in do_init()
1914 se->conn.want = 0; in do_init()
1933 if (arg->max_readahead < se->conn.max_readahead) { in do_init()
1934 se->conn.max_readahead = arg->max_readahead; in do_init()
1937 se->conn.capable |= FUSE_CAP_ASYNC_READ; in do_init()
1940 se->conn.capable |= FUSE_CAP_POSIX_LOCKS; in do_init()
1943 se->conn.capable |= FUSE_CAP_ATOMIC_O_TRUNC; in do_init()
1946 se->conn.capable |= FUSE_CAP_EXPORT_SUPPORT; in do_init()
1949 se->conn.capable |= FUSE_CAP_DONT_MASK; in do_init()
1952 se->conn.capable |= FUSE_CAP_FLOCK_LOCKS; in do_init()
1955 se->conn.capable |= FUSE_CAP_AUTO_INVAL_DATA; in do_init()
1958 se->conn.capable |= FUSE_CAP_READDIRPLUS; in do_init()
1961 se->conn.capable |= FUSE_CAP_READDIRPLUS_AUTO; in do_init()
1964 se->conn.capable |= FUSE_CAP_ASYNC_DIO; in do_init()
1967 se->conn.capable |= FUSE_CAP_WRITEBACK_CACHE; in do_init()
1970 se->conn.capable |= FUSE_CAP_NO_OPEN_SUPPORT; in do_init()
1973 se->conn.capable |= FUSE_CAP_PARALLEL_DIROPS; in do_init()
1976 se->conn.capable |= FUSE_CAP_POSIX_ACL; in do_init()
1979 se->conn.capable |= FUSE_CAP_HANDLE_KILLPRIV; in do_init()
1982 se->conn.capable |= FUSE_CAP_NO_OPENDIR_SUPPORT; in do_init()
1992 se->conn.capable |= FUSE_CAP_SUBMOUNTS; in do_init()
1995 se->conn.capable |= FUSE_CAP_HANDLE_KILLPRIV_V2; in do_init()
1998 se->conn.capable |= FUSE_CAP_SETXATTR_EXT; in do_init()
2002 se->conn.capable |= FUSE_CAP_SPLICE_WRITE | FUSE_CAP_SPLICE_MOVE; in do_init()
2004 se->conn.capable |= FUSE_CAP_SPLICE_READ; in do_init()
2006 se->conn.capable |= FUSE_CAP_IOCTL_DIR; in do_init()
2017 if ((cond) && (se->conn.capable & (cap))) \ in do_init()
2018 se->conn.want |= (cap) in do_init()
2026 LL_SET_DEFAULT(se->op.write_buf, FUSE_CAP_SPLICE_READ); in do_init()
2027 LL_SET_DEFAULT(se->op.getlk && se->op.setlk, FUSE_CAP_POSIX_LOCKS); in do_init()
2028 LL_SET_DEFAULT(se->op.flock, FUSE_CAP_FLOCK_LOCKS); in do_init()
2029 LL_SET_DEFAULT(se->op.readdirplus, FUSE_CAP_READDIRPLUS); in do_init()
2030 LL_SET_DEFAULT(se->op.readdirplus && se->op.readdir, in do_init()
2032 se->conn.time_gran = 1; in do_init()
2039 se->bufsize = bufsize; in do_init()
2041 if (se->conn.max_write > bufsize - FUSE_BUFFER_HEADER_SIZE) { in do_init()
2042 se->conn.max_write = bufsize - FUSE_BUFFER_HEADER_SIZE; in do_init()
2045 se->got_init = 1; in do_init()
2046 se->got_destroy = 0; in do_init()
2047 if (se->op.init) { in do_init()
2048 se->op.init(se->userdata, &se->conn); in do_init()
2051 if (se->conn.want & (~se->conn.capable)) { in do_init()
2055 se->conn.want & (~se->conn.capable)); in do_init()
2057 se->error = -EPROTO; in do_init()
2058 fuse_session_exit(se); in do_init()
2062 if (se->conn.max_write < bufsize - FUSE_BUFFER_HEADER_SIZE) { in do_init()
2063 se->bufsize = se->conn.max_write + FUSE_BUFFER_HEADER_SIZE; in do_init()
2067 outarg.max_pages = (se->conn.max_write - 1) / getpagesize() + 1; in do_init()
2076 if (se->conn.want & FUSE_CAP_ASYNC_READ) { in do_init()
2079 if (se->conn.want & FUSE_CAP_PARALLEL_DIROPS) { in do_init()
2082 if (se->conn.want & FUSE_CAP_POSIX_LOCKS) { in do_init()
2085 if (se->conn.want & FUSE_CAP_ATOMIC_O_TRUNC) { in do_init()
2088 if (se->conn.want & FUSE_CAP_EXPORT_SUPPORT) { in do_init()
2091 if (se->conn.want & FUSE_CAP_DONT_MASK) { in do_init()
2094 if (se->conn.want & FUSE_CAP_FLOCK_LOCKS) { in do_init()
2097 if (se->conn.want & FUSE_CAP_AUTO_INVAL_DATA) { in do_init()
2100 if (se->conn.want & FUSE_CAP_READDIRPLUS) { in do_init()
2103 if (se->conn.want & FUSE_CAP_READDIRPLUS_AUTO) { in do_init()
2106 if (se->conn.want & FUSE_CAP_ASYNC_DIO) { in do_init()
2109 if (se->conn.want & FUSE_CAP_WRITEBACK_CACHE) { in do_init()
2112 if (se->conn.want & FUSE_CAP_POSIX_ACL) { in do_init()
2115 outarg.max_readahead = se->conn.max_readahead; in do_init()
2116 outarg.max_write = se->conn.max_write; in do_init()
2117 if (se->conn.max_background >= (1 << 16)) { in do_init()
2118 se->conn.max_background = (1 << 16) - 1; in do_init()
2120 if (se->conn.congestion_threshold > se->conn.max_background) { in do_init()
2121 se->conn.congestion_threshold = se->conn.max_background; in do_init()
2123 if (!se->conn.congestion_threshold) { in do_init()
2124 se->conn.congestion_threshold = se->conn.max_background * 3 / 4; in do_init()
2127 outarg.max_background = se->conn.max_background; in do_init()
2128 outarg.congestion_threshold = se->conn.congestion_threshold; in do_init()
2129 outarg.time_gran = se->conn.time_gran; in do_init()
2131 if (se->conn.want & FUSE_CAP_HANDLE_KILLPRIV_V2) { in do_init()
2135 if (se->conn.want & FUSE_CAP_SETXATTR_EXT) { in do_init()
2154 struct fuse_session *se = req->se; in do_destroy() local
2159 se->got_destroy = 1; in do_destroy()
2160 se->got_init = 0; in do_destroy()
2161 if (se->op.destroy) { in do_destroy()
2162 se->op.destroy(se->userdata); in do_destroy()
2168 int fuse_lowlevel_notify_store(struct fuse_session *se, fuse_ino_t ino, in fuse_lowlevel_notify_store() argument
2182 if (!se) { in fuse_lowlevel_notify_store()
2191 res = fuse_send_data_iov(se, NULL, iov, 2, bufv); in fuse_lowlevel_notify_store()
2201 return req->se->userdata; in fuse_req_userdata()
2213 pthread_mutex_lock(&req->se->lock); in fuse_req_interrupt_func()
2216 pthread_mutex_unlock(&req->se->lock); in fuse_req_interrupt_func()
2227 pthread_mutex_lock(&req->se->lock); in fuse_req_interrupted()
2229 pthread_mutex_unlock(&req->se->lock); in fuse_req_interrupted()
2296 void fuse_session_process_buf(struct fuse_session *se, in fuse_session_process_buf() argument
2300 fuse_session_process_buf_int(se, &bufv, NULL); in fuse_session_process_buf()
2312 void fuse_session_process_buf_int(struct fuse_session *se, in fuse_session_process_buf_int() argument
2334 req = fuse_ll_alloc_req(se); in fuse_session_process_buf_int()
2345 fuse_send_msg(se, ch, &iov, 1); in fuse_session_process_buf_int()
2363 pthread_rwlock_wrlock(&se->init_rwlock); in fuse_session_process_buf_int()
2365 pthread_rwlock_rdlock(&se->init_rwlock); in fuse_session_process_buf_int()
2369 if (!se->got_init) { in fuse_session_process_buf_int()
2372 expected = se->cuse_data ? CUSE_INIT : FUSE_INIT; in fuse_session_process_buf_int()
2377 if (fuse_lowlevel_is_virtio(se)) { in fuse_session_process_buf_int()
2384 se->got_destroy = 1; in fuse_session_process_buf_int()
2385 se->got_init = 0; in fuse_session_process_buf_int()
2386 if (se->op.destroy) { in fuse_session_process_buf_int()
2387 se->op.destroy(se->userdata); in fuse_session_process_buf_int()
2396 if (se->deny_others && in->uid != se->owner && in->uid != 0 && in fuse_session_process_buf_int()
2411 pthread_mutex_lock(&se->lock); in fuse_session_process_buf_int()
2412 intr = check_interrupt(se, req); in fuse_session_process_buf_int()
2413 list_add_req(req, &se->list); in fuse_session_process_buf_int()
2414 pthread_mutex_unlock(&se->lock); in fuse_session_process_buf_int()
2420 if (in->opcode == FUSE_WRITE && se->op.write_buf) { in fuse_session_process_buf_int()
2426 pthread_rwlock_unlock(&se->init_rwlock); in fuse_session_process_buf_int()
2431 pthread_rwlock_unlock(&se->init_rwlock); in fuse_session_process_buf_int()
2472 void fuse_session_destroy(struct fuse_session *se) in fuse_session_destroy() argument
2474 if (se->got_init && !se->got_destroy) { in fuse_session_destroy()
2475 if (se->op.destroy) { in fuse_session_destroy()
2476 se->op.destroy(se->userdata); in fuse_session_destroy()
2479 pthread_rwlock_destroy(&se->init_rwlock); in fuse_session_destroy()
2480 pthread_mutex_destroy(&se->lock); in fuse_session_destroy()
2481 free(se->cuse_data); in fuse_session_destroy()
2482 if (se->fd != -1) { in fuse_session_destroy()
2483 close(se->fd); in fuse_session_destroy()
2486 if (fuse_lowlevel_is_virtio(se)) { in fuse_session_destroy()
2487 virtio_session_close(se); in fuse_session_destroy()
2490 free(se->vu_socket_path); in fuse_session_destroy()
2491 se->vu_socket_path = NULL; in fuse_session_destroy()
2493 g_free(se); in fuse_session_destroy()
2501 struct fuse_session *se; in fuse_session_new() local
2516 se = g_try_new0(struct fuse_session, 1); in fuse_session_new()
2517 if (se == NULL) { in fuse_session_new()
2521 se->fd = -1; in fuse_session_new()
2522 se->vu_listen_fd = -1; in fuse_session_new()
2523 se->thread_pool_size = THREAD_POOL_SIZE; in fuse_session_new()
2524 se->conn.max_write = UINT_MAX; in fuse_session_new()
2525 se->conn.max_readahead = UINT_MAX; in fuse_session_new()
2528 if (fuse_opt_parse(args, se, fuse_ll_opts, NULL) == -1) { in fuse_session_new()
2545 if (!se->vu_socket_path && se->vu_listen_fd < 0) { in fuse_session_new()
2549 if (se->vu_socket_path && se->vu_listen_fd >= 0) { in fuse_session_new()
2554 if (se->vu_socket_group && !se->vu_socket_path) { in fuse_session_new()
2560 se->bufsize = FUSE_MAX_MAX_PAGES * getpagesize() + FUSE_BUFFER_HEADER_SIZE; in fuse_session_new()
2562 list_init_req(&se->list); in fuse_session_new()
2563 list_init_req(&se->interrupts); in fuse_session_new()
2564 fuse_mutex_init(&se->lock); in fuse_session_new()
2565 pthread_rwlock_init(&se->init_rwlock, NULL); in fuse_session_new()
2567 memcpy(&se->op, op, op_size); in fuse_session_new()
2568 se->owner = getuid(); in fuse_session_new()
2569 se->userdata = userdata; in fuse_session_new()
2571 return se; in fuse_session_new()
2576 g_free(se); in fuse_session_new()
2581 int fuse_session_mount(struct fuse_session *se) in fuse_session_mount() argument
2583 return virtio_session_mount(se); in fuse_session_mount()
2586 int fuse_session_fd(struct fuse_session *se) in fuse_session_fd() argument
2588 return se->fd; in fuse_session_fd()
2591 void fuse_session_unmount(struct fuse_session *se) in fuse_session_unmount() argument
2595 int fuse_lowlevel_is_virtio(struct fuse_session *se) in fuse_lowlevel_is_virtio() argument
2597 return !!se->virtio_dev; in fuse_lowlevel_is_virtio()
2600 void fuse_session_exit(struct fuse_session *se) in fuse_session_exit() argument
2602 se->exited = 1; in fuse_session_exit()
2605 void fuse_session_reset(struct fuse_session *se) in fuse_session_reset() argument
2607 se->exited = 0; in fuse_session_reset()
2608 se->error = 0; in fuse_session_reset()
2611 int fuse_session_exited(struct fuse_session *se) in fuse_session_exited() argument
2613 return se->exited; in fuse_session_exited()