Lines Matching refs:cifs_sb

341 				       struct cifs_sb_info *cifs_sb,
347 if (!cifs_sb || !cifs_sb->origin_fullpath)
358 cifs_dbg(FYI, "%s: UNC: %s\n", __func__, cifs_sb->origin_fullpath);
372 static inline int reconn_setup_dfs_targets(struct cifs_sb_info *cifs_sb,
375 if (!cifs_sb->origin_fullpath)
377 return dfs_cache_noreq_find(cifs_sb->origin_fullpath + 1, NULL, tl);
400 struct cifs_sb_info *cifs_sb = NULL;
416 cifs_sb = CIFS_SB(sb);
417 rc = reconn_setup_dfs_targets(cifs_sb, &tgt_list);
419 cifs_sb = NULL;
526 reconn_set_next_dfs_target(server, cifs_sb, &tgt_list, &tgt_it);
555 rc = dfs_cache_noreq_update_tgthint(cifs_sb->origin_fullpath + 1,
561 rc = dfs_cache_update_vol(cifs_sb->origin_fullpath, server);
3449 struct cifs_sb_info *new = mnt_data->cifs_sb;
3492 struct cifs_sb_info *new = mnt_data->cifs_sb;
3511 struct cifs_sb_info *cifs_sb;
3519 cifs_sb = CIFS_SB(sb);
3520 tlink = cifs_get_tlink(cifs_sb_master_tlink(cifs_sb));
3819 struct cifs_sb_info *cifs_sb, struct smb_vol *vol_info)
3873 if (cifs_sb)
3874 cifs_sb->mnt_cifs_flags |=
3882 if (cifs_sb)
3883 cifs_sb->mnt_cifs_flags |=
3919 struct cifs_sb_info *cifs_sb)
3921 INIT_DELAYED_WORK(&cifs_sb->prune_tlinks, cifs_prune_tlinks);
3923 spin_lock_init(&cifs_sb->tlink_tree_lock);
3924 cifs_sb->tlink_tree = RB_ROOT;
3926 cifs_sb->bsize = pvolume_info->bsize;
3931 cifs_sb->rsize = pvolume_info->rsize;
3932 cifs_sb->wsize = pvolume_info->wsize;
3934 cifs_sb->mnt_uid = pvolume_info->linux_uid;
3935 cifs_sb->mnt_gid = pvolume_info->linux_gid;
3936 cifs_sb->mnt_file_mode = pvolume_info->file_mode;
3937 cifs_sb->mnt_dir_mode = pvolume_info->dir_mode;
3939 cifs_sb->mnt_file_mode, cifs_sb->mnt_dir_mode);
3941 cifs_sb->actimeo = pvolume_info->actimeo;
3942 cifs_sb->local_nls = pvolume_info->local_nls;
3945 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_DFS;
3947 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_PERM;
3949 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SET_UID;
3951 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UID_FROM_ACL;
3953 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_SERVER_INUM;
3955 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MAP_SFM_CHR;
3957 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MAP_SPECIAL_CHR;
3959 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_XATTR;
3961 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_UNX_EMUL;
3963 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_BRL;
3965 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NO_HANDLE_CACHE;
3967 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NOSSYNC;
3969 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_NOPOSIXBRL;
3971 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_RWPIDFORWARD;
3973 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MODE_FROM_SID;
3975 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_ACL;
3977 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_BACKUPUID;
3978 cifs_sb->mnt_backupuid = pvolume_info->backupuid;
3981 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_CIFS_BACKUPGID;
3982 cifs_sb->mnt_backupgid = pvolume_info->backupgid;
3985 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_UID;
3987 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_OVERR_GID;
3989 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DYNPERM;
3991 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_FSCACHE;
3993 cifs_sb->mnt_cifs_flags |= (CIFS_MOUNT_MULTIUSER |
3996 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_STRICT_IO;
3999 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_DIRECT_IO;
4003 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_RO_CACHE;
4006 cifs_sb->mnt_cifs_flags |= (CIFS_MOUNT_RO_CACHE |
4024 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_MF_SYMLINKS;
4031 cifs_sb->prepath = kstrdup(pvolume_info->prepath, GFP_KERNEL);
4032 if (cifs_sb->prepath == NULL)
4034 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH;
4061 static inline void mount_put_conns(struct cifs_sb_info *cifs_sb,
4074 cifs_sb->mnt_cifs_flags &= ~CIFS_MOUNT_POSIX_PATHS;
4079 static int mount_get_conns(struct smb_vol *vol, struct cifs_sb_info *cifs_sb,
4130 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_POSIX_PATHS;
4138 reset_cifs_unix_caps(*xid, tcon, cifs_sb, vol);
4148 server->ops->qfs_tcon(*xid, tcon, cifs_sb);
4149 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_RO_CACHE) {
4153 else if ((cifs_sb->mnt_cifs_flags &
4160 cifs_sb->wsize = server->ops->negotiate_wsize(tcon, vol);
4161 cifs_sb->rsize = server->ops->negotiate_rsize(tcon, vol);
4166 static int mount_setup_tlink(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses,
4182 cifs_sb->master_tlink = tlink;
4183 spin_lock(&cifs_sb->tlink_tree_lock);
4184 tlink_rb_insert(&cifs_sb->tlink_tree, tlink);
4185 spin_unlock(&cifs_sb->tlink_tree_lock);
4187 queue_delayed_work(cifsiod_wq, &cifs_sb->prune_tlinks,
4199 const struct cifs_sb_info *cifs_sb, bool useppath)
4217 *pos = CIFS_DIR_SEP(cifs_sb);
4223 convert_delimiter(full_path, CIFS_DIR_SEP(cifs_sb));
4229 * expand_dfs_referral - Perform a dfs referral query and update the cifs_sb
4232 * If a referral is found, cifs_sb->mountdata will be (re-)allocated
4241 struct smb_vol *volume_info, struct cifs_sb_info *cifs_sb,
4248 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_DFS)
4251 full_path = build_unc_path_to_root(volume_info, cifs_sb, true);
4255 rc = dfs_cache_find(xid, ses, cifs_sb->local_nls, cifs_remap(cifs_sb),
4260 mdata = cifs_compose_mount_options(cifs_sb->mountdata,
4274 kfree(cifs_sb->mountdata);
4275 cifs_sb->mountdata = mdata;
4319 struct cifs_sb_info *cifs_sb, struct smb_vol *vol, unsigned int *xid,
4334 mdata = cifs_compose_mount_options(cifs_sb->mountdata, full_path + 1, &ref, &fake_devname);
4354 mount_put_conns(cifs_sb, *xid, *server, *ses, *tcon);
4355 rc = mount_get_conns(&fake_vol, cifs_sb, xid, server, ses,
4369 static int do_dfs_failover(const char *path, const char *full_path, struct cifs_sb_info *cifs_sb,
4378 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_NO_DFS)
4391 rc = setup_dfs_tgt_conn(path, full_path, tgt_it, cifs_sb, vol, xid, server, ses,
4402 cifs_sb->local_nls,
4403 cifs_remap(cifs_sb), path,
4473 struct cifs_sb_info *cifs_sb,
4482 sep = CIFS_DIR_SEP(cifs_sb);
4485 rc = server->ops->is_path_accessible(xid, tcon, cifs_sb, "");
4509 rc = server->ops->is_path_accessible(xid, tcon, cifs_sb,
4520 static int is_path_remote(struct cifs_sb_info *cifs_sb, struct smb_vol *vol,
4534 full_path = cifs_build_path_to_root(vol, cifs_sb, tcon,
4541 rc = server->ops->is_path_accessible(xid, tcon, cifs_sb,
4550 cifs_sb, full_path, tcon->Flags & SMB_SHARE_IS_IN_DFS);
4553 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH;
4563 static void set_root_ses(struct cifs_sb_info *cifs_sb, struct cifs_ses *ses,
4570 ses->tcon_ipc->remap = cifs_remap(cifs_sb);
4583 static int check_dfs_prepath(struct cifs_sb_info *cifs_sb, struct smb_vol *vol,
4588 char sep = CIFS_DIR_SEP(cifs_sb), tmp;
4594 path = cifs_build_path_to_root(vol, cifs_sb, tcon, added_treename);
4623 rc = server->ops->is_path_accessible(xid, tcon, cifs_sb, path);
4632 npath = build_unc_path_to_root(&v, cifs_sb, true);
4637 npath = build_unc_path_to_root(&v, cifs_sb, true);
4653 int cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *vol)
4665 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon);
4673 if (dfs_cache_find(xid, ses, cifs_sb->local_nls, cifs_remap(cifs_sb), vol->UNC + 1, NULL,
4679 rc = is_path_remote(cifs_sb, vol, xid, server, tcon);
4686 mntdata = kstrndup(cifs_sb->mountdata, strlen(cifs_sb->mountdata), GFP_KERNEL);
4692 ref_path = build_unc_path_to_root(vol, cifs_sb, false);
4699 set_root_ses(cifs_sb, ses, &root_ses);
4703 full_path = build_unc_path_to_root(vol, cifs_sb, !!count);
4710 oldmnt = cifs_sb->mountdata;
4711 rc = expand_dfs_referral(xid, root_ses, vol, cifs_sb, ref_path + 1);
4715 if (oldmnt != cifs_sb->mountdata) {
4716 mount_put_conns(cifs_sb, xid, server, ses, tcon);
4717 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon);
4721 rc = do_dfs_failover(ref_path + 1, full_path, cifs_sb, vol, root_ses, &xid,
4731 set_root_ses(cifs_sb, ses, &root_ses);
4734 rc = check_dfs_prepath(cifs_sb, vol, xid, server, tcon, &ref_path);
4749 * For DFS root mounts, the prefix path (cifs_sb->prepath) is preserved during reconnect so
4750 * only the root path is set in cifs_sb->origin_fullpath and tcon->dfs_path. And for DFS
4754 cifs_sb->origin_fullpath = kstrndup(full_path, strlen(full_path), GFP_KERNEL);
4755 if (!cifs_sb->origin_fullpath) {
4762 tcon->remap = cifs_remap(cifs_sb);
4766 rc = dfs_cache_add_vol(mntdata, vol, cifs_sb->origin_fullpath);
4774 cifs_autodisable_serverino(cifs_sb);
4779 cifs_sb->mnt_cifs_flags |= CIFS_MOUNT_USE_PREFIX_PATH;
4780 kfree(cifs_sb->prepath);
4781 cifs_sb->prepath = vol->prepath;
4787 return mount_setup_tlink(cifs_sb, ses, tcon);
4793 kfree(cifs_sb->origin_fullpath);
4795 mount_put_conns(cifs_sb, xid, server, ses, tcon);
4799 int cifs_mount(struct cifs_sb_info *cifs_sb, struct smb_vol *vol)
4807 rc = mount_get_conns(vol, cifs_sb, &xid, &server, &ses, &tcon);
4812 rc = is_path_remote(cifs_sb, vol, xid, server, tcon);
4821 return mount_setup_tlink(cifs_sb, ses, tcon);
4824 mount_put_conns(cifs_sb, xid, server, ses, tcon);
4999 cifs_umount(struct cifs_sb_info *cifs_sb)
5001 struct rb_root *root = &cifs_sb->tlink_tree;
5005 cancel_delayed_work_sync(&cifs_sb->prune_tlinks);
5007 spin_lock(&cifs_sb->tlink_tree_lock);
5014 spin_unlock(&cifs_sb->tlink_tree_lock);
5016 spin_lock(&cifs_sb->tlink_tree_lock);
5018 spin_unlock(&cifs_sb->tlink_tree_lock);
5020 kfree(cifs_sb->mountdata);
5021 kfree(cifs_sb->prepath);
5023 dfs_cache_del_vol(cifs_sb->origin_fullpath);
5024 kfree(cifs_sb->origin_fullpath);
5026 call_rcu(&cifs_sb->rcu, delayed_free);
5101 cifs_construct_tcon(struct cifs_sb_info *cifs_sb, kuid_t fsuid)
5104 struct cifs_tcon *master_tcon = cifs_sb_master_tcon(cifs_sb);
5113 vol_info->local_nls = cifs_sb->local_nls;
5167 cifs_sb_master_tcon(struct cifs_sb_info *cifs_sb)
5169 return tlink_tcon(cifs_sb_master_tlink(cifs_sb));
5214 * Find or construct an appropriate tcon given a cifs_sb and the fsuid of the
5230 cifs_sb_tlink(struct cifs_sb_info *cifs_sb)
5236 if (!(cifs_sb->mnt_cifs_flags & CIFS_MOUNT_MULTIUSER))
5237 return cifs_get_tlink(cifs_sb_master_tlink(cifs_sb));
5239 spin_lock(&cifs_sb->tlink_tree_lock);
5240 tlink = tlink_rb_search(&cifs_sb->tlink_tree, fsuid);
5243 spin_unlock(&cifs_sb->tlink_tree_lock);
5255 spin_lock(&cifs_sb->tlink_tree_lock);
5257 tlink = tlink_rb_search(&cifs_sb->tlink_tree, fsuid);
5260 spin_unlock(&cifs_sb->tlink_tree_lock);
5265 tlink_rb_insert(&cifs_sb->tlink_tree, tlink);
5266 spin_unlock(&cifs_sb->tlink_tree_lock);
5290 tlink->tl_tcon = cifs_construct_tcon(cifs_sb, fsuid);
5309 struct cifs_sb_info *cifs_sb = container_of(work, struct cifs_sb_info,
5311 struct rb_root *root = &cifs_sb->tlink_tree;
5323 spin_lock(&cifs_sb->tlink_tree_lock);
5339 spin_unlock(&cifs_sb->tlink_tree_lock);
5341 spin_lock(&cifs_sb->tlink_tree_lock);
5343 spin_unlock(&cifs_sb->tlink_tree_lock);
5345 queue_delayed_work(cifsiod_wq, &cifs_sb->prune_tlinks,