Lines Matching refs:fc

129 		struct fuse_conn *fc = get_fuse_conn(inode);  in fuse_evict_inode()  local
134 fuse_queue_forget(fc, fi->forget, fi->nodeid, in fuse_evict_inode()
145 static int fuse_reconfigure(struct fs_context *fc) in fuse_reconfigure() argument
147 struct super_block *sb = fc->root->d_sb; in fuse_reconfigure()
150 if (fc->sb_flags & SB_MANDLOCK) in fuse_reconfigure()
171 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_change_attributes_common() local
176 fi->attr_version = atomic64_inc_return(&fc->attr_version); in fuse_change_attributes_common()
183 inode->i_uid = make_kuid(fc->user_ns, attr->uid); in fuse_change_attributes_common()
184 inode->i_gid = make_kgid(fc->user_ns, attr->gid); in fuse_change_attributes_common()
195 if (!fc->writeback_cache || !S_ISREG(inode->i_mode)) { in fuse_change_attributes_common()
213 if (!fc->default_permissions) in fuse_change_attributes_common()
222 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_change_attributes() local
224 bool is_wb = fc->writeback_cache; in fuse_change_attributes()
253 if (!fc->explicit_inval_data) in fuse_change_attributes()
255 } else if (fc->auto_inval_data) { in fuse_change_attributes()
320 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_iget() local
329 if (fc->auto_submounts && (attr->flags & FUSE_ATTR_SUBMOUNT) && in fuse_iget()
348 if (!fc->writeback_cache || !S_ISREG(attr->mode)) in fuse_iget()
369 struct inode *fuse_ilookup(struct fuse_conn *fc, u64 nodeid, in fuse_ilookup() argument
375 WARN_ON(!rwsem_is_locked(&fc->killsb)); in fuse_ilookup()
376 list_for_each_entry(fm_iter, &fc->mounts, fc_entry) { in fuse_ilookup()
391 int fuse_reverse_inval_inode(struct fuse_conn *fc, u64 nodeid, in fuse_reverse_inval_inode() argument
399 inode = fuse_ilookup(fc, nodeid, NULL); in fuse_reverse_inval_inode()
405 fi->attr_version = atomic64_inc_return(&fc->attr_version); in fuse_reverse_inval_inode()
443 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_umount_begin() local
445 if (!fc->no_force_umount) in fuse_umount_begin()
446 fuse_abort_conn(fc); in fuse_umount_begin()
451 if (fm->fc->conn_init) { in fuse_send_destroy()
490 if (!fuse_allow_current_process(fm->fc)) { in fuse_statfs()
536 static int fuse_parse_param(struct fs_context *fc, struct fs_parameter *param) in fuse_parse_param() argument
539 struct fuse_fs_context *ctx = fc->fs_private; in fuse_parse_param()
542 if (fc->purpose == FS_CONTEXT_FOR_RECONFIGURE) { in fuse_parse_param()
547 if (fc->oldapi) in fuse_parse_param()
550 return invalfc(fc, "No changes allowed in reconfigure"); in fuse_parse_param()
553 opt = fs_parse(fc, fuse_fs_parameters, param, &result); in fuse_parse_param()
559 if (fc->source) in fuse_parse_param()
560 return invalfc(fc, "Multiple sources specified"); in fuse_parse_param()
561 fc->source = param->string; in fuse_parse_param()
567 return invalfc(fc, "Multiple subtypes specified"); in fuse_parse_param()
579 return invalfc(fc, "Invalid rootmode"); in fuse_parse_param()
585 ctx->user_id = make_kuid(fc->user_ns, result.uint_32); in fuse_parse_param()
587 return invalfc(fc, "Invalid user_id"); in fuse_parse_param()
592 ctx->group_id = make_kgid(fc->user_ns, result.uint_32); in fuse_parse_param()
594 return invalfc(fc, "Invalid group_id"); in fuse_parse_param()
612 return invalfc(fc, "blksize only supported for fuseblk"); in fuse_parse_param()
623 static void fuse_free_fc(struct fs_context *fc) in fuse_free_fc() argument
625 struct fuse_fs_context *ctx = fc->fs_private; in fuse_free_fc()
636 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_show_options() local
638 if (fc->legacy_opts_show) { in fuse_show_options()
640 from_kuid_munged(fc->user_ns, fc->user_id)); in fuse_show_options()
642 from_kgid_munged(fc->user_ns, fc->group_id)); in fuse_show_options()
643 if (fc->default_permissions) in fuse_show_options()
645 if (fc->allow_other) in fuse_show_options()
647 if (fc->max_read != ~0) in fuse_show_options()
648 seq_printf(m, ",max_read=%u", fc->max_read); in fuse_show_options()
653 if (fc->dax) in fuse_show_options()
686 void fuse_conn_init(struct fuse_conn *fc, struct fuse_mount *fm, in fuse_conn_init() argument
690 memset(fc, 0, sizeof(*fc)); in fuse_conn_init()
691 spin_lock_init(&fc->lock); in fuse_conn_init()
692 spin_lock_init(&fc->bg_lock); in fuse_conn_init()
693 spin_lock_init(&fc->passthrough_req_lock); in fuse_conn_init()
694 init_rwsem(&fc->killsb); in fuse_conn_init()
695 refcount_set(&fc->count, 1); in fuse_conn_init()
696 atomic_set(&fc->dev_count, 1); in fuse_conn_init()
697 init_waitqueue_head(&fc->blocked_waitq); in fuse_conn_init()
698 fuse_iqueue_init(&fc->iq, fiq_ops, fiq_priv); in fuse_conn_init()
699 INIT_LIST_HEAD(&fc->bg_queue); in fuse_conn_init()
700 INIT_LIST_HEAD(&fc->entry); in fuse_conn_init()
701 INIT_LIST_HEAD(&fc->devices); in fuse_conn_init()
702 idr_init(&fc->passthrough_req); in fuse_conn_init()
703 atomic_set(&fc->num_waiting, 0); in fuse_conn_init()
704 fc->max_background = FUSE_DEFAULT_MAX_BACKGROUND; in fuse_conn_init()
705 fc->congestion_threshold = FUSE_DEFAULT_CONGESTION_THRESHOLD; in fuse_conn_init()
706 atomic64_set(&fc->khctr, 0); in fuse_conn_init()
707 fc->polled_files = RB_ROOT; in fuse_conn_init()
708 fc->blocked = 0; in fuse_conn_init()
709 fc->initialized = 0; in fuse_conn_init()
710 fc->connected = 1; in fuse_conn_init()
711 atomic64_set(&fc->attr_version, 1); in fuse_conn_init()
712 get_random_bytes(&fc->scramble_key, sizeof(fc->scramble_key)); in fuse_conn_init()
713 fc->pid_ns = get_pid_ns(task_active_pid_ns(current)); in fuse_conn_init()
714 fc->user_ns = get_user_ns(user_ns); in fuse_conn_init()
715 fc->max_pages = FUSE_DEFAULT_MAX_PAGES_PER_REQ; in fuse_conn_init()
717 INIT_LIST_HEAD(&fc->mounts); in fuse_conn_init()
718 list_add(&fm->fc_entry, &fc->mounts); in fuse_conn_init()
719 fm->fc = fc; in fuse_conn_init()
724 void fuse_conn_put(struct fuse_conn *fc) in fuse_conn_put() argument
726 if (refcount_dec_and_test(&fc->count)) { in fuse_conn_put()
727 struct fuse_iqueue *fiq = &fc->iq; in fuse_conn_put()
730 fuse_dax_conn_free(fc); in fuse_conn_put()
733 put_pid_ns(fc->pid_ns); in fuse_conn_put()
734 put_user_ns(fc->user_ns); in fuse_conn_put()
735 fc->release(fc); in fuse_conn_put()
740 struct fuse_conn *fuse_conn_get(struct fuse_conn *fc) in fuse_conn_get() argument
742 refcount_inc(&fc->count); in fuse_conn_get()
743 return fc; in fuse_conn_get()
750 if (fm->fc) in fuse_mount_put()
751 fuse_conn_put(fm->fc); in fuse_mount_put()
783 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_get_dentry() local
796 if (!fc->export_support) in fuse_get_dentry()
890 struct fuse_conn *fc = get_fuse_conn(child_inode); in fuse_get_parent() local
897 if (!fc->export_support) in fuse_get_parent()
960 static void process_init_limits(struct fuse_conn *fc, struct fuse_init_out *arg) in process_init_limits() argument
970 spin_lock(&fc->bg_lock); in process_init_limits()
972 fc->max_background = arg->max_background; in process_init_limits()
974 if (!cap_sys_admin && fc->max_background > max_user_bgreq) in process_init_limits()
975 fc->max_background = max_user_bgreq; in process_init_limits()
978 fc->congestion_threshold = arg->congestion_threshold; in process_init_limits()
981 fc->congestion_threshold > max_user_congthresh) in process_init_limits()
982 fc->congestion_threshold = max_user_congthresh; in process_init_limits()
984 spin_unlock(&fc->bg_lock); in process_init_limits()
996 struct fuse_conn *fc = fm->fc; in process_init_reply() local
1006 process_init_limits(fc, arg); in process_init_reply()
1011 fc->async_read = 1; in process_init_reply()
1013 fc->no_lock = 1; in process_init_reply()
1016 fc->no_flock = 1; in process_init_reply()
1019 fc->no_flock = 1; in process_init_reply()
1022 fc->atomic_o_trunc = 1; in process_init_reply()
1026 fc->export_support = 1; in process_init_reply()
1029 fc->big_writes = 1; in process_init_reply()
1031 fc->dont_mask = 1; in process_init_reply()
1033 fc->auto_inval_data = 1; in process_init_reply()
1035 fc->explicit_inval_data = 1; in process_init_reply()
1037 fc->do_readdirplus = 1; in process_init_reply()
1039 fc->readdirplus_auto = 1; in process_init_reply()
1042 fc->async_dio = 1; in process_init_reply()
1044 fc->writeback_cache = 1; in process_init_reply()
1046 fc->parallel_dirops = 1; in process_init_reply()
1048 fc->handle_killpriv = 1; in process_init_reply()
1052 fc->default_permissions = 1; in process_init_reply()
1053 fc->posix_acl = 1; in process_init_reply()
1057 fc->cache_symlinks = 1; in process_init_reply()
1059 fc->abort_err = 1; in process_init_reply()
1061 fc->max_pages = in process_init_reply()
1067 !fuse_dax_check_alignment(fc, arg->map_alignment)) { in process_init_reply()
1071 fc->passthrough = 1; in process_init_reply()
1077 ra_pages = fc->max_read / PAGE_SIZE; in process_init_reply()
1078 fc->no_lock = 1; in process_init_reply()
1079 fc->no_flock = 1; in process_init_reply()
1084 fc->minor = arg->minor; in process_init_reply()
1085 fc->max_write = arg->minor < 5 ? 4096 : arg->max_write; in process_init_reply()
1086 fc->max_write = max_t(unsigned, 4096, fc->max_write); in process_init_reply()
1087 fc->conn_init = 1; in process_init_reply()
1092 fc->conn_init = 0; in process_init_reply()
1093 fc->conn_error = 1; in process_init_reply()
1096 fuse_set_initialized(fc); in process_init_reply()
1097 wake_up_all(&fc->blocked_waitq); in process_init_reply()
1121 if (fm->fc->dax) in fuse_send_init()
1124 if (fm->fc->auto_submounts) in fuse_send_init()
1157 void fuse_free_conn(struct fuse_conn *fc) in fuse_free_conn() argument
1159 WARN_ON(!list_empty(&fc->devices)); in fuse_free_conn()
1160 idr_for_each(&fc->passthrough_req, free_fuse_passthrough, NULL); in fuse_free_conn()
1161 idr_destroy(&fc->passthrough_req); in fuse_free_conn()
1162 kfree_rcu(fc, rcu); in fuse_free_conn()
1166 static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb) in fuse_bdi_init() argument
1180 err = super_setup_bdi_name(sb, "%u:%u%s", MAJOR(fc->dev), in fuse_bdi_init()
1181 MINOR(fc->dev), suffix); in fuse_bdi_init()
1228 void fuse_dev_install(struct fuse_dev *fud, struct fuse_conn *fc) in fuse_dev_install() argument
1230 fud->fc = fuse_conn_get(fc); in fuse_dev_install()
1231 spin_lock(&fc->lock); in fuse_dev_install()
1232 list_add_tail(&fud->entry, &fc->devices); in fuse_dev_install()
1233 spin_unlock(&fc->lock); in fuse_dev_install()
1237 struct fuse_dev *fuse_dev_alloc_install(struct fuse_conn *fc) in fuse_dev_alloc_install() argument
1245 fuse_dev_install(fud, fc); in fuse_dev_alloc_install()
1252 struct fuse_conn *fc = fud->fc; in fuse_dev_free() local
1254 if (fc) { in fuse_dev_free()
1255 spin_lock(&fc->lock); in fuse_dev_free()
1257 spin_unlock(&fc->lock); in fuse_dev_free()
1259 fuse_conn_put(fc); in fuse_dev_free()
1351 struct fuse_conn *fc = fm->fc; in fuse_fill_super_common() local
1376 err = fuse_dax_conn_alloc(fc, ctx->dax_dev); in fuse_fill_super_common()
1383 fud = fuse_dev_alloc_install(fc); in fuse_fill_super_common()
1388 fc->dev = sb->s_dev; in fuse_fill_super_common()
1390 err = fuse_bdi_init(fc, sb); in fuse_fill_super_common()
1396 fc->dont_mask = 1; in fuse_fill_super_common()
1399 fc->default_permissions = ctx->default_permissions; in fuse_fill_super_common()
1400 fc->allow_other = ctx->allow_other; in fuse_fill_super_common()
1401 fc->user_id = ctx->user_id; in fuse_fill_super_common()
1402 fc->group_id = ctx->group_id; in fuse_fill_super_common()
1403 fc->legacy_opts_show = ctx->legacy_opts_show; in fuse_fill_super_common()
1404 fc->max_read = max_t(unsigned int, 4096, ctx->max_read); in fuse_fill_super_common()
1405 fc->destroy = ctx->destroy; in fuse_fill_super_common()
1406 fc->no_control = ctx->no_control; in fuse_fill_super_common()
1407 fc->no_force_umount = ctx->no_force_umount; in fuse_fill_super_common()
1423 err = fuse_ctl_add_conn(fc); in fuse_fill_super_common()
1427 list_add_tail(&fc->entry, &fuse_conn_list); in fuse_fill_super_common()
1442 fuse_dax_conn_free(fc); in fuse_fill_super_common()
1453 struct fuse_conn *fc; in fuse_fill_super() local
1470 fc = kmalloc(sizeof(*fc), GFP_KERNEL); in fuse_fill_super()
1472 if (!fc) in fuse_fill_super()
1477 kfree(fc); in fuse_fill_super()
1481 fuse_conn_init(fc, fm, sb->s_user_ns, &fuse_dev_fiq_ops, NULL); in fuse_fill_super()
1482 fc->release = fuse_free_conn; in fuse_fill_super()
1507 static int fuse_get_tree(struct fs_context *fc) in fuse_get_tree() argument
1509 struct fuse_fs_context *ctx = fc->fs_private; in fuse_get_tree()
1517 return get_tree_bdev(fc, fuse_fill_super); in fuse_get_tree()
1520 return get_tree_nodev(fc, fuse_fill_super); in fuse_get_tree()
1533 static int fuse_init_fs_context(struct fs_context *fc) in fuse_init_fs_context() argument
1546 if (fc->fs_type == &fuseblk_fs_type) { in fuse_init_fs_context()
1552 fc->fs_private = ctx; in fuse_init_fs_context()
1553 fc->ops = &fuse_context_ops; in fuse_init_fs_context()
1559 struct fuse_conn *fc = fm->fc; in fuse_mount_remove() local
1562 down_write(&fc->killsb); in fuse_mount_remove()
1564 if (list_empty(&fc->mounts)) in fuse_mount_remove()
1566 up_write(&fc->killsb); in fuse_mount_remove()
1574 struct fuse_conn *fc = fm->fc; in fuse_conn_destroy() local
1576 if (fc->destroy) in fuse_conn_destroy()
1579 fuse_abort_conn(fc); in fuse_conn_destroy()
1580 fuse_wait_aborted(fc); in fuse_conn_destroy()
1582 if (!list_empty(&fc->entry)) { in fuse_conn_destroy()
1584 list_del(&fc->entry); in fuse_conn_destroy()
1585 fuse_ctl_remove_conn(fc); in fuse_conn_destroy()