• Home
  • Raw
  • Download

Lines Matching refs:se

48 	struct fuse_session *se;  member
133 struct fuse_session *se = req->se; in fuse_free_req() local
135 pthread_mutex_lock(&se->lock); in fuse_free_req()
142 pthread_mutex_unlock(&se->lock); in fuse_free_req()
147 static struct fuse_req *fuse_ll_alloc_req(struct fuse_session *se) in fuse_ll_alloc_req() argument
155 req->se = se; in fuse_ll_alloc_req()
165 static int fuse_send_msg(struct fuse_session *se, struct fuse_chan *ch, in fuse_send_msg() argument
171 if (se->debug) { in fuse_send_msg()
187 ssize_t res = writev(ch ? ch->fd : se->fd, in fuse_send_msg()
192 assert(se != NULL); in fuse_send_msg()
195 if (!fuse_session_exited(se) && err != ENOENT) in fuse_send_msg()
220 return fuse_send_msg(req->se, req->ch, iov, count); in fuse_send_reply_iov_nofree()
404 size_t size = req->se->conn.proto_minor < 9 ? in fuse_reply_entry()
409 if (!e->ino && req->se->conn.proto_minor < 4) in fuse_reply_entry()
421 size_t entrysize = req->se->conn.proto_minor < 9 ? in fuse_reply_create()
437 size_t size = req->se->conn.proto_minor < 9 ? in fuse_reply_attr()
484 static int fuse_send_data_iov_fallback(struct fuse_session *se, in fuse_send_data_iov_fallback() argument
503 return fuse_send_msg(se, ch, iov, iov_count); in fuse_send_data_iov_fallback()
521 res = fuse_send_msg(se, ch, iov, iov_count); in fuse_send_data_iov_fallback()
566 static struct fuse_ll_pipe *fuse_ll_get_pipe(struct fuse_session *se) in fuse_ll_get_pipe() argument
568 struct fuse_ll_pipe *llp = pthread_getspecific(se->pipe_key); in fuse_ll_get_pipe()
588 pthread_setspecific(se->pipe_key, llp); in fuse_ll_get_pipe()
595 static void fuse_ll_clear_pipe(struct fuse_session *se) in fuse_ll_clear_pipe() argument
597 struct fuse_ll_pipe *llp = pthread_getspecific(se->pipe_key); in fuse_ll_clear_pipe()
599 pthread_setspecific(se->pipe_key, NULL); in fuse_ll_clear_pipe()
650 static int fuse_send_data_iov(struct fuse_session *se, struct fuse_chan *ch, in fuse_send_data_iov() argument
665 if (se->broken_splice_nonblock) in fuse_send_data_iov()
682 if (se->conn.proto_minor < 14 || in fuse_send_data_iov()
683 !(se->conn.want & FUSE_CAP_SPLICE_WRITE)) in fuse_send_data_iov()
686 llp = fuse_ll_get_pipe(se); in fuse_send_data_iov()
747 se->broken_splice_nonblock = 1; in fuse_send_data_iov()
749 pthread_setspecific(se->pipe_key, NULL); in fuse_send_data_iov()
806 res = fuse_send_msg(se, ch, iov, iov_count); in fuse_send_data_iov()
816 if (se->debug) { in fuse_send_data_iov()
824 (se->conn.want & FUSE_CAP_SPLICE_MOVE)) in fuse_send_data_iov()
827 res = splice(llp->pipe[0], NULL, ch ? ch->fd : se->fd, in fuse_send_data_iov()
843 fuse_ll_clear_pipe(se); in fuse_send_data_iov()
847 return fuse_send_data_iov_fallback(se, ch, iov, iov_count, buf, len); in fuse_send_data_iov()
850 static int fuse_send_data_iov(struct fuse_session *se, struct fuse_chan *ch, in fuse_send_data_iov() argument
857 return fuse_send_data_iov_fallback(se, ch, iov, iov_count, buf, len); in fuse_send_data_iov()
874 res = fuse_send_data_iov(req->se, req->ch, iov, 1, bufv, flags); in fuse_reply_data()
886 size_t size = req->se->conn.proto_minor < 4 ? in fuse_reply_statfs()
969 if (req->se->conn.proto_minor < 16) { in fuse_reply_ioctl_retry()
1089 if (req->se->op.lookup) in do_lookup()
1090 req->se->op.lookup(req, nodeid, name); in do_lookup()
1099 if (req->se->op.forget) in do_forget()
1100 req->se->op.forget(req, nodeid, arg->nlookup); in do_forget()
1114 if (req->se->op.forget_multi) { in do_batch_forget()
1115 req->se->op.forget_multi(req, arg->count, in do_batch_forget()
1117 } else if (req->se->op.forget) { in do_batch_forget()
1122 dummy_req = fuse_ll_alloc_req(req->se); in do_batch_forget()
1130 req->se->op.forget(dummy_req, forget->nodeid, in do_batch_forget()
1144 if (req->se->conn.proto_minor >= 9) { in do_getattr()
1154 if (req->se->op.getattr) in do_getattr()
1155 req->se->op.getattr(req, nodeid, fip); in do_getattr()
1164 if (req->se->op.setattr) { in do_setattr()
1187 req->se->op.setattr(req, nodeid, &stbuf, arg->valid, fi); in do_setattr()
1196 if (req->se->op.access) in do_access()
1197 req->se->op.access(req, nodeid, arg->mask); in do_access()
1206 if (req->se->op.readlink) in do_readlink()
1207 req->se->op.readlink(req, nodeid); in do_readlink()
1216 if (req->se->op.canonical_path) in do_canonical_path()
1217 req->se->op.canonical_path(req, nodeid); in do_canonical_path()
1227 if (req->se->conn.proto_minor >= 12) in do_mknod()
1232 if (req->se->op.mknod) in do_mknod()
1233 req->se->op.mknod(req, nodeid, name, arg->mode, arg->rdev); in do_mknod()
1242 if (req->se->conn.proto_minor >= 12) in do_mkdir()
1245 if (req->se->op.mkdir) in do_mkdir()
1246 req->se->op.mkdir(req, nodeid, PARAM(arg), arg->mode); in do_mkdir()
1255 if (req->se->op.unlink) in do_unlink()
1256 req->se->op.unlink(req, nodeid, name); in do_unlink()
1265 if (req->se->op.rmdir) in do_rmdir()
1266 req->se->op.rmdir(req, nodeid, name); in do_rmdir()
1276 if (req->se->op.symlink) in do_symlink()
1277 req->se->op.symlink(req, linkname, nodeid, name); in do_symlink()
1288 if (req->se->op.rename) in do_rename()
1289 req->se->op.rename(req, nodeid, oldname, arg->newdir, newname, in do_rename()
1301 if (req->se->op.rename) in do_rename2()
1302 req->se->op.rename(req, nodeid, oldname, arg->newdir, newname, in do_rename2()
1312 if (req->se->op.link) in do_link()
1313 req->se->op.link(req, arg->oldnodeid, nodeid, PARAM(arg)); in do_link()
1322 if (req->se->op.create) { in do_create()
1329 if (req->se->conn.proto_minor >= 12) in do_create()
1334 req->se->op.create(req, nodeid, name, arg->mode, &fi); in do_create()
1347 if (req->se->op.open) in do_open()
1348 req->se->op.open(req, nodeid, &fi); in do_open()
1357 if (req->se->op.read) { in do_read()
1362 if (req->se->conn.proto_minor >= 9) { in do_read()
1366 req->se->op.read(req, nodeid, arg->size, arg->offset, &fi); in do_read()
1381 if (req->se->conn.proto_minor < 9) { in do_write()
1389 if (req->se->op.write) in do_write()
1390 req->se->op.write(req, nodeid, param, arg->size, in do_write()
1399 struct fuse_session *se = req->se; in do_write_buf() local
1411 if (se->conn.proto_minor < 9) { in do_write_buf()
1432 se->op.write_buf(req, nodeid, &bufv, arg->offset, &fi); in do_write_buf()
1437 fuse_ll_clear_pipe(se); in do_write_buf()
1448 if (req->se->conn.proto_minor >= 7) in do_flush()
1451 if (req->se->op.flush) in do_flush()
1452 req->se->op.flush(req, nodeid, &fi); in do_flush()
1465 if (req->se->conn.proto_minor >= 8) { in do_release()
1474 if (req->se->op.release) in do_release()
1475 req->se->op.release(req, nodeid, &fi); in do_release()
1489 if (req->se->op.fsync) in do_fsync()
1490 req->se->op.fsync(req, nodeid, datasync, &fi); in do_fsync()
1503 if (req->se->op.opendir) in do_opendir()
1504 req->se->op.opendir(req, nodeid, &fi); in do_opendir()
1517 if (req->se->op.readdir) in do_readdir()
1518 req->se->op.readdir(req, nodeid, arg->size, arg->offset, &fi); in do_readdir()
1531 if (req->se->op.readdirplus) in do_readdirplus()
1532 req->se->op.readdirplus(req, nodeid, arg->size, arg->offset, &fi); in do_readdirplus()
1546 if (req->se->op.releasedir) in do_releasedir()
1547 req->se->op.releasedir(req, nodeid, &fi); in do_releasedir()
1561 if (req->se->op.fsyncdir) in do_fsyncdir()
1562 req->se->op.fsyncdir(req, nodeid, datasync, &fi); in do_fsyncdir()
1572 if (req->se->op.statfs) in do_statfs()
1573 req->se->op.statfs(req, nodeid); in do_statfs()
1589 if (req->se->op.setxattr) in do_setxattr()
1590 req->se->op.setxattr(req, nodeid, name, value, arg->size, in do_setxattr()
1600 if (req->se->op.getxattr) in do_getxattr()
1601 req->se->op.getxattr(req, nodeid, PARAM(arg), arg->size); in do_getxattr()
1610 if (req->se->op.listxattr) in do_listxattr()
1611 req->se->op.listxattr(req, nodeid, arg->size); in do_listxattr()
1620 if (req->se->op.removexattr) in do_removexattr()
1621 req->se->op.removexattr(req, nodeid, name); in do_removexattr()
1651 if (req->se->op.getlk) in do_getlk()
1652 req->se->op.getlk(req, nodeid, &fi, &flock); in do_getlk()
1685 if (req->se->op.flock) in do_setlk_common()
1686 req->se->op.flock(req, nodeid, &fi, op); in do_setlk_common()
1691 if (req->se->op.setlk) in do_setlk_common()
1692 req->se->op.setlk(req, nodeid, &fi, &flock, sleep); in do_setlk_common()
1708 static int find_interrupted(struct fuse_session *se, struct fuse_req *req) in find_interrupted() argument
1712 for (curr = se->list.next; curr != &se->list; curr = curr->next) { in find_interrupted()
1718 pthread_mutex_unlock(&se->lock); in find_interrupted()
1722 pthread_mutex_lock(&se->lock); in find_interrupted()
1726 pthread_mutex_unlock(&se->lock); in find_interrupted()
1731 pthread_mutex_lock(&se->lock); in find_interrupted()
1739 for (curr = se->interrupts.next; curr != &se->interrupts; in find_interrupted()
1750 struct fuse_session *se = req->se; in do_interrupt() local
1753 if (se->debug) in do_interrupt()
1759 pthread_mutex_lock(&se->lock); in do_interrupt()
1760 if (find_interrupted(se, req)) in do_interrupt()
1763 list_add_req(req, &se->interrupts); in do_interrupt()
1764 pthread_mutex_unlock(&se->lock); in do_interrupt()
1767 static struct fuse_req *check_interrupt(struct fuse_session *se, in check_interrupt() argument
1772 for (curr = se->interrupts.next; curr != &se->interrupts; in check_interrupt()
1781 curr = se->interrupts.next; in check_interrupt()
1782 if (curr != &se->interrupts) { in check_interrupt()
1794 if (req->se->op.bmap) in do_bmap()
1795 req->se->op.bmap(req, nodeid, arg->blocksize, arg->block); in do_bmap()
1808 !(req->se->conn.want & FUSE_CAP_IOCTL_DIR)) { in do_ioctl()
1816 if (sizeof(void *) == 4 && req->se->conn.proto_minor >= 16 && in do_ioctl()
1821 if (req->se->op.ioctl) in do_ioctl()
1822 req->se->op.ioctl(req, nodeid, arg->cmd, in do_ioctl()
1843 if (req->se->op.poll) { in do_poll()
1853 ph->se = req->se; in do_poll()
1856 req->se->op.poll(req, nodeid, &fi, ph); in do_poll()
1870 if (req->se->op.fallocate) in do_fallocate()
1871 req->se->op.fallocate(req, nodeid, arg->mode, arg->offset, arg->length, &fi); in do_fallocate()
1888 if (req->se->op.copy_file_range) in do_copy_file_range()
1889 req->se->op.copy_file_range(req, nodeid_in, arg->off_in, in do_copy_file_range()
1905 if (req->se->op.lseek) in do_lseek()
1906 req->se->op.lseek(req, nodeid, arg->offset, arg->whence, &fi); in do_lseek()
1915 struct fuse_session *se = req->se; in do_init() local
1916 size_t bufsize = se->bufsize; in do_init()
1920 if (se->debug) { in do_init()
1928 se->conn.proto_major = arg->major; in do_init()
1929 se->conn.proto_minor = arg->minor; in do_init()
1930 se->conn.capable = 0; in do_init()
1931 se->conn.want = 0; in do_init()
1951 if (arg->max_readahead < se->conn.max_readahead) in do_init()
1952 se->conn.max_readahead = arg->max_readahead; in do_init()
1954 se->conn.capable |= FUSE_CAP_ASYNC_READ; in do_init()
1956 se->conn.capable |= FUSE_CAP_POSIX_LOCKS; in do_init()
1958 se->conn.capable |= FUSE_CAP_ATOMIC_O_TRUNC; in do_init()
1960 se->conn.capable |= FUSE_CAP_EXPORT_SUPPORT; in do_init()
1962 se->conn.capable |= FUSE_CAP_DONT_MASK; in do_init()
1964 se->conn.capable |= FUSE_CAP_FLOCK_LOCKS; in do_init()
1966 se->conn.capable |= FUSE_CAP_AUTO_INVAL_DATA; in do_init()
1968 se->conn.capable |= FUSE_CAP_READDIRPLUS; in do_init()
1970 se->conn.capable |= FUSE_CAP_READDIRPLUS_AUTO; in do_init()
1972 se->conn.capable |= FUSE_CAP_ASYNC_DIO; in do_init()
1974 se->conn.capable |= FUSE_CAP_WRITEBACK_CACHE; in do_init()
1976 se->conn.capable |= FUSE_CAP_NO_OPEN_SUPPORT; in do_init()
1978 se->conn.capable |= FUSE_CAP_PARALLEL_DIROPS; in do_init()
1980 se->conn.capable |= FUSE_CAP_POSIX_ACL; in do_init()
1982 se->conn.capable |= FUSE_CAP_HANDLE_KILLPRIV; in do_init()
1984 se->conn.capable |= FUSE_CAP_NO_OPENDIR_SUPPORT; in do_init()
1994 se->conn.max_readahead = 0; in do_init()
1997 if (se->conn.proto_minor >= 14) { in do_init()
2000 se->conn.capable |= FUSE_CAP_SPLICE_WRITE | FUSE_CAP_SPLICE_MOVE; in do_init()
2002 se->conn.capable |= FUSE_CAP_SPLICE_READ; in do_init()
2005 if (se->conn.proto_minor >= 18) in do_init()
2006 se->conn.capable |= FUSE_CAP_IOCTL_DIR; in do_init()
2016 if ((cond) && (se->conn.capable & (cap))) \ in do_init()
2017 se->conn.want |= (cap) in do_init()
2025 LL_SET_DEFAULT(se->op.write_buf, FUSE_CAP_SPLICE_READ); in do_init()
2026 LL_SET_DEFAULT(se->op.getlk && se->op.setlk, 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()
2044 se->got_init = 1; in do_init()
2045 if (se->op.init) in do_init()
2046 se->op.init(se->userdata, &se->conn); in do_init()
2048 if (se->conn.want & (~se->conn.capable)) { in do_init()
2051 se->conn.want & (~se->conn.capable)); in do_init()
2053 se->error = -EPROTO; in do_init()
2054 fuse_session_exit(se); in do_init()
2058 unsigned max_read_mo = get_max_read(se->mo); in do_init()
2059 if (se->conn.max_read != max_read_mo) { in do_init()
2062 se->conn.max_read, max_read_mo); in do_init()
2064 se->error = -EPROTO; in do_init()
2065 fuse_session_exit(se); in do_init()
2069 if (se->conn.max_write < bufsize - FUSE_BUFFER_HEADER_SIZE) { in do_init()
2070 se->bufsize = se->conn.max_write + FUSE_BUFFER_HEADER_SIZE; in do_init()
2074 outarg.max_pages = (se->conn.max_write - 1) / getpagesize() + 1; in do_init()
2081 if (se->conn.want & FUSE_CAP_ASYNC_READ) in do_init()
2083 if (se->conn.want & FUSE_CAP_POSIX_LOCKS) in do_init()
2085 if (se->conn.want & FUSE_CAP_ATOMIC_O_TRUNC) in do_init()
2087 if (se->conn.want & FUSE_CAP_EXPORT_SUPPORT) in do_init()
2089 if (se->conn.want & FUSE_CAP_DONT_MASK) in do_init()
2091 if (se->conn.want & FUSE_CAP_FLOCK_LOCKS) in do_init()
2093 if (se->conn.want & FUSE_CAP_AUTO_INVAL_DATA) in do_init()
2095 if (se->conn.want & FUSE_CAP_READDIRPLUS) in do_init()
2097 if (se->conn.want & FUSE_CAP_READDIRPLUS_AUTO) in do_init()
2099 if (se->conn.want & FUSE_CAP_ASYNC_DIO) in do_init()
2101 if (se->conn.want & FUSE_CAP_WRITEBACK_CACHE) in do_init()
2103 if (se->conn.want & FUSE_CAP_POSIX_ACL) in do_init()
2105 outarg.max_readahead = se->conn.max_readahead; in do_init()
2106 outarg.max_write = se->conn.max_write; in do_init()
2107 if (se->conn.proto_minor >= 13) { in do_init()
2108 if (se->conn.max_background >= (1 << 16)) in do_init()
2109 se->conn.max_background = (1 << 16) - 1; in do_init()
2110 if (se->conn.congestion_threshold > se->conn.max_background) in do_init()
2111 se->conn.congestion_threshold = se->conn.max_background; in do_init()
2112 if (!se->conn.congestion_threshold) { in do_init()
2113 se->conn.congestion_threshold = in do_init()
2114 se->conn.max_background * 3 / 4; in do_init()
2117 outarg.max_background = se->conn.max_background; in do_init()
2118 outarg.congestion_threshold = se->conn.congestion_threshold; in do_init()
2120 if (se->conn.proto_minor >= 23) in do_init()
2121 outarg.time_gran = se->conn.time_gran; in do_init()
2123 if (se->debug) { in do_init()
2146 struct fuse_session *se = req->se; in do_destroy() local
2151 se->got_destroy = 1; in do_destroy()
2152 if (se->op.destroy) in do_destroy()
2153 se->op.destroy(se->userdata); in do_destroy()
2185 struct fuse_session *se = req->se; in do_notify_reply() local
2189 pthread_mutex_lock(&se->lock); in do_notify_reply()
2190 head = &se->notify_list; in do_notify_reply()
2197 pthread_mutex_unlock(&se->lock); in do_notify_reply()
2203 static int send_notify_iov(struct fuse_session *se, int notify_code, in send_notify_iov() argument
2208 if (!se->got_init) in send_notify_iov()
2216 return fuse_send_msg(se, NULL, iov, count); in send_notify_iov()
2230 return send_notify_iov(ph->se, FUSE_NOTIFY_POLL, iov, 2); in fuse_lowlevel_notify_poll()
2236 int fuse_lowlevel_notify_inval_inode(struct fuse_session *se, fuse_ino_t ino, in fuse_lowlevel_notify_inval_inode() argument
2242 if (!se) in fuse_lowlevel_notify_inval_inode()
2245 if (se->conn.proto_major < 6 || se->conn.proto_minor < 12) in fuse_lowlevel_notify_inval_inode()
2255 return send_notify_iov(se, FUSE_NOTIFY_INVAL_INODE, iov, 2); in fuse_lowlevel_notify_inval_inode()
2258 int fuse_lowlevel_notify_inval_entry(struct fuse_session *se, fuse_ino_t parent, in fuse_lowlevel_notify_inval_entry() argument
2264 if (!se) in fuse_lowlevel_notify_inval_entry()
2267 if (se->conn.proto_major < 6 || se->conn.proto_minor < 12) in fuse_lowlevel_notify_inval_entry()
2279 return send_notify_iov(se, FUSE_NOTIFY_INVAL_ENTRY, iov, 3); in fuse_lowlevel_notify_inval_entry()
2282 int fuse_lowlevel_notify_delete(struct fuse_session *se, in fuse_lowlevel_notify_delete() argument
2289 if (!se) in fuse_lowlevel_notify_delete()
2292 if (se->conn.proto_major < 6 || se->conn.proto_minor < 18) in fuse_lowlevel_notify_delete()
2305 return send_notify_iov(se, FUSE_NOTIFY_DELETE, iov, 3); in fuse_lowlevel_notify_delete()
2308 int fuse_lowlevel_notify_store(struct fuse_session *se, fuse_ino_t ino, in fuse_lowlevel_notify_store() argument
2318 if (!se) in fuse_lowlevel_notify_store()
2321 if (se->conn.proto_major < 6 || se->conn.proto_minor < 15) in fuse_lowlevel_notify_store()
2337 res = fuse_send_data_iov(se, NULL, iov, 2, bufv, flags); in fuse_lowlevel_notify_store()
2354 struct fuse_session *se = req->se; in fuse_ll_retrieve_reply() local
2376 if (se->op.retrieve_reply) { in fuse_ll_retrieve_reply()
2377 se->op.retrieve_reply(req, rreq->cookie, ino, in fuse_ll_retrieve_reply()
2385 fuse_ll_clear_pipe(se); in fuse_ll_retrieve_reply()
2388 int fuse_lowlevel_notify_retrieve(struct fuse_session *se, fuse_ino_t ino, in fuse_lowlevel_notify_retrieve() argument
2396 if (!se) in fuse_lowlevel_notify_retrieve()
2399 if (se->conn.proto_major < 6 || se->conn.proto_minor < 15) in fuse_lowlevel_notify_retrieve()
2406 pthread_mutex_lock(&se->lock); in fuse_lowlevel_notify_retrieve()
2408 rreq->nreq.unique = se->notify_ctr++; in fuse_lowlevel_notify_retrieve()
2410 list_add_nreq(&rreq->nreq, &se->notify_list); in fuse_lowlevel_notify_retrieve()
2411 pthread_mutex_unlock(&se->lock); in fuse_lowlevel_notify_retrieve()
2422 err = send_notify_iov(se, FUSE_NOTIFY_RETRIEVE, iov, 2); in fuse_lowlevel_notify_retrieve()
2424 pthread_mutex_lock(&se->lock); in fuse_lowlevel_notify_retrieve()
2426 pthread_mutex_unlock(&se->lock); in fuse_lowlevel_notify_retrieve()
2435 return req->se->userdata; in fuse_req_userdata()
2447 pthread_mutex_lock(&req->se->lock); in fuse_req_interrupt_func()
2450 pthread_mutex_unlock(&req->se->lock); in fuse_req_interrupt_func()
2460 pthread_mutex_lock(&req->se->lock); in fuse_req_interrupted()
2462 pthread_mutex_unlock(&req->se->lock); in fuse_req_interrupted()
2545 void fuse_session_process_buf(struct fuse_session *se, in fuse_session_process_buf() argument
2548 fuse_session_process_buf_int(se, buf, NULL); in fuse_session_process_buf()
2551 void fuse_session_process_buf_int(struct fuse_session *se, in fuse_session_process_buf_int() argument
2585 if (se->debug) { in fuse_session_process_buf_int()
2593 req = fuse_ll_alloc_req(se); in fuse_session_process_buf_int()
2604 fuse_send_msg(se, ch, &iov, 1); in fuse_session_process_buf_int()
2615 if (!se->got_init) { in fuse_session_process_buf_int()
2618 expected = se->cuse_data ? CUSE_INIT : FUSE_INIT; in fuse_session_process_buf_int()
2626 if (se->deny_others && in->uid != se->owner && in->uid != 0 && in fuse_session_process_buf_int()
2640 pthread_mutex_lock(&se->lock); in fuse_session_process_buf_int()
2641 intr = check_interrupt(se, req); in fuse_session_process_buf_int()
2642 list_add_req(req, &se->list); in fuse_session_process_buf_int()
2643 pthread_mutex_unlock(&se->lock); in fuse_session_process_buf_int()
2649 (in->opcode != FUSE_WRITE || !se->op.write_buf) && in fuse_session_process_buf_int()
2671 if (in->opcode == FUSE_WRITE && se->op.write_buf) in fuse_session_process_buf_int()
2686 fuse_ll_clear_pipe(se); in fuse_session_process_buf_int()
2718 void fuse_session_destroy(struct fuse_session *se) in fuse_session_destroy() argument
2722 if (se->got_init && !se->got_destroy) { in fuse_session_destroy()
2723 if (se->op.destroy) in fuse_session_destroy()
2724 se->op.destroy(se->userdata); in fuse_session_destroy()
2726 llp = pthread_getspecific(se->pipe_key); in fuse_session_destroy()
2729 pthread_key_delete(se->pipe_key); in fuse_session_destroy()
2730 pthread_mutex_destroy(&se->lock); in fuse_session_destroy()
2731 free(se->cuse_data); in fuse_session_destroy()
2732 if (se->fd != -1) in fuse_session_destroy()
2733 close(se->fd); in fuse_session_destroy()
2734 destroy_mount_opts(se->mo); in fuse_session_destroy()
2735 free(se); in fuse_session_destroy()
2745 int fuse_session_receive_buf(struct fuse_session *se, struct fuse_buf *buf) in fuse_session_receive_buf() argument
2747 return fuse_session_receive_buf_int(se, buf, NULL); in fuse_session_receive_buf()
2750 int fuse_session_receive_buf_int(struct fuse_session *se, struct fuse_buf *buf, in fuse_session_receive_buf_int() argument
2756 size_t bufsize = se->bufsize; in fuse_session_receive_buf_int()
2760 if (se->conn.proto_minor < 14 || !(se->conn.want & FUSE_CAP_SPLICE_READ)) in fuse_session_receive_buf_int()
2763 llp = fuse_ll_get_pipe(se); in fuse_session_receive_buf_int()
2783 res = splice(ch ? ch->fd : se->fd, in fuse_session_receive_buf_int()
2787 if (fuse_session_exited(se)) in fuse_session_receive_buf_int()
2794 fuse_session_exit(se); in fuse_session_receive_buf_int()
2824 buf->mem = malloc(se->bufsize); in fuse_session_receive_buf_int()
2831 buf->size = se->bufsize; in fuse_session_receive_buf_int()
2839 fuse_ll_clear_pipe(se); in fuse_session_receive_buf_int()
2844 fuse_ll_clear_pipe(se); in fuse_session_receive_buf_int()
2861 buf->mem = malloc(se->bufsize); in fuse_session_receive_buf_int()
2870 res = read(ch ? ch->fd : se->fd, buf->mem, se->bufsize); in fuse_session_receive_buf_int()
2873 if (fuse_session_exited(se)) in fuse_session_receive_buf_int()
2884 fuse_session_exit(se); in fuse_session_receive_buf_int()
2909 struct fuse_session *se; in fuse_session_new() local
2922 se = (struct fuse_session *) calloc(1, sizeof(struct fuse_session)); in fuse_session_new()
2923 if (se == NULL) { in fuse_session_new()
2927 se->fd = -1; in fuse_session_new()
2928 se->conn.max_write = UINT_MAX; in fuse_session_new()
2929 se->conn.max_readahead = UINT_MAX; in fuse_session_new()
2932 if(fuse_opt_parse(args, se, fuse_ll_opts, NULL) == -1) in fuse_session_new()
2934 if(se->deny_others) { in fuse_session_new()
2961 if (se->debug) in fuse_session_new()
2964 se->bufsize = FUSE_MAX_MAX_PAGES * getpagesize() + in fuse_session_new()
2967 list_init_req(&se->list); in fuse_session_new()
2968 list_init_req(&se->interrupts); in fuse_session_new()
2969 list_init_nreq(&se->notify_list); in fuse_session_new()
2970 se->notify_ctr = 1; in fuse_session_new()
2971 fuse_mutex_init(&se->lock); in fuse_session_new()
2973 err = pthread_key_create(&se->pipe_key, fuse_ll_pipe_destructor); in fuse_session_new()
2980 memcpy(&se->op, op, op_size); in fuse_session_new()
2981 se->owner = getuid(); in fuse_session_new()
2982 se->userdata = userdata; in fuse_session_new()
2984 se->mo = mo; in fuse_session_new()
2985 return se; in fuse_session_new()
2988 pthread_mutex_destroy(&se->lock); in fuse_session_new()
2994 free(se); in fuse_session_new()
2999 int fuse_session_mount(struct fuse_session *se, const char *mountpoint) in fuse_session_mount() argument
3027 se->fd = fd; in fuse_session_mount()
3032 fd = fuse_kern_mount(mountpoint, se->mo); in fuse_session_mount()
3035 se->fd = fd; in fuse_session_mount()
3038 se->mountpoint = strdup(mountpoint); in fuse_session_mount()
3039 if (se->mountpoint == NULL) in fuse_session_mount()
3049 int fuse_session_fd(struct fuse_session *se) in fuse_session_fd() argument
3051 return se->fd; in fuse_session_fd()
3054 void fuse_session_unmount(struct fuse_session *se) in fuse_session_unmount() argument
3056 if (se->mountpoint != NULL) { in fuse_session_unmount()
3057 fuse_kern_unmount(se->mountpoint, se->fd); in fuse_session_unmount()
3058 free(se->mountpoint); in fuse_session_unmount()
3059 se->mountpoint = NULL; in fuse_session_unmount()
3133 void fuse_session_exit(struct fuse_session *se) in fuse_session_exit() argument
3135 se->exited = 1; in fuse_session_exit()
3138 void fuse_session_reset(struct fuse_session *se) in fuse_session_reset() argument
3140 se->exited = 0; in fuse_session_reset()
3141 se->error = 0; in fuse_session_reset()
3144 int fuse_session_exited(struct fuse_session *se) in fuse_session_exited() argument
3146 return se->exited; in fuse_session_exited()