Lines Matching refs:fc

114 		struct fuse_conn *fc = get_fuse_conn(inode);  in fuse_evict_inode()  local
115 fuse_queue_forget(fc, fi->forget, fi->nodeid, fi->nlookup); in fuse_evict_inode()
148 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_change_attributes_common() local
153 fi->attr_version = atomic64_inc_return(&fc->attr_version); in fuse_change_attributes_common()
160 inode->i_uid = make_kuid(fc->user_ns, attr->uid); in fuse_change_attributes_common()
161 inode->i_gid = make_kgid(fc->user_ns, attr->gid); in fuse_change_attributes_common()
166 if (!fc->writeback_cache || !S_ISREG(inode->i_mode)) { in fuse_change_attributes_common()
184 if (!fc->default_permissions) in fuse_change_attributes_common()
193 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_change_attributes() local
195 bool is_wb = fc->writeback_cache; in fuse_change_attributes()
224 if (!fc->explicit_inval_data) in fuse_change_attributes()
226 } else if (fc->auto_inval_data) { in fuse_change_attributes()
291 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_iget() local
300 if (!fc->writeback_cache || !S_ISREG(attr->mode)) in fuse_iget()
367 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_umount_begin() local
369 if (!fc->no_force_umount) in fuse_umount_begin()
370 fuse_abort_conn(fc); in fuse_umount_begin()
373 static void fuse_send_destroy(struct fuse_conn *fc) in fuse_send_destroy() argument
375 if (fc->conn_init) { in fuse_send_destroy()
381 fuse_simple_request(fc, &args); in fuse_send_destroy()
387 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_put_super() local
390 list_del(&fc->entry); in fuse_put_super()
391 fuse_ctl_remove_conn(fc); in fuse_put_super()
394 fuse_conn_put(fc); in fuse_put_super()
414 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_statfs() local
419 if (!fuse_allow_current_process(fc)) { in fuse_statfs()
431 err = fuse_simple_request(fc, &args); in fuse_statfs()
470 static int fuse_parse_param(struct fs_context *fc, struct fs_parameter *param) in fuse_parse_param() argument
473 struct fuse_fs_context *ctx = fc->fs_private; in fuse_parse_param()
476 opt = fs_parse(fc, &fuse_fs_parameters, param, &result); in fuse_parse_param()
482 if (fc->source) in fuse_parse_param()
483 return invalf(fc, "fuse: Multiple sources specified"); in fuse_parse_param()
484 fc->source = param->string; in fuse_parse_param()
490 return invalf(fc, "fuse: Multiple subtypes specified"); in fuse_parse_param()
502 return invalf(fc, "fuse: Invalid rootmode"); in fuse_parse_param()
508 ctx->user_id = make_kuid(fc->user_ns, result.uint_32); in fuse_parse_param()
510 return invalf(fc, "fuse: Invalid user_id"); in fuse_parse_param()
515 ctx->group_id = make_kgid(fc->user_ns, result.uint_32); in fuse_parse_param()
517 return invalf(fc, "fuse: Invalid group_id"); in fuse_parse_param()
535 return invalf(fc, "fuse: blksize only supported for fuseblk"); in fuse_parse_param()
546 static void fuse_free_fc(struct fs_context *fc) in fuse_free_fc() argument
548 struct fuse_fs_context *ctx = fc->fs_private; in fuse_free_fc()
559 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_show_options() local
561 if (fc->no_mount_options) in fuse_show_options()
564 seq_printf(m, ",user_id=%u", from_kuid_munged(fc->user_ns, fc->user_id)); in fuse_show_options()
565 seq_printf(m, ",group_id=%u", from_kgid_munged(fc->user_ns, fc->group_id)); in fuse_show_options()
566 if (fc->default_permissions) in fuse_show_options()
568 if (fc->allow_other) in fuse_show_options()
570 if (fc->max_read != ~0) in fuse_show_options()
571 seq_printf(m, ",max_read=%u", fc->max_read); in fuse_show_options()
603 void fuse_conn_init(struct fuse_conn *fc, struct user_namespace *user_ns, in fuse_conn_init() argument
606 memset(fc, 0, sizeof(*fc)); in fuse_conn_init()
607 spin_lock_init(&fc->lock); in fuse_conn_init()
608 spin_lock_init(&fc->bg_lock); in fuse_conn_init()
609 init_rwsem(&fc->killsb); in fuse_conn_init()
610 refcount_set(&fc->count, 1); in fuse_conn_init()
611 atomic_set(&fc->dev_count, 1); in fuse_conn_init()
612 init_waitqueue_head(&fc->blocked_waitq); in fuse_conn_init()
613 fuse_iqueue_init(&fc->iq, fiq_ops, fiq_priv); in fuse_conn_init()
614 INIT_LIST_HEAD(&fc->bg_queue); in fuse_conn_init()
615 INIT_LIST_HEAD(&fc->entry); in fuse_conn_init()
616 INIT_LIST_HEAD(&fc->devices); in fuse_conn_init()
617 atomic_set(&fc->num_waiting, 0); in fuse_conn_init()
618 fc->max_background = FUSE_DEFAULT_MAX_BACKGROUND; in fuse_conn_init()
619 fc->congestion_threshold = FUSE_DEFAULT_CONGESTION_THRESHOLD; in fuse_conn_init()
620 atomic64_set(&fc->khctr, 0); in fuse_conn_init()
621 fc->polled_files = RB_ROOT; in fuse_conn_init()
622 fc->blocked = 0; in fuse_conn_init()
623 fc->initialized = 0; in fuse_conn_init()
624 fc->connected = 1; in fuse_conn_init()
625 atomic64_set(&fc->attr_version, 1); in fuse_conn_init()
626 get_random_bytes(&fc->scramble_key, sizeof(fc->scramble_key)); in fuse_conn_init()
627 fc->pid_ns = get_pid_ns(task_active_pid_ns(current)); in fuse_conn_init()
628 fc->user_ns = get_user_ns(user_ns); in fuse_conn_init()
629 fc->max_pages = FUSE_DEFAULT_MAX_PAGES_PER_REQ; in fuse_conn_init()
633 void fuse_conn_put(struct fuse_conn *fc) in fuse_conn_put() argument
635 if (refcount_dec_and_test(&fc->count)) { in fuse_conn_put()
636 struct fuse_iqueue *fiq = &fc->iq; in fuse_conn_put()
640 put_pid_ns(fc->pid_ns); in fuse_conn_put()
641 put_user_ns(fc->user_ns); in fuse_conn_put()
642 fc->release(fc); in fuse_conn_put()
647 struct fuse_conn *fuse_conn_get(struct fuse_conn *fc) in fuse_conn_get() argument
649 refcount_inc(&fc->count); in fuse_conn_get()
650 return fc; in fuse_conn_get()
673 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_get_dentry() local
686 if (!fc->export_support) in fuse_get_dentry()
780 struct fuse_conn *fc = get_fuse_conn(child_inode); in fuse_get_parent() local
787 if (!fc->export_support) in fuse_get_parent()
851 static void process_init_limits(struct fuse_conn *fc, struct fuse_init_out *arg) in process_init_limits() argument
861 spin_lock(&fc->bg_lock); in process_init_limits()
863 fc->max_background = arg->max_background; in process_init_limits()
865 if (!cap_sys_admin && fc->max_background > max_user_bgreq) in process_init_limits()
866 fc->max_background = max_user_bgreq; in process_init_limits()
869 fc->congestion_threshold = arg->congestion_threshold; in process_init_limits()
872 fc->congestion_threshold > max_user_congthresh) in process_init_limits()
873 fc->congestion_threshold = max_user_congthresh; in process_init_limits()
875 spin_unlock(&fc->bg_lock); in process_init_limits()
884 static void process_init_reply(struct fuse_conn *fc, struct fuse_args *args, in process_init_reply() argument
891 fc->conn_error = 1; in process_init_reply()
895 process_init_limits(fc, arg); in process_init_reply()
900 fc->async_read = 1; in process_init_reply()
902 fc->no_lock = 1; in process_init_reply()
905 fc->no_flock = 1; in process_init_reply()
908 fc->no_flock = 1; in process_init_reply()
911 fc->atomic_o_trunc = 1; in process_init_reply()
915 fc->export_support = 1; in process_init_reply()
918 fc->big_writes = 1; in process_init_reply()
920 fc->dont_mask = 1; in process_init_reply()
922 fc->auto_inval_data = 1; in process_init_reply()
924 fc->explicit_inval_data = 1; in process_init_reply()
926 fc->do_readdirplus = 1; in process_init_reply()
928 fc->readdirplus_auto = 1; in process_init_reply()
931 fc->async_dio = 1; in process_init_reply()
933 fc->writeback_cache = 1; in process_init_reply()
935 fc->parallel_dirops = 1; in process_init_reply()
937 fc->handle_killpriv = 1; in process_init_reply()
939 fc->sb->s_time_gran = arg->time_gran; in process_init_reply()
941 fc->default_permissions = 1; in process_init_reply()
942 fc->posix_acl = 1; in process_init_reply()
943 fc->sb->s_xattr = fuse_acl_xattr_handlers; in process_init_reply()
946 fc->cache_symlinks = 1; in process_init_reply()
948 fc->abort_err = 1; in process_init_reply()
950 fc->max_pages = in process_init_reply()
955 ra_pages = fc->max_read / PAGE_SIZE; in process_init_reply()
956 fc->no_lock = 1; in process_init_reply()
957 fc->no_flock = 1; in process_init_reply()
960 fc->sb->s_bdi->ra_pages = in process_init_reply()
961 min(fc->sb->s_bdi->ra_pages, ra_pages); in process_init_reply()
962 fc->minor = arg->minor; in process_init_reply()
963 fc->max_write = arg->minor < 5 ? 4096 : arg->max_write; in process_init_reply()
964 fc->max_write = max_t(unsigned, 4096, fc->max_write); in process_init_reply()
965 fc->conn_init = 1; in process_init_reply()
969 fuse_set_initialized(fc); in process_init_reply()
970 wake_up_all(&fc->blocked_waitq); in process_init_reply()
973 void fuse_send_init(struct fuse_conn *fc) in fuse_send_init() argument
981 ia->in.max_readahead = fc->sb->s_bdi->ra_pages * PAGE_SIZE; in fuse_send_init()
1007 if (fuse_simple_background(fc, &ia->args, GFP_KERNEL) != 0) in fuse_send_init()
1008 process_init_reply(fc, &ia->args, -ENOTCONN); in fuse_send_init()
1012 void fuse_free_conn(struct fuse_conn *fc) in fuse_free_conn() argument
1014 WARN_ON(!list_empty(&fc->devices)); in fuse_free_conn()
1015 kfree_rcu(fc, rcu); in fuse_free_conn()
1019 static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb) in fuse_bdi_init() argument
1033 err = super_setup_bdi_name(sb, "%u:%u%s", MAJOR(fc->dev), in fuse_bdi_init()
1034 MINOR(fc->dev), suffix); in fuse_bdi_init()
1081 void fuse_dev_install(struct fuse_dev *fud, struct fuse_conn *fc) in fuse_dev_install() argument
1083 fud->fc = fuse_conn_get(fc); in fuse_dev_install()
1084 spin_lock(&fc->lock); in fuse_dev_install()
1085 list_add_tail(&fud->entry, &fc->devices); in fuse_dev_install()
1086 spin_unlock(&fc->lock); in fuse_dev_install()
1090 struct fuse_dev *fuse_dev_alloc_install(struct fuse_conn *fc) in fuse_dev_alloc_install() argument
1098 fuse_dev_install(fud, fc); in fuse_dev_alloc_install()
1105 struct fuse_conn *fc = fud->fc; in fuse_dev_free() local
1107 if (fc) { in fuse_dev_free()
1108 spin_lock(&fc->lock); in fuse_dev_free()
1110 spin_unlock(&fc->lock); in fuse_dev_free()
1112 fuse_conn_put(fc); in fuse_dev_free()
1122 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_fill_super_common() local
1163 fud = fuse_dev_alloc_install(fc); in fuse_fill_super_common()
1167 fc->dev = sb->s_dev; in fuse_fill_super_common()
1168 fc->sb = sb; in fuse_fill_super_common()
1169 err = fuse_bdi_init(fc, sb); in fuse_fill_super_common()
1175 fc->dont_mask = 1; in fuse_fill_super_common()
1178 fc->default_permissions = ctx->default_permissions; in fuse_fill_super_common()
1179 fc->allow_other = ctx->allow_other; in fuse_fill_super_common()
1180 fc->user_id = ctx->user_id; in fuse_fill_super_common()
1181 fc->group_id = ctx->group_id; in fuse_fill_super_common()
1182 fc->max_read = max_t(unsigned, 4096, ctx->max_read); in fuse_fill_super_common()
1183 fc->destroy = ctx->destroy; in fuse_fill_super_common()
1184 fc->no_control = ctx->no_control; in fuse_fill_super_common()
1185 fc->no_force_umount = ctx->no_force_umount; in fuse_fill_super_common()
1186 fc->no_mount_options = ctx->no_mount_options; in fuse_fill_super_common()
1202 err = fuse_ctl_add_conn(fc); in fuse_fill_super_common()
1206 list_add_tail(&fc->entry, &fuse_conn_list); in fuse_fill_super_common()
1227 struct fuse_conn *fc; in fuse_fill_super() local
1243 fc = kmalloc(sizeof(*fc), GFP_KERNEL); in fuse_fill_super()
1245 if (!fc) in fuse_fill_super()
1248 fuse_conn_init(fc, sb->s_user_ns, &fuse_dev_fiq_ops, NULL); in fuse_fill_super()
1249 fc->release = fuse_free_conn; in fuse_fill_super()
1250 sb->s_fs_info = fc; in fuse_fill_super()
1265 fuse_conn_put(fc); in fuse_fill_super()
1273 static int fuse_get_tree(struct fs_context *fc) in fuse_get_tree() argument
1275 struct fuse_fs_context *ctx = fc->fs_private; in fuse_get_tree()
1283 return get_tree_bdev(fc, fuse_fill_super); in fuse_get_tree()
1286 return get_tree_nodev(fc, fuse_fill_super); in fuse_get_tree()
1298 static int fuse_init_fs_context(struct fs_context *fc) in fuse_init_fs_context() argument
1310 if (fc->fs_type == &fuseblk_fs_type) { in fuse_init_fs_context()
1316 fc->fs_private = ctx; in fuse_init_fs_context()
1317 fc->ops = &fuse_context_ops; in fuse_init_fs_context()
1323 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_sb_destroy() local
1325 if (fc) { in fuse_sb_destroy()
1326 if (fc->destroy) in fuse_sb_destroy()
1327 fuse_send_destroy(fc); in fuse_sb_destroy()
1329 fuse_abort_conn(fc); in fuse_sb_destroy()
1330 fuse_wait_aborted(fc); in fuse_sb_destroy()
1332 down_write(&fc->killsb); in fuse_sb_destroy()
1333 fc->sb = NULL; in fuse_sb_destroy()
1334 up_write(&fc->killsb); in fuse_sb_destroy()