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,
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 refresh worker.
......@@ -1229,7 +1171,7 @@ int dfs_cache_add_vol(char *mntdata, struct smb3_fs_context *ctx, const char *fu
goto err_free_vi;
}
rc = dup_vol(ctx, &vi->ctx);
rc = smb3_fs_context_dup(&vi->ctx, ctx);
if (rc)
goto err_free_fullpath;
......
......@@ -7,6 +7,7 @@
*/
#include "cifsglob.h"
#include "cifsproto.h"
#include "cifs_debug.h"
#include "fs_context.h"
......@@ -219,3 +220,43 @@ cifs_parse_cache_flavor(char *value, struct smb3_fs_context *ctx)
}
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 {
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
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