diff options
Diffstat (limited to 'fs/cifs/inode.c')
-rw-r--r-- | fs/cifs/inode.c | 19 |
1 files changed, 6 insertions, 13 deletions
diff --git a/fs/cifs/inode.c b/fs/cifs/inode.c index 5e278d37912b..53ea6250a51d 100644 --- a/fs/cifs/inode.c +++ b/fs/cifs/inode.c | |||
@@ -735,10 +735,10 @@ static const struct inode_operations cifs_ipc_inode_ops = { | |||
735 | .lookup = cifs_lookup, | 735 | .lookup = cifs_lookup, |
736 | }; | 736 | }; |
737 | 737 | ||
738 | char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb, | 738 | char *cifs_build_path_to_root(struct smb_vol *vol, struct cifs_sb_info *cifs_sb, |
739 | struct cifsTconInfo *tcon) | 739 | struct cifsTconInfo *tcon) |
740 | { | 740 | { |
741 | int pplen = cifs_sb->prepathlen; | 741 | int pplen = vol->prepath ? strlen(vol->prepath) : 0; |
742 | int dfsplen; | 742 | int dfsplen; |
743 | char *full_path = NULL; | 743 | char *full_path = NULL; |
744 | 744 | ||
@@ -772,7 +772,7 @@ char *cifs_build_path_to_root(struct cifs_sb_info *cifs_sb, | |||
772 | } | 772 | } |
773 | } | 773 | } |
774 | } | 774 | } |
775 | strncpy(full_path + dfsplen, cifs_sb->prepath, pplen); | 775 | strncpy(full_path + dfsplen, vol->prepath, pplen); |
776 | full_path[dfsplen + pplen] = 0; /* add trailing null */ | 776 | full_path[dfsplen + pplen] = 0; /* add trailing null */ |
777 | return full_path; | 777 | return full_path; |
778 | } | 778 | } |
@@ -884,19 +884,13 @@ struct inode *cifs_root_iget(struct super_block *sb) | |||
884 | struct cifs_sb_info *cifs_sb = CIFS_SB(sb); | 884 | struct cifs_sb_info *cifs_sb = CIFS_SB(sb); |
885 | struct inode *inode = NULL; | 885 | struct inode *inode = NULL; |
886 | long rc; | 886 | long rc; |
887 | char *full_path; | ||
888 | struct cifsTconInfo *tcon = cifs_sb_master_tcon(cifs_sb); | 887 | struct cifsTconInfo *tcon = cifs_sb_master_tcon(cifs_sb); |
889 | 888 | ||
890 | full_path = cifs_build_path_to_root(cifs_sb, tcon); | ||
891 | if (full_path == NULL) | ||
892 | return ERR_PTR(-ENOMEM); | ||
893 | |||
894 | xid = GetXid(); | 889 | xid = GetXid(); |
895 | if (tcon->unix_ext) | 890 | if (tcon->unix_ext) |
896 | rc = cifs_get_inode_info_unix(&inode, full_path, sb, xid); | 891 | rc = cifs_get_inode_info_unix(&inode, "", sb, xid); |
897 | else | 892 | else |
898 | rc = cifs_get_inode_info(&inode, full_path, NULL, sb, | 893 | rc = cifs_get_inode_info(&inode, "", NULL, sb, xid, NULL); |
899 | xid, NULL); | ||
900 | 894 | ||
901 | if (!inode) { | 895 | if (!inode) { |
902 | inode = ERR_PTR(rc); | 896 | inode = ERR_PTR(rc); |
@@ -922,7 +916,6 @@ struct inode *cifs_root_iget(struct super_block *sb) | |||
922 | } | 916 | } |
923 | 917 | ||
924 | out: | 918 | out: |
925 | kfree(full_path); | ||
926 | /* can not call macro FreeXid here since in a void func | 919 | /* can not call macro FreeXid here since in a void func |
927 | * TODO: This is no longer true | 920 | * TODO: This is no longer true |
928 | */ | 921 | */ |