change the calling conventions for vfs_parse_fs_string()
Absolute majority of callers are passing the 4th argument equal to strlen() of the 3rd one. Drop the v_size argument, add vfs_parse_fs_qstr() for the cases that want independent length. Reviewed-by: Christian Brauner <brauner@kernel.org> Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
parent
8f5ae30d69
commit
b28f9eba12
|
@ -504,10 +504,18 @@ returned.
|
||||||
clear the pointer, but then becomes responsible for disposing of the
|
clear the pointer, but then becomes responsible for disposing of the
|
||||||
object.
|
object.
|
||||||
|
|
||||||
|
* ::
|
||||||
|
|
||||||
|
int vfs_parse_fs_qstr(struct fs_context *fc, const char *key,
|
||||||
|
const struct qstr *value);
|
||||||
|
|
||||||
|
A wrapper around vfs_parse_fs_param() that copies the value string it is
|
||||||
|
passed.
|
||||||
|
|
||||||
* ::
|
* ::
|
||||||
|
|
||||||
int vfs_parse_fs_string(struct fs_context *fc, const char *key,
|
int vfs_parse_fs_string(struct fs_context *fc, const char *key,
|
||||||
const char *value, size_t v_size);
|
const char *value);
|
||||||
|
|
||||||
A wrapper around vfs_parse_fs_param() that copies the value string it is
|
A wrapper around vfs_parse_fs_param() that copies the value string it is
|
||||||
passed.
|
passed.
|
||||||
|
|
|
@ -1285,3 +1285,15 @@ rather than a VMA, as the VMA at this stage is not yet valid.
|
||||||
The vm_area_desc provides the minimum required information for a filesystem
|
The vm_area_desc provides the minimum required information for a filesystem
|
||||||
to initialise state upon memory mapping of a file-backed region, and output
|
to initialise state upon memory mapping of a file-backed region, and output
|
||||||
parameters for the file system to set this state.
|
parameters for the file system to set this state.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
**mandatory**
|
||||||
|
|
||||||
|
Calling conventions for vfs_parse_fs_string() have changed; it does *not*
|
||||||
|
take length anymore (value ? strlen(value) : 0 is used). If you want
|
||||||
|
a different length, use
|
||||||
|
|
||||||
|
vfs_parse_fs_qstr(fc, key, &QSTR_LEN(value, len))
|
||||||
|
|
||||||
|
instead.
|
||||||
|
|
|
@ -11,11 +11,6 @@
|
||||||
#include "i915_gemfs.h"
|
#include "i915_gemfs.h"
|
||||||
#include "i915_utils.h"
|
#include "i915_utils.h"
|
||||||
|
|
||||||
static int add_param(struct fs_context *fc, const char *key, const char *val)
|
|
||||||
{
|
|
||||||
return vfs_parse_fs_string(fc, key, val, strlen(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
void i915_gemfs_init(struct drm_i915_private *i915)
|
void i915_gemfs_init(struct drm_i915_private *i915)
|
||||||
{
|
{
|
||||||
struct file_system_type *type;
|
struct file_system_type *type;
|
||||||
|
@ -48,9 +43,9 @@ void i915_gemfs_init(struct drm_i915_private *i915)
|
||||||
fc = fs_context_for_mount(type, SB_KERNMOUNT);
|
fc = fs_context_for_mount(type, SB_KERNMOUNT);
|
||||||
if (IS_ERR(fc))
|
if (IS_ERR(fc))
|
||||||
goto err;
|
goto err;
|
||||||
ret = add_param(fc, "source", "tmpfs");
|
ret = vfs_parse_fs_string(fc, "source", "tmpfs");
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = add_param(fc, "huge", "within_size");
|
ret = vfs_parse_fs_string(fc, "huge", "within_size");
|
||||||
if (!ret)
|
if (!ret)
|
||||||
gemfs = fc_mount_longterm(fc);
|
gemfs = fc_mount_longterm(fc);
|
||||||
put_fs_context(fc);
|
put_fs_context(fc);
|
||||||
|
|
|
@ -7,11 +7,6 @@
|
||||||
|
|
||||||
#include "v3d_drv.h"
|
#include "v3d_drv.h"
|
||||||
|
|
||||||
static int add_param(struct fs_context *fc, const char *key, const char *val)
|
|
||||||
{
|
|
||||||
return vfs_parse_fs_string(fc, key, val, strlen(val));
|
|
||||||
}
|
|
||||||
|
|
||||||
void v3d_gemfs_init(struct v3d_dev *v3d)
|
void v3d_gemfs_init(struct v3d_dev *v3d)
|
||||||
{
|
{
|
||||||
struct file_system_type *type;
|
struct file_system_type *type;
|
||||||
|
@ -38,9 +33,9 @@ void v3d_gemfs_init(struct v3d_dev *v3d)
|
||||||
fc = fs_context_for_mount(type, SB_KERNMOUNT);
|
fc = fs_context_for_mount(type, SB_KERNMOUNT);
|
||||||
if (IS_ERR(fc))
|
if (IS_ERR(fc))
|
||||||
goto err;
|
goto err;
|
||||||
ret = add_param(fc, "source", "tmpfs");
|
ret = vfs_parse_fs_string(fc, "source", "tmpfs");
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = add_param(fc, "huge", "within_size");
|
ret = vfs_parse_fs_string(fc, "huge", "within_size");
|
||||||
if (!ret)
|
if (!ret)
|
||||||
gemfs = fc_mount_longterm(fc);
|
gemfs = fc_mount_longterm(fc);
|
||||||
put_fs_context(fc);
|
put_fs_context(fc);
|
||||||
|
|
|
@ -137,7 +137,8 @@ static int afs_mntpt_set_params(struct fs_context *fc, struct dentry *mntpt)
|
||||||
|
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
if (content[size - 1] == '.')
|
if (content[size - 1] == '.')
|
||||||
ret = vfs_parse_fs_string(fc, "source", content, size - 1);
|
ret = vfs_parse_fs_qstr(fc, "source",
|
||||||
|
&QSTR_LEN(content, size - 1));
|
||||||
do_delayed_call(&cleanup);
|
do_delayed_call(&cleanup);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -161,25 +161,24 @@ int vfs_parse_fs_param(struct fs_context *fc, struct fs_parameter *param)
|
||||||
EXPORT_SYMBOL(vfs_parse_fs_param);
|
EXPORT_SYMBOL(vfs_parse_fs_param);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vfs_parse_fs_string - Convenience function to just parse a string.
|
* vfs_parse_fs_qstr - Convenience function to just parse a string.
|
||||||
* @fc: Filesystem context.
|
* @fc: Filesystem context.
|
||||||
* @key: Parameter name.
|
* @key: Parameter name.
|
||||||
* @value: Default value.
|
* @value: Default value.
|
||||||
* @v_size: Maximum number of bytes in the value.
|
|
||||||
*/
|
*/
|
||||||
int vfs_parse_fs_string(struct fs_context *fc, const char *key,
|
int vfs_parse_fs_qstr(struct fs_context *fc, const char *key,
|
||||||
const char *value, size_t v_size)
|
const struct qstr *value)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
struct fs_parameter param = {
|
struct fs_parameter param = {
|
||||||
.key = key,
|
.key = key,
|
||||||
.type = fs_value_is_flag,
|
.type = fs_value_is_flag,
|
||||||
.size = v_size,
|
.size = value ? value->len : 0,
|
||||||
};
|
};
|
||||||
|
|
||||||
if (value) {
|
if (value) {
|
||||||
param.string = kmemdup_nul(value, v_size, GFP_KERNEL);
|
param.string = kmemdup_nul(value->name, value->len, GFP_KERNEL);
|
||||||
if (!param.string)
|
if (!param.string)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
param.type = fs_value_is_string;
|
param.type = fs_value_is_string;
|
||||||
|
@ -189,7 +188,7 @@ int vfs_parse_fs_string(struct fs_context *fc, const char *key,
|
||||||
kfree(param.string);
|
kfree(param.string);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(vfs_parse_fs_string);
|
EXPORT_SYMBOL(vfs_parse_fs_qstr);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vfs_parse_monolithic_sep - Parse key[=val][,key[=val]]* mount data
|
* vfs_parse_monolithic_sep - Parse key[=val][,key[=val]]* mount data
|
||||||
|
@ -218,16 +217,14 @@ int vfs_parse_monolithic_sep(struct fs_context *fc, void *data,
|
||||||
|
|
||||||
while ((key = sep(&options)) != NULL) {
|
while ((key = sep(&options)) != NULL) {
|
||||||
if (*key) {
|
if (*key) {
|
||||||
size_t v_len = 0;
|
|
||||||
char *value = strchr(key, '=');
|
char *value = strchr(key, '=');
|
||||||
|
|
||||||
if (value) {
|
if (value) {
|
||||||
if (unlikely(value == key))
|
if (unlikely(value == key))
|
||||||
continue;
|
continue;
|
||||||
*value++ = 0;
|
*value++ = 0;
|
||||||
v_len = strlen(value);
|
|
||||||
}
|
}
|
||||||
ret = vfs_parse_fs_string(fc, key, value, v_len);
|
ret = vfs_parse_fs_string(fc, key, value);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1281,8 +1281,7 @@ struct vfsmount *vfs_kern_mount(struct file_system_type *type,
|
||||||
return ERR_CAST(fc);
|
return ERR_CAST(fc);
|
||||||
|
|
||||||
if (name)
|
if (name)
|
||||||
ret = vfs_parse_fs_string(fc, "source",
|
ret = vfs_parse_fs_string(fc, "source", name);
|
||||||
name, strlen(name));
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = parse_monolithic_mount_data(fc, data);
|
ret = parse_monolithic_mount_data(fc, data);
|
||||||
if (!ret)
|
if (!ret)
|
||||||
|
@ -3793,10 +3792,9 @@ static int do_new_mount(struct path *path, const char *fstype, int sb_flags,
|
||||||
fc->oldapi = true;
|
fc->oldapi = true;
|
||||||
|
|
||||||
if (subtype)
|
if (subtype)
|
||||||
err = vfs_parse_fs_string(fc, "subtype",
|
err = vfs_parse_fs_string(fc, "subtype", subtype);
|
||||||
subtype, strlen(subtype));
|
|
||||||
if (!err && name)
|
if (!err && name)
|
||||||
err = vfs_parse_fs_string(fc, "source", name, strlen(name));
|
err = vfs_parse_fs_string(fc, "source", name);
|
||||||
if (!err)
|
if (!err)
|
||||||
err = parse_monolithic_mount_data(fc, data);
|
err = parse_monolithic_mount_data(fc, data);
|
||||||
if (!err && !mount_capable(fc))
|
if (!err && !mount_capable(fc))
|
||||||
|
|
|
@ -1269,8 +1269,7 @@ static int nfs23_parse_monolithic(struct fs_context *fc,
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
data->context[NFS_MAX_CONTEXT_LEN] = '\0';
|
data->context[NFS_MAX_CONTEXT_LEN] = '\0';
|
||||||
ret = vfs_parse_fs_string(fc, "context",
|
ret = vfs_parse_fs_string(fc, "context", data->context);
|
||||||
data->context, strlen(data->context));
|
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
return ret;
|
return ret;
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -290,7 +290,8 @@ int nfs_do_submount(struct fs_context *fc)
|
||||||
nfs_errorf(fc, "NFS: Couldn't determine submount pathname");
|
nfs_errorf(fc, "NFS: Couldn't determine submount pathname");
|
||||||
ret = PTR_ERR(p);
|
ret = PTR_ERR(p);
|
||||||
} else {
|
} else {
|
||||||
ret = vfs_parse_fs_string(fc, "source", p, buffer + 4096 - p);
|
ret = vfs_parse_fs_qstr(fc, "source",
|
||||||
|
&QSTR_LEN(p, buffer + 4096 - p));
|
||||||
if (!ret)
|
if (!ret)
|
||||||
ret = vfs_get_tree(fc);
|
ret = vfs_get_tree(fc);
|
||||||
}
|
}
|
||||||
|
|
|
@ -773,16 +773,14 @@ static int smb3_fs_context_parse_monolithic(struct fs_context *fc,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
len = 0;
|
|
||||||
value = strchr(key, '=');
|
value = strchr(key, '=');
|
||||||
if (value) {
|
if (value) {
|
||||||
if (value == key)
|
if (value == key)
|
||||||
continue;
|
continue;
|
||||||
*value++ = 0;
|
*value++ = 0;
|
||||||
len = strlen(value);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = vfs_parse_fs_string(fc, key, value, len);
|
ret = vfs_parse_fs_string(fc, key, value);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -134,8 +134,13 @@ extern struct fs_context *fs_context_for_submount(struct file_system_type *fs_ty
|
||||||
|
|
||||||
extern struct fs_context *vfs_dup_fs_context(struct fs_context *fc);
|
extern struct fs_context *vfs_dup_fs_context(struct fs_context *fc);
|
||||||
extern int vfs_parse_fs_param(struct fs_context *fc, struct fs_parameter *param);
|
extern int vfs_parse_fs_param(struct fs_context *fc, struct fs_parameter *param);
|
||||||
extern int vfs_parse_fs_string(struct fs_context *fc, const char *key,
|
extern int vfs_parse_fs_qstr(struct fs_context *fc, const char *key,
|
||||||
const char *value, size_t v_size);
|
const struct qstr *value);
|
||||||
|
static inline int vfs_parse_fs_string(struct fs_context *fc, const char *key,
|
||||||
|
const char *value)
|
||||||
|
{
|
||||||
|
return vfs_parse_fs_qstr(fc, key, value ? &QSTR(value) : NULL);
|
||||||
|
}
|
||||||
int vfs_parse_monolithic_sep(struct fs_context *fc, void *data,
|
int vfs_parse_monolithic_sep(struct fs_context *fc, void *data,
|
||||||
char *(*sep)(char **));
|
char *(*sep)(char **));
|
||||||
extern int generic_parse_monolithic(struct fs_context *fc, void *data);
|
extern int generic_parse_monolithic(struct fs_context *fc, void *data);
|
||||||
|
|
|
@ -10201,8 +10201,7 @@ static struct vfsmount *trace_automount(struct dentry *mntpt, void *ingore)
|
||||||
|
|
||||||
pr_warn("NOTICE: Automounting of tracing to debugfs is deprecated and will be removed in 2030\n");
|
pr_warn("NOTICE: Automounting of tracing to debugfs is deprecated and will be removed in 2030\n");
|
||||||
|
|
||||||
ret = vfs_parse_fs_string(fc, "source",
|
ret = vfs_parse_fs_string(fc, "source", "tracefs");
|
||||||
"tracefs", strlen("tracefs"));
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
mnt = fc_mount(fc);
|
mnt = fc_mount(fc);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Reference in New Issue