Lines Matching refs:cifs_sb
341 struct cifs_sb_info *cifs_sb, in reconn_set_next_dfs_target() argument
347 if (!cifs_sb || !cifs_sb->origin_fullpath) in reconn_set_next_dfs_target()
358 cifs_dbg(FYI, "%s: UNC: %s\n", __func__, cifs_sb->origin_fullpath); in reconn_set_next_dfs_target()
372 static inline int reconn_setup_dfs_targets(struct cifs_sb_info *cifs_sb, in reconn_setup_dfs_targets() argument
375 if (!cifs_sb->origin_fullpath) in reconn_setup_dfs_targets()
377 return dfs_cache_noreq_find(cifs_sb->origin_fullpath + 1, NULL, tl); in reconn_setup_dfs_targets()
400 struct cifs_sb_info *cifs_sb = NULL; in cifs_reconnect() local
416 cifs_sb = CIFS_SB(sb); in cifs_reconnect()
417 rc = reconn_setup_dfs_targets(cifs_sb, &tgt_list); in cifs_reconnect()
419 cifs_sb = NULL; in cifs_reconnect()
526 reconn_set_next_dfs_target(server, cifs_sb, &tgt_list, &tgt_it); in cifs_reconnect()
555 rc = dfs_cache_noreq_update_tgthint(cifs_sb->origin_fullpath + 1, in cifs_reconnect()
561 rc = dfs_cache_update_vol(cifs_sb->origin_fullpath, server); in cifs_reconnect()
3447 struct cifs_sb_info *new = mnt_data->cifs_sb; in compare_mount_options()
3490 struct cifs_sb_info *new = mnt_data->cifs_sb; in match_prepath()
3509 struct cifs_sb_info *cifs_sb; in cifs_match_super() local
3517 cifs_sb = CIFS_SB(sb); in cifs_match_super()
3518 tlink = cifs_get_tlink(cifs_sb_master_tlink(cifs_sb)); in cifs_match_super()
3817 struct cifs_sb_info *cifs_sb, struct smb_vol *vol_info) in reset_cifs_unix_caps() argument
3871 if (cifs_sb) in reset_cifs_unix_caps()
3872 cifs_sb->mnt_cifs_flags |= in reset_cifs_unix_caps()
3880 if (cifs_sb) in reset_cifs_unix_caps()
3881 cifs_sb->mnt_cifs_flags |= in reset_cifs_unix_caps()
3917 struct cifs_sb_info *cifs_sb) in cifs_setup_cifs_sb() argument
3919 INIT_DELAYED_WORK(&cifs_sb->prune_tlinks, cifs_prune_tlinks); in cifs_setup_cifs_sb()
3921 spin_lock_init(&cifs_sb->tlink_tree_lock); in cifs_setup_cifs_sb()
3922 cifs_sb->tlink_tree = RB_ROOT; in cifs_setup_cifs_sb()
3924 cifs_sb->bsize = pvolume_info->bsize; in cifs_setup_cifs_sb()
3929 cifs_sb->rsize = pvolume_info->rsize; in cifs_setup_cifs_sb()
3930 cifs_sb->wsize = pvolume_info->wsize; in cifs_setup_cifs_sb()
3932 cifs_sb->mnt_uid = pvolume_info->linux_uid; in cifs_setup_cifs_sb()
3933 cifs_sb->mnt_gid = pvolume_info->linux_gid; in cifs_setup_cifs_sb()
3934 cifs_sb->mnt_file_mode = pvolume_info->file_mode; in cifs_setup_cifs_sb()
3935 cifs_sb->mnt_dir_mode = pvolume_info->dir_mode; in cifs_setup_cifs_sb()
3937 cifs_sb->mnt_file_mode, cifs_sb->mnt_dir_mode); in cifs_setup_cifs_sb()
3939 cifs_sb->actimeo = pvolume_info->actimeo; in cifs_setup_cifs_sb()
3940 cifs_sb->local_nls = pvolume_info->local_nls; in cifs_setup_cifs_sb()
3943 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_DFS; in cifs_setup_cifs_sb()
3945 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_PERM; in cifs_setup_cifs_sb()
3947 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SET_UID; in cifs_setup_cifs_sb()
3949 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UID_FROM_ACL; in cifs_setup_cifs_sb()
3951 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SERVER_INUM; in cifs_setup_cifs_sb()
3953 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MAP_SFM_CHR; in cifs_setup_cifs_sb()
3955 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MAP_SPECIAL_CHR; in cifs_setup_cifs_sb()
3957 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_XATTR; in cifs_setup_cifs_sb()
3959 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UNX_EMUL; in cifs_setup_cifs_sb()
3961 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_BRL; in cifs_setup_cifs_sb()
3963 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_HANDLE_CACHE; in cifs_setup_cifs_sb()
3965 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NOSSYNC; in cifs_setup_cifs_sb()
3967 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NOPOSIXBRL; in cifs_setup_cifs_sb()
3969 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_RWPIDFORWARD; in cifs_setup_cifs_sb()
3971 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MODE_FROM_SID; in cifs_setup_cifs_sb()
3973 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_ACL; in cifs_setup_cifs_sb()
3975 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_BACKUPUID; in cifs_setup_cifs_sb()
3976 cifs_sb->mnt_backupuid = pvolume_info->backupuid; in cifs_setup_cifs_sb()
3979 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_BACKUPGID; in cifs_setup_cifs_sb()
3980 cifs_sb->mnt_backupgid = pvolume_info->backupgid; in cifs_setup_cifs_sb()
3983 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_UID; in cifs_setup_cifs_sb()
3985 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_GID; in cifs_setup_cifs_sb()
3987 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DYNPERM; in cifs_setup_cifs_sb()
3989 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_FSCACHE; in cifs_setup_cifs_sb()
3991 cifs_sb->mnt_cifs_flags |= (CIFS_MOUNT_MULTIUSER | in cifs_setup_cifs_sb()
3994 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_STRICT_IO; in cifs_setup_cifs_sb()
3997 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DIRECT_IO; in cifs_setup_cifs_sb()
4001 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_RO_CACHE; in cifs_setup_cifs_sb()
4004 cifs_sb->mnt_cifs_flags |= (CIFS_MOUNT_RO_CACHE | in cifs_setup_cifs_sb()
4022 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MF_SYMLINKS; in cifs_setup_cifs_sb()
4029 cifs_sb->prepath = kstrdup(pvolume_info->prepath, GFP_KERNEL); in cifs_setup_cifs_sb()
4030 if (cifs_sb->prepath == NULL) in cifs_setup_cifs_sb()
4032 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH; in cifs_setup_cifs_sb()
4059 static inline void mount_put_conns(struct cifs_sb_info *cifs_sb, in mount_put_conns() argument
4072 cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_POSIX_PATHS; in mount_put_conns()
4077 static int mount_get_conns(struct smb_vol *vol, struct cifs_sb_info *cifs_sb, in mount_get_conns() argument
4128 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_POSIX_PATHS; in mount_get_conns()
4136 reset_cifs_unix_caps(*xid, tcon, cifs_sb, vol); in mount_get_conns()
4146 server->ops->qfs_tcon(*xid, tcon, cifs_sb); in mount_get_conns()
4147 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RO_CACHE) { in mount_get_conns()
4151 else if ((cifs_sb->mnt_cifs_flags & in mount_get_conns()
4158 cifs_sb->wsize = server->ops->negotiate_wsize(tcon, vol); in mount_get_conns()
4159 cifs_sb->rsize = server->ops->negotiate_rsize(tcon, vol); in mount_get_conns()
4164 static int mount_setup_tlink(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses, in mount_setup_tlink() argument
4180 cifs_sb->master_tlink = tlink; in mount_setup_tlink()
4181 spin_lock(&cifs_sb->tlink_tree_lock); in mount_setup_tlink()
4182 tlink_rb_insert(&cifs_sb->tlink_tree, tlink); in mount_setup_tlink()
4183 spin_unlock(&cifs_sb->tlink_tree_lock); in mount_setup_tlink()
4185 queue_delayed_work(cifsiod_wq, &cifs_sb->prune_tlinks, in mount_setup_tlink()
4197 const struct cifs_sb_info *cifs_sb, bool useppath) in build_unc_path_to_root() argument
4215 *pos = CIFS_DIR_SEP(cifs_sb); in build_unc_path_to_root()
4221 convert_delimiter(full_path, CIFS_DIR_SEP(cifs_sb)); in build_unc_path_to_root()
4239 struct smb_vol *volume_info, struct cifs_sb_info *cifs_sb, in expand_dfs_referral() argument
4246 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_DFS) in expand_dfs_referral()
4249 full_path = build_unc_path_to_root(volume_info, cifs_sb, true); in expand_dfs_referral()
4253 rc = dfs_cache_find(xid, ses, cifs_sb->local_nls, cifs_remap(cifs_sb), in expand_dfs_referral()
4258 mdata = cifs_compose_mount_options(cifs_sb->mountdata, in expand_dfs_referral()
4272 kfree(cifs_sb->mountdata); in expand_dfs_referral()
4273 cifs_sb->mountdata = mdata; in expand_dfs_referral()
4317 struct cifs_sb_info *cifs_sb, struct smb_vol *vol, unsigned int *xid, in setup_dfs_tgt_conn() argument
4332 mdata = cifs_compose_mount_options(cifs_sb->mountdata, full_path + 1, &ref, &fake_devname); in setup_dfs_tgt_conn()
4352 mount_put_conns(cifs_sb, *xid, *server, *ses, *tcon); in setup_dfs_tgt_conn()
4353 rc = mount_get_conns(&fake_vol, cifs_sb, xid, server, ses, in setup_dfs_tgt_conn()
4367 static int do_dfs_failover(const char *path, const char *full_path, struct cifs_sb_info *cifs_sb, in do_dfs_failover() argument
4376 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_DFS) in do_dfs_failover()
4389 rc = setup_dfs_tgt_conn(path, full_path, tgt_it, cifs_sb, vol, xid, server, ses, in do_dfs_failover()
4400 cifs_sb->local_nls, in do_dfs_failover()
4401 cifs_remap(cifs_sb), path, in do_dfs_failover()
4471 struct cifs_sb_info *cifs_sb, in cifs_are_all_path_components_accessible() argument
4480 sep = CIFS_DIR_SEP(cifs_sb); in cifs_are_all_path_components_accessible()
4483 rc = server->ops->is_path_accessible(xid, tcon, cifs_sb, ""); in cifs_are_all_path_components_accessible()
4507 rc = server->ops->is_path_accessible(xid, tcon, cifs_sb, in cifs_are_all_path_components_accessible()
4518 static int is_path_remote(struct cifs_sb_info *cifs_sb, struct smb_vol *vol, in is_path_remote() argument
4532 full_path = cifs_build_path_to_root(vol, cifs_sb, tcon, in is_path_remote()
4539 rc = server->ops->is_path_accessible(xid, tcon, cifs_sb, in is_path_remote()
4548 cifs_sb, full_path, tcon->Flags & SMB_SHARE_IS_IN_DFS); in is_path_remote()
4551 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH; in is_path_remote()
4561 static void set_root_ses(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses, in set_root_ses() argument
4568 ses->tcon_ipc->remap = cifs_remap(cifs_sb); in set_root_ses()
4581 static int check_dfs_prepath(struct cifs_sb_info *cifs_sb, struct smb_vol *vol, in check_dfs_prepath() argument
4586 char sep = CIFS_DIR_SEP(cifs_sb), tmp; in check_dfs_prepath()
4592 path = cifs_build_path_to_root(vol, cifs_sb, tcon, added_treename); in check_dfs_prepath()
4621 rc = server->ops->is_path_accessible(xid, tcon, cifs_sb, path); in check_dfs_prepath()
4630 npath = build_unc_path_to_root(&v, cifs_sb, true); in check_dfs_prepath()
4635 npath = build_unc_path_to_root(&v, cifs_sb, true); in check_dfs_prepath()
4651 int cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *vol) in cifs_mount() argument
4663 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4671 if (dfs_cache_find(xid, ses, cifs_sb->local_nls, cifs_remap(cifs_sb), vol->UNC + 1, NULL, in cifs_mount()
4677 rc = is_path_remote(cifs_sb, vol, xid, server, tcon); in cifs_mount()
4684 mntdata = kstrndup(cifs_sb->mountdata, strlen(cifs_sb->mountdata), GFP_KERNEL); in cifs_mount()
4690 ref_path = build_unc_path_to_root(vol, cifs_sb, false); in cifs_mount()
4697 set_root_ses(cifs_sb, ses, &root_ses); in cifs_mount()
4701 full_path = build_unc_path_to_root(vol, cifs_sb, !!count); in cifs_mount()
4708 oldmnt = cifs_sb->mountdata; in cifs_mount()
4709 rc = expand_dfs_referral(xid, root_ses, vol, cifs_sb, ref_path + 1); in cifs_mount()
4713 if (oldmnt != cifs_sb->mountdata) { in cifs_mount()
4714 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4715 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4719 rc = do_dfs_failover(ref_path + 1, full_path, cifs_sb, vol, root_ses, &xid, in cifs_mount()
4729 set_root_ses(cifs_sb, ses, &root_ses); in cifs_mount()
4732 rc = check_dfs_prepath(cifs_sb, vol, xid, server, tcon, &ref_path); in cifs_mount()
4752 cifs_sb->origin_fullpath = kstrndup(full_path, strlen(full_path), GFP_KERNEL); in cifs_mount()
4753 if (!cifs_sb->origin_fullpath) { in cifs_mount()
4760 tcon->remap = cifs_remap(cifs_sb); in cifs_mount()
4764 rc = dfs_cache_add_vol(mntdata, vol, cifs_sb->origin_fullpath); in cifs_mount()
4772 cifs_autodisable_serverino(cifs_sb); in cifs_mount()
4777 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH; in cifs_mount()
4778 kfree(cifs_sb->prepath); in cifs_mount()
4779 cifs_sb->prepath = vol->prepath; in cifs_mount()
4785 return mount_setup_tlink(cifs_sb, ses, tcon); in cifs_mount()
4791 kfree(cifs_sb->origin_fullpath); in cifs_mount()
4793 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4797 int cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *vol) in cifs_mount() argument
4805 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon); in cifs_mount()
4810 rc = is_path_remote(cifs_sb, vol, xid, server, tcon); in cifs_mount()
4819 return mount_setup_tlink(cifs_sb, ses, tcon); in cifs_mount()
4822 mount_put_conns(cifs_sb, xid, server, ses, tcon); in cifs_mount()
4997 cifs_umount(struct cifs_sb_info *cifs_sb) in cifs_umount() argument
4999 struct rb_root *root = &cifs_sb->tlink_tree; in cifs_umount()
5003 cancel_delayed_work_sync(&cifs_sb->prune_tlinks); in cifs_umount()
5005 spin_lock(&cifs_sb->tlink_tree_lock); in cifs_umount()
5012 spin_unlock(&cifs_sb->tlink_tree_lock); in cifs_umount()
5014 spin_lock(&cifs_sb->tlink_tree_lock); in cifs_umount()
5016 spin_unlock(&cifs_sb->tlink_tree_lock); in cifs_umount()
5018 kfree(cifs_sb->mountdata); in cifs_umount()
5019 kfree(cifs_sb->prepath); in cifs_umount()
5021 dfs_cache_del_vol(cifs_sb->origin_fullpath); in cifs_umount()
5022 kfree(cifs_sb->origin_fullpath); in cifs_umount()
5024 call_rcu(&cifs_sb->rcu, delayed_free); in cifs_umount()
5099 cifs_construct_tcon(struct cifs_sb_info *cifs_sb, kuid_t fsuid) in cifs_construct_tcon() argument
5102 struct cifs_tcon *master_tcon = cifs_sb_master_tcon(cifs_sb); in cifs_construct_tcon()
5111 vol_info->local_nls = cifs_sb->local_nls; in cifs_construct_tcon()
5165 cifs_sb_master_tcon(struct cifs_sb_info *cifs_sb) in cifs_sb_master_tcon() argument
5167 return tlink_tcon(cifs_sb_master_tlink(cifs_sb)); in cifs_sb_master_tcon()
5228 cifs_sb_tlink(struct cifs_sb_info *cifs_sb) in cifs_sb_tlink() argument
5234 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER)) in cifs_sb_tlink()
5235 return cifs_get_tlink(cifs_sb_master_tlink(cifs_sb)); in cifs_sb_tlink()
5237 spin_lock(&cifs_sb->tlink_tree_lock); in cifs_sb_tlink()
5238 tlink = tlink_rb_search(&cifs_sb->tlink_tree, fsuid); in cifs_sb_tlink()
5241 spin_unlock(&cifs_sb->tlink_tree_lock); in cifs_sb_tlink()
5253 spin_lock(&cifs_sb->tlink_tree_lock); in cifs_sb_tlink()
5255 tlink = tlink_rb_search(&cifs_sb->tlink_tree, fsuid); in cifs_sb_tlink()
5258 spin_unlock(&cifs_sb->tlink_tree_lock); in cifs_sb_tlink()
5263 tlink_rb_insert(&cifs_sb->tlink_tree, tlink); in cifs_sb_tlink()
5264 spin_unlock(&cifs_sb->tlink_tree_lock); in cifs_sb_tlink()
5288 tlink->tl_tcon = cifs_construct_tcon(cifs_sb, fsuid); in cifs_sb_tlink()
5307 struct cifs_sb_info *cifs_sb = container_of(work, struct cifs_sb_info, in cifs_prune_tlinks() local
5309 struct rb_root *root = &cifs_sb->tlink_tree; in cifs_prune_tlinks()
5321 spin_lock(&cifs_sb->tlink_tree_lock); in cifs_prune_tlinks()
5337 spin_unlock(&cifs_sb->tlink_tree_lock); in cifs_prune_tlinks()
5339 spin_lock(&cifs_sb->tlink_tree_lock); in cifs_prune_tlinks()
5341 spin_unlock(&cifs_sb->tlink_tree_lock); in cifs_prune_tlinks()
5343 queue_delayed_work(cifsiod_wq, &cifs_sb->prune_tlinks, in cifs_prune_tlinks()