Lines Matching refs:fc
129 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_evict_inode() local
131 fuse_queue_forget(fc, fi->forget, fi->nodeid, fi->nlookup); in fuse_evict_inode()
160 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_change_attributes_common() local
163 fi->attr_version = ++fc->attr_version; in fuse_change_attributes_common()
175 if (!fc->writeback_cache || !S_ISREG(inode->i_mode)) { in fuse_change_attributes_common()
193 if (!(fc->flags & FUSE_DEFAULT_PERMISSIONS)) in fuse_change_attributes_common()
202 struct fuse_conn *fc = get_fuse_conn(inode); in fuse_change_attributes() local
204 bool is_wb = fc->writeback_cache; in fuse_change_attributes()
208 spin_lock(&fc->lock); in fuse_change_attributes()
211 spin_unlock(&fc->lock); in fuse_change_attributes()
226 spin_unlock(&fc->lock); in fuse_change_attributes()
234 } else if (fc->auto_inval_data) { in fuse_change_attributes()
299 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_iget() local
308 if (!fc->writeback_cache || !S_ISREG(attr->mode)) in fuse_iget()
321 spin_lock(&fc->lock); in fuse_iget()
323 spin_unlock(&fc->lock); in fuse_iget()
359 static void fuse_send_destroy(struct fuse_conn *fc) in fuse_send_destroy() argument
361 struct fuse_req *req = fc->destroy_req; in fuse_send_destroy()
362 if (req && fc->conn_init) { in fuse_send_destroy()
363 fc->destroy_req = NULL; in fuse_send_destroy()
367 fuse_request_send(fc, req); in fuse_send_destroy()
368 fuse_put_request(fc, req); in fuse_send_destroy()
372 static void fuse_bdi_destroy(struct fuse_conn *fc) in fuse_bdi_destroy() argument
374 if (fc->bdi_initialized) in fuse_bdi_destroy()
375 bdi_destroy(&fc->bdi); in fuse_bdi_destroy()
380 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_put_super() local
382 fuse_send_destroy(fc); in fuse_put_super()
384 fuse_abort_conn(fc); in fuse_put_super()
386 list_del(&fc->entry); in fuse_put_super()
387 fuse_ctl_remove_conn(fc); in fuse_put_super()
389 fuse_bdi_destroy(fc); in fuse_put_super()
391 fuse_conn_put(fc); in fuse_put_super()
411 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_statfs() local
416 if (!fuse_allow_current_process(fc)) { in fuse_statfs()
428 err = fuse_simple_request(fc, &args); in fuse_statfs()
555 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_show_options() local
557 seq_printf(m, ",user_id=%u", from_kuid_munged(&init_user_ns, fc->user_id)); in fuse_show_options()
558 seq_printf(m, ",group_id=%u", from_kgid_munged(&init_user_ns, fc->group_id)); in fuse_show_options()
559 if (fc->flags & FUSE_DEFAULT_PERMISSIONS) in fuse_show_options()
561 if (fc->flags & FUSE_ALLOW_OTHER) in fuse_show_options()
563 if (fc->max_read != ~0) in fuse_show_options()
564 seq_printf(m, ",max_read=%u", fc->max_read); in fuse_show_options()
589 void fuse_conn_init(struct fuse_conn *fc) in fuse_conn_init() argument
591 memset(fc, 0, sizeof(*fc)); in fuse_conn_init()
592 spin_lock_init(&fc->lock); in fuse_conn_init()
593 init_rwsem(&fc->killsb); in fuse_conn_init()
594 atomic_set(&fc->count, 1); in fuse_conn_init()
595 atomic_set(&fc->dev_count, 1); in fuse_conn_init()
596 init_waitqueue_head(&fc->blocked_waitq); in fuse_conn_init()
597 init_waitqueue_head(&fc->reserved_req_waitq); in fuse_conn_init()
598 fuse_iqueue_init(&fc->iq); in fuse_conn_init()
599 INIT_LIST_HEAD(&fc->bg_queue); in fuse_conn_init()
600 INIT_LIST_HEAD(&fc->entry); in fuse_conn_init()
601 INIT_LIST_HEAD(&fc->devices); in fuse_conn_init()
602 atomic_set(&fc->num_waiting, 0); in fuse_conn_init()
603 fc->max_background = FUSE_DEFAULT_MAX_BACKGROUND; in fuse_conn_init()
604 fc->congestion_threshold = FUSE_DEFAULT_CONGESTION_THRESHOLD; in fuse_conn_init()
605 fc->khctr = 0; in fuse_conn_init()
606 fc->polled_files = RB_ROOT; in fuse_conn_init()
607 fc->blocked = 0; in fuse_conn_init()
608 fc->initialized = 0; in fuse_conn_init()
609 fc->connected = 1; in fuse_conn_init()
610 fc->attr_version = 1; in fuse_conn_init()
611 get_random_bytes(&fc->scramble_key, sizeof(fc->scramble_key)); in fuse_conn_init()
615 void fuse_conn_put(struct fuse_conn *fc) in fuse_conn_put() argument
617 if (atomic_dec_and_test(&fc->count)) { in fuse_conn_put()
618 if (fc->destroy_req) in fuse_conn_put()
619 fuse_request_free(fc->destroy_req); in fuse_conn_put()
620 fc->release(fc); in fuse_conn_put()
625 struct fuse_conn *fuse_conn_get(struct fuse_conn *fc) in fuse_conn_get() argument
627 atomic_inc(&fc->count); in fuse_conn_get()
628 return fc; in fuse_conn_get()
651 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_get_dentry() local
664 if (!fc->export_support) in fuse_get_dentry()
760 struct fuse_conn *fc = get_fuse_conn(child_inode); in fuse_get_parent() local
767 if (!fc->export_support) in fuse_get_parent()
830 static void process_init_limits(struct fuse_conn *fc, struct fuse_init_out *arg) in process_init_limits() argument
841 fc->max_background = arg->max_background; in process_init_limits()
843 if (!cap_sys_admin && fc->max_background > max_user_bgreq) in process_init_limits()
844 fc->max_background = max_user_bgreq; in process_init_limits()
847 fc->congestion_threshold = arg->congestion_threshold; in process_init_limits()
850 fc->congestion_threshold > max_user_congthresh) in process_init_limits()
851 fc->congestion_threshold = max_user_congthresh; in process_init_limits()
855 static void process_init_reply(struct fuse_conn *fc, struct fuse_req *req) in process_init_reply() argument
860 fc->conn_error = 1; in process_init_reply()
864 process_init_limits(fc, arg); in process_init_reply()
869 fc->async_read = 1; in process_init_reply()
871 fc->no_lock = 1; in process_init_reply()
874 fc->no_flock = 1; in process_init_reply()
877 fc->no_flock = 1; in process_init_reply()
880 fc->atomic_o_trunc = 1; in process_init_reply()
884 fc->export_support = 1; in process_init_reply()
887 fc->big_writes = 1; in process_init_reply()
889 fc->dont_mask = 1; in process_init_reply()
891 fc->auto_inval_data = 1; in process_init_reply()
893 fc->do_readdirplus = 1; in process_init_reply()
895 fc->readdirplus_auto = 1; in process_init_reply()
898 fc->async_dio = 1; in process_init_reply()
900 fc->writeback_cache = 1; in process_init_reply()
902 fc->sb->s_time_gran = arg->time_gran; in process_init_reply()
904 ra_pages = fc->max_read / PAGE_CACHE_SIZE; in process_init_reply()
905 fc->no_lock = 1; in process_init_reply()
906 fc->no_flock = 1; in process_init_reply()
909 fc->bdi.ra_pages = min(fc->bdi.ra_pages, ra_pages); in process_init_reply()
910 fc->minor = arg->minor; in process_init_reply()
911 fc->max_write = arg->minor < 5 ? 4096 : arg->max_write; in process_init_reply()
912 fc->max_write = max_t(unsigned, 4096, fc->max_write); in process_init_reply()
913 fc->conn_init = 1; in process_init_reply()
915 fuse_set_initialized(fc); in process_init_reply()
916 wake_up_all(&fc->blocked_waitq); in process_init_reply()
919 static void fuse_send_init(struct fuse_conn *fc, struct fuse_req *req) in fuse_send_init() argument
925 arg->max_readahead = fc->bdi.ra_pages * PAGE_CACHE_SIZE; in fuse_send_init()
944 fuse_request_send_background(fc, req); in fuse_send_init()
947 static void fuse_free_conn(struct fuse_conn *fc) in fuse_free_conn() argument
949 WARN_ON(!list_empty(&fc->devices)); in fuse_free_conn()
950 kfree_rcu(fc, rcu); in fuse_free_conn()
953 static int fuse_bdi_init(struct fuse_conn *fc, struct super_block *sb) in fuse_bdi_init() argument
957 fc->bdi.name = "fuse"; in fuse_bdi_init()
958 fc->bdi.ra_pages = (VM_MAX_READAHEAD * 1024) / PAGE_CACHE_SIZE; in fuse_bdi_init()
960 fc->bdi.capabilities = BDI_CAP_NO_ACCT_WB | BDI_CAP_STRICTLIMIT; in fuse_bdi_init()
962 err = bdi_init(&fc->bdi); in fuse_bdi_init()
966 fc->bdi_initialized = 1; in fuse_bdi_init()
969 err = bdi_register(&fc->bdi, NULL, "%u:%u-fuseblk", in fuse_bdi_init()
970 MAJOR(fc->dev), MINOR(fc->dev)); in fuse_bdi_init()
972 err = bdi_register_dev(&fc->bdi, fc->dev); in fuse_bdi_init()
990 bdi_set_max_ratio(&fc->bdi, 1); in fuse_bdi_init()
995 struct fuse_dev *fuse_dev_alloc(struct fuse_conn *fc) in fuse_dev_alloc() argument
1001 fud->fc = fuse_conn_get(fc); in fuse_dev_alloc()
1004 spin_lock(&fc->lock); in fuse_dev_alloc()
1005 list_add_tail(&fud->entry, &fc->devices); in fuse_dev_alloc()
1006 spin_unlock(&fc->lock); in fuse_dev_alloc()
1015 struct fuse_conn *fc = fud->fc; in fuse_dev_free() local
1017 if (fc) { in fuse_dev_free()
1018 spin_lock(&fc->lock); in fuse_dev_free()
1020 spin_unlock(&fc->lock); in fuse_dev_free()
1022 fuse_conn_put(fc); in fuse_dev_free()
1031 struct fuse_conn *fc; in fuse_fill_super() local
1074 fc = kmalloc(sizeof(*fc), GFP_KERNEL); in fuse_fill_super()
1076 if (!fc) in fuse_fill_super()
1079 fuse_conn_init(fc); in fuse_fill_super()
1080 fc->release = fuse_free_conn; in fuse_fill_super()
1082 fud = fuse_dev_alloc(fc); in fuse_fill_super()
1086 fc->dev = sb->s_dev; in fuse_fill_super()
1087 fc->sb = sb; in fuse_fill_super()
1088 err = fuse_bdi_init(fc, sb); in fuse_fill_super()
1092 sb->s_bdi = &fc->bdi; in fuse_fill_super()
1096 fc->dont_mask = 1; in fuse_fill_super()
1099 fc->flags = d.flags; in fuse_fill_super()
1100 fc->user_id = d.user_id; in fuse_fill_super()
1101 fc->group_id = d.group_id; in fuse_fill_super()
1102 fc->max_read = max_t(unsigned, 4096, d.max_read); in fuse_fill_super()
1105 sb->s_fs_info = fc; in fuse_fill_super()
1121 fc->destroy_req = fuse_request_alloc(0); in fuse_fill_super()
1122 if (!fc->destroy_req) in fuse_fill_super()
1131 err = fuse_ctl_add_conn(fc); in fuse_fill_super()
1135 list_add_tail(&fc->entry, &fuse_conn_list); in fuse_fill_super()
1146 fuse_send_init(fc, init_req); in fuse_fill_super()
1159 fuse_bdi_destroy(fc); in fuse_fill_super()
1160 fuse_conn_put(fc); in fuse_fill_super()
1176 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_kill_sb_anon() local
1178 if (fc) { in fuse_kill_sb_anon()
1179 down_write(&fc->killsb); in fuse_kill_sb_anon()
1180 fc->sb = NULL; in fuse_kill_sb_anon()
1181 up_write(&fc->killsb); in fuse_kill_sb_anon()
1206 struct fuse_conn *fc = get_fuse_conn_super(sb); in fuse_kill_sb_blk() local
1208 if (fc) { in fuse_kill_sb_blk()
1209 down_write(&fc->killsb); in fuse_kill_sb_blk()
1210 fc->sb = NULL; in fuse_kill_sb_blk()
1211 up_write(&fc->killsb); in fuse_kill_sb_blk()