aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--fs/cifs/inode.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c
index bc673c8c1e6b..e1031b9e2c55 100644
--- a/fs/cifs/inode.c
+++ b/fs/cifs/inode.c
@@ -161,12 +161,14 @@ static void cifs_unix_info_to_inode(struct inode *inode,
161 spin_unlock(&inode->i_lock); 161 spin_unlock(&inode->i_lock);
162} 162}
163 163
164static const unsigned char *cifs_get_search_path(struct cifsTconInfo *pTcon, 164static const unsigned char *cifs_get_search_path(struct cifs_sb_info *cifs_sb,
165 const char *search_path) 165 const char *search_path)
166{ 166{
167 int tree_len; 167 int tree_len;
168 int path_len; 168 int path_len;
169 int i;
169 char *tmp_path; 170 char *tmp_path;
171 struct cifsTconInfo *pTcon = cifs_sb->tcon;
170 172
171 if (!(pTcon->Flags & SMB_SHARE_IS_IN_DFS)) 173 if (!(pTcon->Flags & SMB_SHARE_IS_IN_DFS))
172 return search_path; 174 return search_path;
@@ -180,6 +182,11 @@ static const unsigned char *cifs_get_search_path(struct cifsTconInfo *pTcon,
180 return search_path; 182 return search_path;
181 183
182 strncpy(tmp_path, pTcon->treeName, tree_len); 184 strncpy(tmp_path, pTcon->treeName, tree_len);
185 if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS)
186 for (i = 0; i < tree_len; i++) {
187 if (tmp_path[i] == '\\')
188 tmp_path[i] = '/';
189 }
183 strncpy(tmp_path+tree_len, search_path, path_len); 190 strncpy(tmp_path+tree_len, search_path, path_len);
184 tmp_path[tree_len+path_len] = 0; 191 tmp_path[tree_len+path_len] = 0;
185 return tmp_path; 192 return tmp_path;
@@ -199,7 +206,7 @@ int cifs_get_inode_info_unix(struct inode **pinode,
199 pTcon = cifs_sb->tcon; 206 pTcon = cifs_sb->tcon;
200 cFYI(1, ("Getting info on %s", search_path)); 207 cFYI(1, ("Getting info on %s", search_path));
201 208
202 full_path = cifs_get_search_path(pTcon, search_path); 209 full_path = cifs_get_search_path(cifs_sb, search_path);
203 210
204try_again_CIFSSMBUnixQPathInfo: 211try_again_CIFSSMBUnixQPathInfo:
205 /* could have done a find first instead but this returns more info */ 212 /* could have done a find first instead but this returns more info */
@@ -402,7 +409,7 @@ int cifs_get_inode_info(struct inode **pinode,
402 return -ENOMEM; 409 return -ENOMEM;
403 pfindData = (FILE_ALL_INFO *)buf; 410 pfindData = (FILE_ALL_INFO *)buf;
404 411
405 full_path = cifs_get_search_path(pTcon, search_path); 412 full_path = cifs_get_search_path(cifs_sb, search_path);
406 413
407try_again_CIFSSMBQPathInfo: 414try_again_CIFSSMBQPathInfo:
408 /* could do find first instead but this returns more info */ 415 /* could do find first instead but this returns more info */