diff options
author | Igor Mammedov <niallain@gmail.com> | 2008-05-16 05:10:32 -0400 |
---|---|---|
committer | Steve French <sfrench@us.ibm.com> | 2008-05-16 11:23:28 -0400 |
commit | de2db8d790b058fcd75d603780b913bd824972b3 (patch) | |
tree | f90f45de971260836de6c53d3af3083e9cd4b103 /fs/cifs | |
parent | 95b1cb90b79896c4bf5ea484bee2b41d7d293f43 (diff) |
Fixed DFS code to work with new 'build_path_from_dentry', that returns full path if share in the dfs, now.
Signed-off-by: Igor Mammedov <niallain@gmail.com>
Signed-off-by: Steve French <sfrench@us.ibm.com>
Diffstat (limited to 'fs/cifs')
-rw-r--r-- | fs/cifs/cifs_dfs_ref.c | 49 |
1 files changed, 1 insertions, 48 deletions
diff --git a/fs/cifs/cifs_dfs_ref.c b/fs/cifs/cifs_dfs_ref.c index f6fdecf6598c..d82374c9e329 100644 --- a/fs/cifs/cifs_dfs_ref.c +++ b/fs/cifs/cifs_dfs_ref.c | |||
@@ -219,53 +219,6 @@ static struct vfsmount *cifs_dfs_do_refmount(const struct vfsmount *mnt_parent, | |||
219 | 219 | ||
220 | } | 220 | } |
221 | 221 | ||
222 | static char *build_full_dfs_path_from_dentry(struct dentry *dentry) | ||
223 | { | ||
224 | char *full_path = NULL; | ||
225 | char *search_path; | ||
226 | char *tmp_path; | ||
227 | size_t l_max_len; | ||
228 | struct cifs_sb_info *cifs_sb; | ||
229 | |||
230 | if (dentry->d_inode == NULL) | ||
231 | return NULL; | ||
232 | |||
233 | cifs_sb = CIFS_SB(dentry->d_inode->i_sb); | ||
234 | |||
235 | if (cifs_sb->tcon == NULL) | ||
236 | return NULL; | ||
237 | |||
238 | search_path = build_path_from_dentry(dentry); | ||
239 | if (search_path == NULL) | ||
240 | return NULL; | ||
241 | |||
242 | if (cifs_sb->tcon->Flags & SMB_SHARE_IS_IN_DFS) { | ||
243 | int i; | ||
244 | /* we should use full path name for correct working with DFS */ | ||
245 | l_max_len = strnlen(cifs_sb->tcon->treeName, MAX_TREE_SIZE+1) + | ||
246 | strnlen(search_path, MAX_PATHCONF) + 1; | ||
247 | tmp_path = kmalloc(l_max_len, GFP_KERNEL); | ||
248 | if (tmp_path == NULL) { | ||
249 | kfree(search_path); | ||
250 | return NULL; | ||
251 | } | ||
252 | strncpy(tmp_path, cifs_sb->tcon->treeName, l_max_len); | ||
253 | tmp_path[l_max_len-1] = 0; | ||
254 | if (cifs_sb->mnt_cifs_flags & CIFS_MOUNT_POSIX_PATHS) | ||
255 | for (i = 0; i < l_max_len; i++) { | ||
256 | if (tmp_path[i] == '\\') | ||
257 | tmp_path[i] = '/'; | ||
258 | } | ||
259 | strncat(tmp_path, search_path, l_max_len - strlen(tmp_path)); | ||
260 | |||
261 | full_path = tmp_path; | ||
262 | kfree(search_path); | ||
263 | } else { | ||
264 | full_path = search_path; | ||
265 | } | ||
266 | return full_path; | ||
267 | } | ||
268 | |||
269 | static int add_mount_helper(struct vfsmount *newmnt, struct nameidata *nd, | 222 | static int add_mount_helper(struct vfsmount *newmnt, struct nameidata *nd, |
270 | struct list_head *mntlist) | 223 | struct list_head *mntlist) |
271 | { | 224 | { |
@@ -333,7 +286,7 @@ cifs_dfs_follow_mountpoint(struct dentry *dentry, struct nameidata *nd) | |||
333 | goto out_err; | 286 | goto out_err; |
334 | } | 287 | } |
335 | 288 | ||
336 | full_path = build_full_dfs_path_from_dentry(dentry); | 289 | full_path = build_path_from_dentry(dentry); |
337 | if (full_path == NULL) { | 290 | if (full_path == NULL) { |
338 | rc = -ENOMEM; | 291 | rc = -ENOMEM; |
339 | goto out_err; | 292 | goto out_err; |