mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	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
					
				
					 12 changed files with 49 additions and 41 deletions
				
			
		| 
						 | 
					@ -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 a new issue