cifs: use echo_interval even when connection not ready.
[linux-2.6-microblaze.git] / fs / cifs / cifs_dfs_ref.c
index 6b1ce4e..c87c37c 100644 (file)
@@ -270,7 +270,7 @@ static struct vfsmount *cifs_dfs_do_mount(struct dentry *mntpt,
        char *mountdata;
        char *devname;
 
-       devname = kstrndup(fullpath, strlen(fullpath), GFP_KERNEL);
+       devname = kstrdup(fullpath, GFP_KERNEL);
        if (!devname)
                return ERR_PTR(-ENOMEM);
 
@@ -302,6 +302,7 @@ static struct vfsmount *cifs_dfs_do_automount(struct dentry *mntpt)
        struct cifs_sb_info *cifs_sb;
        struct cifs_ses *ses;
        struct cifs_tcon *tcon;
+       void *page;
        char *full_path, *root_path;
        unsigned int xid;
        int rc;
@@ -324,10 +325,13 @@ static struct vfsmount *cifs_dfs_do_automount(struct dentry *mntpt)
                goto cdda_exit;
        }
 
+       page = alloc_dentry_path();
        /* always use tree name prefix */
-       full_path = build_path_from_dentry_optional_prefix(mntpt, true);
-       if (full_path == NULL)
-               goto cdda_exit;
+       full_path = build_path_from_dentry_optional_prefix(mntpt, page, true);
+       if (IS_ERR(full_path)) {
+               mnt = ERR_CAST(full_path);
+               goto free_full_path;
+       }
 
        convert_delimiter(full_path, '\\');
 
@@ -385,7 +389,7 @@ static struct vfsmount *cifs_dfs_do_automount(struct dentry *mntpt)
 free_root_path:
        kfree(root_path);
 free_full_path:
-       kfree(full_path);
+       free_dentry_path(page);
 cdda_exit:
        cifs_dbg(FYI, "leaving %s\n" , __func__);
        return mnt;