Lines Matching refs:fc
23 static int fuse_send_open(struct fuse_conn *fc, u64 nodeid, struct file *file, in fuse_send_open() argument
31 if (!fc->atomic_o_trunc) in fuse_send_open()
42 return fuse_simple_request(fc, &args); in fuse_send_open()
45 struct fuse_file *fuse_file_alloc(struct fuse_conn *fc) in fuse_file_alloc() argument
53 ff->fc = fc; in fuse_file_alloc()
65 spin_lock(&fc->lock); in fuse_file_alloc()
66 ff->kh = ++fc->khctr; in fuse_file_alloc()
67 spin_unlock(&fc->lock); in fuse_file_alloc()
84 static void fuse_release_end(struct fuse_conn *fc, struct fuse_req *req) in fuse_release_end() argument
94 if (ff->fc->no_open) { in fuse_file_put()
101 fuse_put_request(ff->fc, req); in fuse_file_put()
105 fuse_request_send(ff->fc, req); in fuse_file_put()
107 fuse_put_request(ff->fc, req); in fuse_file_put()
111 fuse_request_send_background(ff->fc, req); in fuse_file_put()
117 int fuse_do_open(struct fuse_conn *fc, u64 nodeid, struct file *file, in fuse_do_open() argument
123 ff = fuse_file_alloc(fc); in fuse_do_open()
129 if (!fc->no_open || isdir) { in fuse_do_open()
133 err = fuse_send_open(fc, nodeid, file, opcode, &outarg); in fuse_do_open()
142 fc->no_open = 1; in fuse_do_open()
159 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_link_write_file() local
166 spin_lock(&fc->lock); in fuse_link_write_file()
169 spin_unlock(&fc->lock); in fuse_link_write_file()
175 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_finish_open() local
183 if (fc->atomic_o_trunc && (file->f_flags & O_TRUNC)) { in fuse_finish_open()
186 spin_lock(&fc->lock); in fuse_finish_open()
187 fi->attr_version = ++fc->attr_version; in fuse_finish_open()
189 spin_unlock(&fc->lock); in fuse_finish_open()
191 if (fc->writeback_cache) in fuse_finish_open()
194 if ((file->f_mode & FMODE_WRITE) && fc->writeback_cache) in fuse_finish_open()
200 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_open_common() local
203 fc->atomic_o_trunc && in fuse_open_common()
204 fc->writeback_cache; in fuse_open_common()
213 err = fuse_do_open(fc, get_node_id(inode), file, isdir); in fuse_open_common()
226 struct fuse_conn *fc = ff->fc; in fuse_prepare_release() local
230 spin_lock(&fc->lock); in fuse_prepare_release()
233 rb_erase(&ff->polled_node, &fc->polled_files); in fuse_prepare_release()
234 spin_unlock(&fc->lock); in fuse_prepare_release()
262 inarg->lock_owner = fuse_lock_owner_id(ff->fc, in fuse_release_common()
277 fuse_file_put(ff, ff->fc->destroy_req != NULL); in fuse_release_common()
287 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_release() local
290 if (fc->writeback_cache) in fuse_release()
305 fuse_request_send(ff->fc, ff->reserved_req); in fuse_sync_release()
306 fuse_put_request(ff->fc, ff->reserved_req); in fuse_sync_release()
315 u64 fuse_lock_owner_id(struct fuse_conn *fc, fl_owner_t id) in fuse_lock_owner_id() argument
317 u32 *k = fc->scramble_key; in fuse_lock_owner_id()
342 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_range_is_writeback() local
347 spin_lock(&fc->lock); in fuse_range_is_writeback()
359 spin_unlock(&fc->lock); in fuse_range_is_writeback()
401 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_flush() local
410 if (fc->no_flush) in fuse_flush()
425 req = fuse_get_req_nofail_nopages(fc, file); in fuse_flush()
428 inarg.lock_owner = fuse_lock_owner_id(fc, id); in fuse_flush()
435 fuse_request_send(fc, req); in fuse_flush()
437 fuse_put_request(fc, req); in fuse_flush()
439 fc->no_flush = 1; in fuse_flush()
449 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_fsync_common() local
484 if ((!isdir && fc->no_fsync) || (isdir && fc->no_fsyncdir)) in fuse_fsync_common()
495 err = fuse_simple_request(fc, &args); in fuse_fsync_common()
498 fc->no_fsyncdir = 1; in fuse_fsync_common()
500 fc->no_fsync = 1; in fuse_fsync_common()
598 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_aio_complete() local
601 spin_lock(&fc->lock); in fuse_aio_complete()
602 fi->attr_version = ++fc->attr_version; in fuse_aio_complete()
603 spin_unlock(&fc->lock); in fuse_aio_complete()
612 static void fuse_aio_complete_req(struct fuse_conn *fc, struct fuse_req *req) in fuse_aio_complete_req() argument
632 static size_t fuse_async_req_send(struct fuse_conn *fc, struct fuse_req *req, in fuse_async_req_send() argument
645 fuse_request_send_background(fc, req); in fuse_async_req_send()
655 struct fuse_conn *fc = ff->fc; in fuse_send_read() local
662 inarg->lock_owner = fuse_lock_owner_id(fc, owner); in fuse_send_read()
666 return fuse_async_req_send(fc, req, count, io); in fuse_send_read()
668 fuse_request_send(fc, req); in fuse_send_read()
675 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_read_update_size() local
678 spin_lock(&fc->lock); in fuse_read_update_size()
681 fi->attr_version = ++fc->attr_version; in fuse_read_update_size()
684 spin_unlock(&fc->lock); in fuse_read_update_size()
691 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_short_read() local
693 if (fc->writeback_cache) { in fuse_short_read()
717 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_do_readpage() local
732 req = fuse_get_req(fc, 1); in fuse_do_readpage()
736 attr_ver = fuse_get_attr_version(fc); in fuse_do_readpage()
756 fuse_put_request(fc, req); in fuse_do_readpage()
777 static void fuse_readpages_end(struct fuse_conn *fc, struct fuse_req *req) in fuse_readpages_end() argument
815 struct fuse_conn *fc = ff->fc; in fuse_send_readpages() local
823 req->misc.read.attr_ver = fuse_get_attr_version(fc); in fuse_send_readpages()
824 if (fc->async_read) { in fuse_send_readpages()
827 fuse_request_send_background(fc, req); in fuse_send_readpages()
829 fuse_request_send(fc, req); in fuse_send_readpages()
830 fuse_readpages_end(fc, req); in fuse_send_readpages()
831 fuse_put_request(fc, req); in fuse_send_readpages()
847 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_readpages_fill() local
853 (req->num_pages + 1) * PAGE_SIZE > fc->max_read || in fuse_readpages_fill()
858 if (fc->async_read) in fuse_readpages_fill()
859 req = fuse_get_req_for_background(fc, nr_alloc); in fuse_readpages_fill()
861 req = fuse_get_req(fc, nr_alloc); in fuse_readpages_fill()
871 fuse_put_request(fc, req); in fuse_readpages_fill()
887 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_readpages() local
898 if (fc->async_read) in fuse_readpages()
899 data.req = fuse_get_req_for_background(fc, nr_alloc); in fuse_readpages()
901 data.req = fuse_get_req(fc, nr_alloc); in fuse_readpages()
912 fuse_put_request(fc, data.req); in fuse_readpages()
921 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_file_read_iter() local
928 if (fc->auto_inval_data || in fuse_file_read_iter()
951 if (ff->fc->minor < 9) in fuse_write_fill()
967 struct fuse_conn *fc = ff->fc; in fuse_send_write() local
974 inarg->lock_owner = fuse_lock_owner_id(fc, owner); in fuse_send_write()
978 return fuse_async_req_send(fc, req, count, io); in fuse_send_write()
980 fuse_request_send(fc, req); in fuse_send_write()
986 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_write_update_size() local
990 spin_lock(&fc->lock); in fuse_write_update_size()
991 fi->attr_version = ++fc->attr_version; in fuse_write_update_size()
996 spin_unlock(&fc->lock); in fuse_write_update_size()
1040 struct fuse_conn *fc = get_fuse_conn(mapping->host); in fuse_fill_write_pages() local
1055 bytes = min_t(size_t, bytes, fc->max_write - count); in fuse_fill_write_pages()
1092 if (!fc->big_writes) in fuse_fill_write_pages()
1094 } while (iov_iter_count(ii) && count < fc->max_write && in fuse_fill_write_pages()
1113 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_perform_write() local
1129 req = fuse_get_req(fc, nr_pages); in fuse_perform_write()
1153 fuse_put_request(fc, req); in fuse_perform_write()
1329 struct fuse_conn *fc = ff->fc; in fuse_direct_io() local
1330 size_t nmax = write ? fc->max_write : fc->max_read; in fuse_direct_io()
1340 req = fuse_get_req_for_background(fc, fuse_iter_npages(iter)); in fuse_direct_io()
1342 req = fuse_get_req(fc, fuse_iter_npages(iter)); in fuse_direct_io()
1383 fuse_put_request(fc, req); in fuse_direct_io()
1385 req = fuse_get_req_for_background(fc, in fuse_direct_io()
1388 req = fuse_get_req(fc, fuse_iter_npages(iter)); in fuse_direct_io()
1394 fuse_put_request(fc, req); in fuse_direct_io()
1449 static void fuse_writepage_free(struct fuse_conn *fc, struct fuse_req *req) in fuse_writepage_free() argument
1460 static void fuse_writepage_finish(struct fuse_conn *fc, struct fuse_req *req) in fuse_writepage_finish() argument
1477 static void fuse_send_writepage(struct fuse_conn *fc, struct fuse_req *req, in fuse_send_writepage() argument
1479 __releases(fc->lock) in fuse_send_writepage()
1480 __acquires(fc->lock) in fuse_send_writepage()
1486 if (!fc->connected) in fuse_send_writepage()
1500 fuse_request_send_background_locked(fc, req); in fuse_send_writepage()
1504 fuse_writepage_finish(fc, req); in fuse_send_writepage()
1505 spin_unlock(&fc->lock); in fuse_send_writepage()
1506 fuse_writepage_free(fc, req); in fuse_send_writepage()
1507 fuse_put_request(fc, req); in fuse_send_writepage()
1508 spin_lock(&fc->lock); in fuse_send_writepage()
1518 __releases(fc->lock) in fuse_flush_writepages()
1519 __acquires(fc->lock) in fuse_flush_writepages()
1521 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_flush_writepages() local
1529 fuse_send_writepage(fc, req, crop); in fuse_flush_writepages()
1533 static void fuse_writepage_end(struct fuse_conn *fc, struct fuse_req *req) in fuse_writepage_end() argument
1539 spin_lock(&fc->lock); in fuse_writepage_end()
1541 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_writepage_end() local
1572 fuse_send_writepage(fc, next, inarg->offset + inarg->size); in fuse_writepage_end()
1575 fuse_writepage_finish(fc, req); in fuse_writepage_end()
1576 spin_unlock(&fc->lock); in fuse_writepage_end()
1577 fuse_writepage_free(fc, req); in fuse_writepage_end()
1580 static struct fuse_file *__fuse_write_file_get(struct fuse_conn *fc, in __fuse_write_file_get() argument
1585 spin_lock(&fc->lock); in __fuse_write_file_get()
1591 spin_unlock(&fc->lock); in __fuse_write_file_get()
1596 static struct fuse_file *fuse_write_file_get(struct fuse_conn *fc, in fuse_write_file_get() argument
1599 struct fuse_file *ff = __fuse_write_file_get(fc, fi); in fuse_write_file_get()
1606 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_write_inode() local
1611 ff = __fuse_write_file_get(fc, fi); in fuse_write_inode()
1623 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_writepage_locked() local
1642 req->ff = fuse_write_file_get(fc, fi); in fuse_writepage_locked()
1662 spin_lock(&fc->lock); in fuse_writepage_locked()
1666 spin_unlock(&fc->lock); in fuse_writepage_locked()
1714 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_writepages_send() local
1720 spin_lock(&fc->lock); in fuse_writepages_send()
1723 spin_unlock(&fc->lock); in fuse_writepages_send()
1732 struct fuse_conn *fc = get_fuse_conn(new_req->inode); in fuse_writepage_in_flight() local
1741 spin_lock(&fc->lock); in fuse_writepage_in_flight()
1771 spin_unlock(&fc->lock); in fuse_writepage_in_flight()
1776 fuse_writepage_free(fc, new_req); in fuse_writepage_in_flight()
1784 spin_unlock(&fc->lock); in fuse_writepage_in_flight()
1795 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_writepages_fill() local
1802 data->ff = fuse_write_file_get(fc, get_fuse_inode(inode)); in fuse_writepages_fill()
1817 (req->num_pages + 1) * PAGE_SIZE > fc->max_write || in fuse_writepages_fill()
1859 spin_lock(&fc->lock); in fuse_writepages_fill()
1861 spin_unlock(&fc->lock); in fuse_writepages_fill()
1887 spin_lock(&fc->lock); in fuse_writepages_fill()
1889 spin_unlock(&fc->lock); in fuse_writepages_fill()
1943 struct fuse_conn *fc = get_fuse_conn(file_inode(file)); in fuse_write_begin() local
1948 WARN_ON(!fc->writeback_cache); in fuse_write_begin()
2121 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_lk_fill() local
2126 inarg->owner = fuse_lock_owner_id(fc, fl->fl_owner); in fuse_lk_fill()
2143 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_getlk() local
2153 err = fuse_simple_request(fc, &args); in fuse_getlk()
2163 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_setlk() local
2180 err = fuse_simple_request(fc, &args); in fuse_setlk()
2192 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_file_lock() local
2198 if (fc->no_lock) { in fuse_file_lock()
2204 if (fc->no_lock) in fuse_file_lock()
2215 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_file_flock() local
2218 if (fc->no_flock) { in fuse_file_flock()
2234 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_bmap() local
2240 if (!inode->i_sb->s_bdev || fc->no_bmap) in fuse_bmap()
2254 err = fuse_simple_request(fc, &args); in fuse_bmap()
2256 fc->no_bmap = 1; in fuse_bmap()
2264 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_lseek() local
2275 if (fc->no_lseek) in fuse_lseek()
2286 err = fuse_simple_request(fc, &args); in fuse_lseek()
2289 fc->no_lseek = 1; in fuse_lseek()
2388 static int fuse_copy_ioctl_iovec(struct fuse_conn *fc, struct iovec *dst, in fuse_copy_ioctl_iovec() argument
2395 if (fc->minor < 16) { in fuse_copy_ioctl_iovec()
2474 struct fuse_conn *fc = ff->fc; in fuse_do_ioctl() local
2550 req = fuse_get_req(fc, num_pages); in fuse_do_ioctl()
2587 fuse_request_send(fc, req); in fuse_do_ioctl()
2590 fuse_put_request(fc, req); in fuse_do_ioctl()
2618 err = fuse_copy_ioctl_iovec(fc, iov_page, vaddr, in fuse_do_ioctl()
2653 fuse_put_request(fc, req); in fuse_do_ioctl()
2667 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_ioctl_common() local
2669 if (!fuse_allow_current_process(fc)) in fuse_ioctl_common()
2695 static struct rb_node **fuse_find_polled_node(struct fuse_conn *fc, u64 kh, in fuse_find_polled_node() argument
2698 struct rb_node **link = &fc->polled_files.rb_node; in fuse_find_polled_node()
2726 static void fuse_register_polled_file(struct fuse_conn *fc, in fuse_register_polled_file() argument
2729 spin_lock(&fc->lock); in fuse_register_polled_file()
2733 link = fuse_find_polled_node(fc, ff->kh, &parent); in fuse_register_polled_file()
2736 rb_insert_color(&ff->polled_node, &fc->polled_files); in fuse_register_polled_file()
2738 spin_unlock(&fc->lock); in fuse_register_polled_file()
2744 struct fuse_conn *fc = ff->fc; in fuse_file_poll() local
2750 if (fc->no_poll) in fuse_file_poll()
2762 fuse_register_polled_file(fc, ff); in fuse_file_poll()
2773 err = fuse_simple_request(fc, &args); in fuse_file_poll()
2778 fc->no_poll = 1; in fuse_file_poll()
2789 int fuse_notify_poll_wakeup(struct fuse_conn *fc, in fuse_notify_poll_wakeup() argument
2795 spin_lock(&fc->lock); in fuse_notify_poll_wakeup()
2797 link = fuse_find_polled_node(fc, kh, NULL); in fuse_notify_poll_wakeup()
2805 spin_unlock(&fc->lock); in fuse_notify_poll_wakeup()
2835 bool async_dio = ff->fc->async_dio; in fuse_direct_IO()
2930 struct fuse_conn *fc = ff->fc; in fuse_file_fallocate() local
2945 if (fc->no_fallocate) in fuse_file_fallocate()
2969 err = fuse_simple_request(fc, &args); in fuse_file_fallocate()
2971 fc->no_fallocate = 1; in fuse_file_fallocate()
2981 if (changed && fc->writeback_cache) in fuse_file_fallocate()