Commit 837e3a1b authored by Ronnie Sahlberg's avatar Ronnie Sahlberg Committed by Steve French

cifs: rename dup_vol to smb3_fs_context_dup and move it into fs_context.c

Continue restructuring needed for support of new mount API
Signed-off-by: default avatarRonnie Sahlberg <lsahlber@redhat.com>
Signed-off-by: default avatarSteve French <stfrench@microsoft.com>
parent 3fa1c6d1
...@@ -1141,64 +1141,6 @@ int dfs_cache_get_tgt_referral(const char *path, ...@@ -1141,64 +1141,6 @@ int dfs_cache_get_tgt_referral(const char *path,
return rc; return rc;
} }
static int dup_vol(struct smb3_fs_context *ctx, struct smb3_fs_context *new)
{
memcpy(new, ctx, sizeof(*new));
if (ctx->username) {
new->username = kstrndup(ctx->username, strlen(ctx->username),
GFP_KERNEL);
if (!new->username)
return -ENOMEM;
}
if (ctx->password) {
new->password = kstrndup(ctx->password, strlen(ctx->password),
GFP_KERNEL);
if (!new->password)
goto err_free_username;
}
if (ctx->UNC) {
cifs_dbg(FYI, "%s: ctx->UNC: %s\n", __func__, ctx->UNC);
new->UNC = kstrndup(ctx->UNC, strlen(ctx->UNC), GFP_KERNEL);
if (!new->UNC)
goto err_free_password;
}
if (ctx->domainname) {
new->domainname = kstrndup(ctx->domainname,
strlen(ctx->domainname), GFP_KERNEL);
if (!new->domainname)
goto err_free_unc;
}
if (ctx->iocharset) {
new->iocharset = kstrndup(ctx->iocharset,
strlen(ctx->iocharset), GFP_KERNEL);
if (!new->iocharset)
goto err_free_domainname;
}
if (ctx->prepath) {
cifs_dbg(FYI, "%s: ctx->prepath: %s\n", __func__, ctx->prepath);
new->prepath = kstrndup(ctx->prepath, strlen(ctx->prepath),
GFP_KERNEL);
if (!new->prepath)
goto err_free_iocharset;
}
return 0;
err_free_iocharset:
kfree(new->iocharset);
err_free_domainname:
kfree(new->domainname);
err_free_unc:
kfree(new->UNC);
err_free_password:
kfree_sensitive(new->password);
err_free_username:
kfree(new->username);
kfree(new);
return -ENOMEM;
}
/** /**
* dfs_cache_add_vol - add a cifs volume during mount() that will be handled by * dfs_cache_add_vol - add a cifs volume during mount() that will be handled by
* DFS cache refresh worker. * DFS cache refresh worker.
...@@ -1229,7 +1171,7 @@ int dfs_cache_add_vol(char *mntdata, struct smb3_fs_context *ctx, const char *fu ...@@ -1229,7 +1171,7 @@ int dfs_cache_add_vol(char *mntdata, struct smb3_fs_context *ctx, const char *fu
goto err_free_vi; goto err_free_vi;
} }
rc = dup_vol(ctx, &vi->ctx); rc = smb3_fs_context_dup(&vi->ctx, ctx);
if (rc) if (rc)
goto err_free_fullpath; goto err_free_fullpath;
......
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
*/ */
#include "cifsglob.h" #include "cifsglob.h"
#include "cifsproto.h"
#include "cifs_debug.h" #include "cifs_debug.h"
#include "fs_context.h" #include "fs_context.h"
...@@ -219,3 +220,43 @@ cifs_parse_cache_flavor(char *value, struct smb3_fs_context *ctx) ...@@ -219,3 +220,43 @@ cifs_parse_cache_flavor(char *value, struct smb3_fs_context *ctx)
} }
return 0; return 0;
} }
#define DUP_CTX_STR(field) \
do { \
if (ctx->field) { \
new_ctx->field = kstrdup(ctx->field, GFP_ATOMIC); \
if (new_ctx->field == NULL) { \
cifs_cleanup_volume_info_contents(new_ctx); \
return -ENOMEM; \
} \
} \
} while (0)
int
smb3_fs_context_dup(struct smb3_fs_context *new_ctx, struct smb3_fs_context *ctx)
{
int rc = 0;
memcpy(new_ctx, ctx, sizeof(*ctx));
new_ctx->prepath = NULL;
new_ctx->local_nls = NULL;
new_ctx->nodename = NULL;
new_ctx->username = NULL;
new_ctx->password = NULL;
new_ctx->domainname = NULL;
new_ctx->UNC = NULL;
new_ctx->iocharset = NULL;
/*
* Make sure to stay in sync with cifs_cleanup_volume_info_contents()
*/
DUP_CTX_STR(prepath);
DUP_CTX_STR(username);
DUP_CTX_STR(password);
DUP_CTX_STR(UNC);
DUP_CTX_STR(domainname);
DUP_CTX_STR(nodename);
DUP_CTX_STR(iocharset);
return rc;
}
...@@ -152,6 +152,7 @@ struct smb3_fs_context { ...@@ -152,6 +152,7 @@ struct smb3_fs_context {
bool rootfs:1; /* if it's a SMB root file system */ bool rootfs:1; /* if it's a SMB root file system */
}; };
int cifs_parse_security_flavors(char *value, struct smb3_fs_context *ctx); extern int cifs_parse_security_flavors(char *value, struct smb3_fs_context *ctx);
extern int smb3_fs_context_dup(struct smb3_fs_context *new_ctx, struct smb3_fs_context *ctx);
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment