Lines Matching refs:fc
147 static void fuse_cleanup_submount_lookup(struct fuse_conn *fc, in fuse_cleanup_submount_lookup() argument
153 fuse_queue_forget(fc, sl->forget, sl->nodeid, 1); in fuse_cleanup_submount_lookup()
171 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_evict_inode() local
176 fuse_queue_forget(fc, fi->forget, fi->nodeid, in fuse_evict_inode()
182 fuse_cleanup_submount_lookup(fc, fi->submount_lookup); in fuse_evict_inode()
192 atomic64_inc(&fc->evict_ctr); in fuse_evict_inode()
229 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_change_attributes_common() local
245 if (!evict_ctr || fi->attr_version || evict_ctr == fuse_get_evict_ctr(fc)) in fuse_change_attributes_common()
248 fi->attr_version = atomic64_inc_return(&fc->attr_version); in fuse_change_attributes_common()
254 inode->i_uid = make_kuid(fc->user_ns, attr->uid); in fuse_change_attributes_common()
255 inode->i_gid = make_kgid(fc->user_ns, attr->gid); in fuse_change_attributes_common()
302 if (!fc->default_permissions) in fuse_change_attributes_common()
320 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_get_cache_mask() local
322 if (!fc->writeback_cache || !S_ISREG(inode->i_mode)) in fuse_get_cache_mask()
332 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_change_attributes_i() local
382 if (!fc->explicit_inval_data) in fuse_change_attributes_i()
384 } else if (fc->auto_inval_data) { in fuse_change_attributes_i()
421 struct fuse_conn *fc) in fuse_init_inode() argument
445 if (!fc->posix_acl) in fuse_init_inode()
472 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_iget() local
481 if (fc->auto_submounts && (attr->flags & FUSE_ATTR_SUBMOUNT) && in fuse_iget()
489 fuse_init_inode(inode, attr, fc); in fuse_iget()
510 if (!fc->writeback_cache || !S_ISREG(attr->mode)) in fuse_iget()
513 fuse_init_inode(inode, attr, fc); in fuse_iget()
534 struct inode *fuse_ilookup(struct fuse_conn *fc, u64 nodeid, in fuse_ilookup() argument
540 WARN_ON(!rwsem_is_locked(&fc->killsb)); in fuse_ilookup()
541 list_for_each_entry(fm_iter, &fc->mounts, fc_entry) { in fuse_ilookup()
556 int fuse_reverse_inval_inode(struct fuse_conn *fc, u64 nodeid, in fuse_reverse_inval_inode() argument
564 inode = fuse_ilookup(fc, nodeid, NULL); in fuse_reverse_inval_inode()
570 fi->attr_version = atomic64_inc_return(&fc->attr_version); in fuse_reverse_inval_inode()
588 void fuse_try_prune_one_inode(struct fuse_conn *fc, u64 nodeid) in fuse_try_prune_one_inode() argument
592 inode = fuse_ilookup(fc, nodeid, NULL); in fuse_try_prune_one_inode()
619 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_umount_begin() local
621 if (fc->no_force_umount) in fuse_umount_begin()
624 fuse_abort_conn(fc); in fuse_umount_begin()
633 if (fm->fc->conn_init) { in fuse_send_destroy()
665 if (!fuse_allow_current_process(fm->fc)) { in fuse_statfs()
696 static void fuse_sync_fs_writes(struct fuse_conn *fc) in fuse_sync_fs_writes() argument
702 spin_lock(&fc->lock); in fuse_sync_fs_writes()
703 bucket = rcu_dereference_protected(fc->curr_bucket, 1); in fuse_sync_fs_writes()
708 spin_unlock(&fc->lock); in fuse_sync_fs_writes()
718 rcu_assign_pointer(fc->curr_bucket, new_bucket); in fuse_sync_fs_writes()
719 spin_unlock(&fc->lock); in fuse_sync_fs_writes()
737 struct fuse_conn *fc = fm->fc; in fuse_sync_fs() local
753 if (!fc->sync_fs) in fuse_sync_fs()
756 fuse_sync_fs_writes(fc); in fuse_sync_fs()
768 fc->sync_fs = 0; in fuse_sync_fs()
915 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_show_options() local
917 if (fc->legacy_opts_show) { in fuse_show_options()
919 from_kuid_munged(fc->user_ns, fc->user_id)); in fuse_show_options()
921 from_kgid_munged(fc->user_ns, fc->group_id)); in fuse_show_options()
922 if (fc->default_permissions) in fuse_show_options()
924 if (fc->allow_other) in fuse_show_options()
926 if (fc->max_read != ~0) in fuse_show_options()
927 seq_printf(m, ",max_read=%u", fc->max_read); in fuse_show_options()
932 if (fc->dax_mode == FUSE_DAX_ALWAYS) in fuse_show_options()
934 else if (fc->dax_mode == FUSE_DAX_NEVER) in fuse_show_options()
936 else if (fc->dax_mode == FUSE_DAX_INODE_USER) in fuse_show_options()
969 void fuse_conn_init(struct fuse_conn *fc, struct fuse_mount *fm, in fuse_conn_init() argument
973 memset(fc, 0, sizeof(*fc)); in fuse_conn_init()
974 spin_lock_init(&fc->lock); in fuse_conn_init()
975 spin_lock_init(&fc->bg_lock); in fuse_conn_init()
976 init_rwsem(&fc->killsb); in fuse_conn_init()
977 refcount_set(&fc->count, 1); in fuse_conn_init()
978 atomic_set(&fc->dev_count, 1); in fuse_conn_init()
979 atomic_set(&fc->epoch, 1); in fuse_conn_init()
980 INIT_WORK(&fc->epoch_work, fuse_epoch_work); in fuse_conn_init()
981 init_waitqueue_head(&fc->blocked_waitq); in fuse_conn_init()
982 fuse_iqueue_init(&fc->iq, fiq_ops, fiq_priv); in fuse_conn_init()
983 INIT_LIST_HEAD(&fc->bg_queue); in fuse_conn_init()
984 INIT_LIST_HEAD(&fc->entry); in fuse_conn_init()
985 INIT_LIST_HEAD(&fc->devices); in fuse_conn_init()
986 atomic_set(&fc->num_waiting, 0); in fuse_conn_init()
987 fc->max_background = FUSE_DEFAULT_MAX_BACKGROUND; in fuse_conn_init()
988 fc->congestion_threshold = FUSE_DEFAULT_CONGESTION_THRESHOLD; in fuse_conn_init()
989 atomic64_set(&fc->khctr, 0); in fuse_conn_init()
990 fc->polled_files = RB_ROOT; in fuse_conn_init()
991 fc->blocked = 0; in fuse_conn_init()
992 fc->initialized = 0; in fuse_conn_init()
993 fc->connected = 1; in fuse_conn_init()
994 atomic64_set(&fc->attr_version, 1); in fuse_conn_init()
995 atomic64_set(&fc->evict_ctr, 1); in fuse_conn_init()
996 get_random_bytes(&fc->scramble_key, sizeof(fc->scramble_key)); in fuse_conn_init()
997 fc->pid_ns = get_pid_ns(task_active_pid_ns(current)); in fuse_conn_init()
998 fc->user_ns = get_user_ns(user_ns); in fuse_conn_init()
999 fc->max_pages = FUSE_DEFAULT_MAX_PAGES_PER_REQ; in fuse_conn_init()
1000 fc->max_pages_limit = fuse_max_pages_limit; in fuse_conn_init()
1001 fc->name_max = FUSE_NAME_LOW_MAX; in fuse_conn_init()
1002 fc->timeout.req_timeout = 0; in fuse_conn_init()
1005 fuse_backing_files_init(fc); in fuse_conn_init()
1007 INIT_LIST_HEAD(&fc->mounts); in fuse_conn_init()
1008 list_add(&fm->fc_entry, &fc->mounts); in fuse_conn_init()
1009 fm->fc = fc; in fuse_conn_init()
1015 struct fuse_conn *fc = container_of(p, struct fuse_conn, rcu); in delayed_release() local
1017 fuse_uring_destruct(fc); in delayed_release()
1019 put_user_ns(fc->user_ns); in delayed_release()
1020 fc->release(fc); in delayed_release()
1023 void fuse_conn_put(struct fuse_conn *fc) in fuse_conn_put() argument
1025 struct fuse_iqueue *fiq = &fc->iq; in fuse_conn_put()
1028 if (!refcount_dec_and_test(&fc->count)) in fuse_conn_put()
1032 fuse_dax_conn_free(fc); in fuse_conn_put()
1033 if (fc->timeout.req_timeout) in fuse_conn_put()
1034 cancel_delayed_work_sync(&fc->timeout.work); in fuse_conn_put()
1035 cancel_work_sync(&fc->epoch_work); in fuse_conn_put()
1038 put_pid_ns(fc->pid_ns); in fuse_conn_put()
1039 bucket = rcu_dereference_protected(fc->curr_bucket, 1); in fuse_conn_put()
1045 fuse_backing_files_free(fc); in fuse_conn_put()
1046 call_rcu(&fc->rcu, delayed_release); in fuse_conn_put()
1050 struct fuse_conn *fuse_conn_get(struct fuse_conn *fc) in fuse_conn_get() argument
1052 refcount_inc(&fc->count); in fuse_conn_get()
1053 return fc; in fuse_conn_get()
1076 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_get_dentry() local
1089 if (!fc->export_support) in fuse_get_dentry()
1184 struct fuse_conn *fc = get_fuse_conn(child_inode); in fuse_get_parent() local
1190 if (!fc->export_support) in fuse_get_parent()
1258 static void process_init_limits(struct fuse_conn *fc, struct fuse_init_out *arg) in process_init_limits() argument
1268 spin_lock(&fc->bg_lock); in process_init_limits()
1270 fc->max_background = arg->max_background; in process_init_limits()
1272 if (!cap_sys_admin && fc->max_background > max_user_bgreq) in process_init_limits()
1273 fc->max_background = max_user_bgreq; in process_init_limits()
1276 fc->congestion_threshold = arg->congestion_threshold; in process_init_limits()
1279 fc->congestion_threshold > max_user_congthresh) in process_init_limits()
1280 fc->congestion_threshold = max_user_congthresh; in process_init_limits()
1282 spin_unlock(&fc->bg_lock); in process_init_limits()
1285 static void set_request_timeout(struct fuse_conn *fc, unsigned int timeout) in set_request_timeout() argument
1287 fc->timeout.req_timeout = secs_to_jiffies(timeout); in set_request_timeout()
1288 INIT_DELAYED_WORK(&fc->timeout.work, fuse_check_timeout); in set_request_timeout()
1289 queue_delayed_work(system_percpu_wq, &fc->timeout.work, in set_request_timeout()
1293 static void init_server_timeout(struct fuse_conn *fc, unsigned int timeout) in init_server_timeout() argument
1310 set_request_timeout(fc, timeout); in init_server_timeout()
1322 struct fuse_conn *fc = fm->fc; in process_init_reply() local
1333 process_init_limits(fc, arg); in process_init_reply()
1343 fc->async_read = 1; in process_init_reply()
1345 fc->no_lock = 1; in process_init_reply()
1348 fc->no_flock = 1; in process_init_reply()
1351 fc->no_flock = 1; in process_init_reply()
1354 fc->atomic_o_trunc = 1; in process_init_reply()
1358 fc->export_support = 1; in process_init_reply()
1361 fc->big_writes = 1; in process_init_reply()
1363 fc->dont_mask = 1; in process_init_reply()
1365 fc->auto_inval_data = 1; in process_init_reply()
1367 fc->explicit_inval_data = 1; in process_init_reply()
1369 fc->do_readdirplus = 1; in process_init_reply()
1371 fc->readdirplus_auto = 1; in process_init_reply()
1374 fc->async_dio = 1; in process_init_reply()
1376 fc->writeback_cache = 1; in process_init_reply()
1378 fc->parallel_dirops = 1; in process_init_reply()
1380 fc->handle_killpriv = 1; in process_init_reply()
1384 fc->default_permissions = 1; in process_init_reply()
1385 fc->posix_acl = 1; in process_init_reply()
1388 fc->cache_symlinks = 1; in process_init_reply()
1390 fc->abort_err = 1; in process_init_reply()
1392 fc->max_pages = in process_init_reply()
1393 min_t(unsigned int, fc->max_pages_limit, in process_init_reply()
1400 if (fc->max_pages > 1) in process_init_reply()
1401 fc->name_max = FUSE_NAME_MAX; in process_init_reply()
1405 !fuse_dax_check_alignment(fc, arg->map_alignment)) { in process_init_reply()
1409 fc->inode_dax = 1; in process_init_reply()
1412 fc->handle_killpriv_v2 = 1; in process_init_reply()
1416 fc->setxattr_ext = 1; in process_init_reply()
1418 fc->init_security = 1; in process_init_reply()
1420 fc->create_supp_group = 1; in process_init_reply()
1422 fc->direct_io_allow_mmap = 1; in process_init_reply()
1442 fc->passthrough = 1; in process_init_reply()
1443 fc->max_stack_depth = arg->max_stack_depth; in process_init_reply()
1449 if (fc->default_permissions) in process_init_reply()
1455 fc->io_uring = 1; in process_init_reply()
1460 ra_pages = fc->max_read / PAGE_SIZE; in process_init_reply()
1461 fc->no_lock = 1; in process_init_reply()
1462 fc->no_flock = 1; in process_init_reply()
1465 init_server_timeout(fc, timeout); in process_init_reply()
1469 fc->minor = arg->minor; in process_init_reply()
1470 fc->max_write = arg->minor < 5 ? 4096 : arg->max_write; in process_init_reply()
1471 fc->max_write = max_t(unsigned, 4096, fc->max_write); in process_init_reply()
1472 fc->conn_init = 1; in process_init_reply()
1477 fc->conn_init = 0; in process_init_reply()
1478 fc->conn_error = 1; in process_init_reply()
1481 fuse_set_initialized(fc); in process_init_reply()
1482 wake_up_all(&fc->blocked_waitq); in process_init_reply()
1511 if (fm->fc->dax) in fuse_new_init()
1513 if (fuse_is_inode_dax_mode(fm->fc->dax_mode)) in fuse_new_init()
1516 if (fm->fc->auto_submounts) in fuse_new_init()
1553 if (fm->fc->sync_init) { in fuse_send_init()
1565 if (fm->fc->conn_error) in fuse_send_init()
1571 void fuse_free_conn(struct fuse_conn *fc) in fuse_free_conn() argument
1573 WARN_ON(!list_empty(&fc->devices)); in fuse_free_conn()
1574 kfree(fc); in fuse_free_conn()
1578 static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb) in fuse_bdi_init() argument
1592 err = super_setup_bdi_name(sb, "%u:%u%s", MAJOR(fc->dev), in fuse_bdi_init()
1593 MINOR(fc->dev), suffix); in fuse_bdi_init()
1638 void fuse_dev_install(struct fuse_dev *fud, struct fuse_conn *fc) in fuse_dev_install() argument
1640 fud->fc = fuse_conn_get(fc); in fuse_dev_install()
1641 spin_lock(&fc->lock); in fuse_dev_install()
1642 list_add_tail(&fud->entry, &fc->devices); in fuse_dev_install()
1643 spin_unlock(&fc->lock); in fuse_dev_install()
1647 struct fuse_dev *fuse_dev_alloc_install(struct fuse_conn *fc) in fuse_dev_alloc_install() argument
1655 fuse_dev_install(fud, fc); in fuse_dev_alloc_install()
1662 struct fuse_conn *fc = fud->fc; in fuse_dev_free() local
1664 if (fc) { in fuse_dev_free()
1665 spin_lock(&fc->lock); in fuse_dev_free()
1667 spin_unlock(&fc->lock); in fuse_dev_free()
1669 fuse_conn_put(fc); in fuse_dev_free()
1744 fuse_get_evict_ctr(fm->fc)); in fuse_fill_super_submount()
1779 struct fuse_conn *fc = get_fuse_conn(&mp_fi->inode); in fuse_get_tree_submount() local
1787 fm->fc = fuse_conn_get(fc); in fuse_get_tree_submount()
1802 down_write(&fc->killsb); in fuse_get_tree_submount()
1803 list_add_tail(&fm->fc_entry, &fc->mounts); in fuse_get_tree_submount()
1804 up_write(&fc->killsb); in fuse_get_tree_submount()
1827 struct fuse_conn *fc = fm->fc; in fuse_fill_super_common() local
1836 rcu_assign_pointer(fc->curr_bucket, fuse_sync_bucket_alloc()); in fuse_fill_super_common()
1845 fc->sync_fs = 1; in fuse_fill_super_common()
1854 err = fuse_dax_conn_alloc(fc, ctx->dax_mode, ctx->dax_dev); in fuse_fill_super_common()
1861 fud = fuse_dev_alloc_install(fc); in fuse_fill_super_common()
1866 fc->dev = sb->s_dev; in fuse_fill_super_common()
1868 err = fuse_bdi_init(fc, sb); in fuse_fill_super_common()
1874 fc->dont_mask = 1; in fuse_fill_super_common()
1877 fc->default_permissions = ctx->default_permissions; in fuse_fill_super_common()
1878 fc->allow_other = ctx->allow_other; in fuse_fill_super_common()
1879 fc->user_id = ctx->user_id; in fuse_fill_super_common()
1880 fc->group_id = ctx->group_id; in fuse_fill_super_common()
1881 fc->legacy_opts_show = ctx->legacy_opts_show; in fuse_fill_super_common()
1882 fc->max_read = max_t(unsigned int, 4096, ctx->max_read); in fuse_fill_super_common()
1883 fc->destroy = ctx->destroy; in fuse_fill_super_common()
1884 fc->no_control = ctx->no_control; in fuse_fill_super_common()
1885 fc->no_force_umount = ctx->no_force_umount; in fuse_fill_super_common()
1898 fc->sync_init = 1; in fuse_fill_super_common()
1903 err = fuse_ctl_add_conn(fc); in fuse_fill_super_common()
1907 list_add_tail(&fc->entry, &fuse_conn_list); in fuse_fill_super_common()
1924 fuse_dax_conn_free(fc); in fuse_fill_super_common()
1979 struct fuse_conn *fc; in fuse_get_tree() local
1984 fc = kmalloc(sizeof(*fc), GFP_KERNEL); in fuse_get_tree()
1985 if (!fc) in fuse_get_tree()
1990 kfree(fc); in fuse_get_tree()
1994 fuse_conn_init(fc, fm, fsc->user_ns, &fuse_dev_fiq_ops, NULL); in fuse_get_tree()
1995 fc->release = fuse_free_conn; in fuse_get_tree()
2020 fsc->sget_key = fud->fc; in fuse_get_tree()
2072 struct fuse_conn *fc = fm->fc; in fuse_mount_remove() local
2075 down_write(&fc->killsb); in fuse_mount_remove()
2077 if (list_empty(&fc->mounts)) in fuse_mount_remove()
2079 up_write(&fc->killsb); in fuse_mount_remove()
2087 struct fuse_conn *fc = fm->fc; in fuse_conn_destroy() local
2089 if (fc->destroy) in fuse_conn_destroy()
2092 fuse_abort_conn(fc); in fuse_conn_destroy()
2093 fuse_wait_aborted(fc); in fuse_conn_destroy()
2095 if (!list_empty(&fc->entry)) { in fuse_conn_destroy()
2097 list_del(&fc->entry); in fuse_conn_destroy()
2098 fuse_ctl_remove_conn(fc); in fuse_conn_destroy()
2118 fuse_conn_put(fm->fc); in fuse_mount_destroy()