mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 15:10:38 +00:00
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: Ronnie Sahlberg <lsahlber@redhat.com> Signed-off-by: Steve French <stfrench@microsoft.com>
This commit is contained in:
parent
3fa1c6d1b8
commit
837e3a1bbf
@ -1141,64 +1141,6 @@ out_unlock:
|
||||
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
|
||||
|
Loading…
x
Reference in New Issue
Block a user