linux/fs/overlayfs/params.c

// SPDX-License-Identifier: GPL-2.0-only

#include <linux/fs.h>
#include <linux/module.h>
#include <linux/namei.h>
#include <linux/fs_context.h>
#include <linux/fs_parser.h>
#include <linux/posix_acl_xattr.h>
#include <linux/seq_file.h>
#include <linux/xattr.h>
#include "overlayfs.h"
#include "params.h"

static bool ovl_redirect_dir_def = IS_ENABLED();
module_param_named(redirect_dir, ovl_redirect_dir_def, bool, 0644);
MODULE_PARM_DESC();

static bool ovl_redirect_always_follow =
	IS_ENABLED();
module_param_named(redirect_always_follow, ovl_redirect_always_follow,
		   bool, 0644);
MODULE_PARM_DESC();

static bool ovl_xino_auto_def = IS_ENABLED();
module_param_named(xino_auto, ovl_xino_auto_def, bool, 0644);
MODULE_PARM_DESC();

static bool ovl_index_def = IS_ENABLED();
module_param_named(index, ovl_index_def, bool, 0644);
MODULE_PARM_DESC();

static bool ovl_nfs_export_def = IS_ENABLED();
module_param_named(nfs_export, ovl_nfs_export_def, bool, 0644);
MODULE_PARM_DESC();

static bool ovl_metacopy_def = IS_ENABLED();
module_param_named(metacopy, ovl_metacopy_def, bool, 0644);
MODULE_PARM_DESC();

enum ovl_opt {};

static const struct constant_table ovl_parameter_bool[] =;

static const struct constant_table ovl_parameter_uuid[] =;

static const char *ovl_uuid_mode(struct ovl_config *config)
{}

static int ovl_uuid_def(void)
{}

static const struct constant_table ovl_parameter_xino[] =;

const char *ovl_xino_mode(struct ovl_config *config)
{}

static int ovl_xino_def(void)
{}

const struct constant_table ovl_parameter_redirect_dir[] =;

static const char *ovl_redirect_mode(struct ovl_config *config)
{}

static int ovl_redirect_mode_def(void)
{}

static const struct constant_table ovl_parameter_verity[] =;

static const char *ovl_verity_mode(struct ovl_config *config)
{}

static int ovl_verity_mode_def(void)
{}

const struct fs_parameter_spec ovl_parameter_spec[] =;

static char *ovl_next_opt(char **s)
{}

static int ovl_parse_monolithic(struct fs_context *fc, void *data)
{}

static ssize_t ovl_parse_param_split_lowerdirs(char *str)
{}

static int ovl_mount_dir_noesc(const char *name, struct path *path)
{}

static void ovl_unescape(char *s)
{}

static int ovl_mount_dir(const char *name, struct path *path)
{}

static int ovl_mount_dir_check(struct fs_context *fc, const struct path *path,
			       enum ovl_opt layer, const char *name, bool upper)
{}

static int ovl_ctx_realloc_lower(struct fs_context *fc)
{}

static void ovl_add_layer(struct fs_context *fc, enum ovl_opt layer,
			 struct path *path, char **pname)
{}

static int ovl_parse_layer(struct fs_context *fc, struct fs_parameter *param,
			   enum ovl_opt layer)
{}

static void ovl_reset_lowerdirs(struct ovl_fs_context *ctx)
{}

/*
 * Parse lowerdir= mount option:
 *
 * e.g.: lowerdir=/lower1:/lower2:/lower3::/data1::/data2
 *     Set "/lower1", "/lower2", and "/lower3" as lower layers and
 *     "/data1" and "/data2" as data lower layers. Any existing lower
 *     layers are replaced.
 */
static int ovl_parse_param_lowerdir(const char *name, struct fs_context *fc)
{}

static int ovl_parse_param(struct fs_context *fc, struct fs_parameter *param)
{}

static int ovl_get_tree(struct fs_context *fc)
{}

static inline void ovl_fs_context_free(struct ovl_fs_context *ctx)
{}

static void ovl_free(struct fs_context *fc)
{}

static int ovl_reconfigure(struct fs_context *fc)
{}

static const struct fs_context_operations ovl_context_ops =;

/*
 * This is called during fsopen() and will record the user namespace of
 * the caller in fc->user_ns since we've raised FS_USERNS_MOUNT. We'll
 * need it when we actually create the superblock to verify that the
 * process creating the superblock is in the same user namespace as
 * process that called fsopen().
 */
int ovl_init_fs_context(struct fs_context *fc)
{}

void ovl_free_fs(struct ovl_fs *ofs)
{}

int ovl_fs_params_verify(const struct ovl_fs_context *ctx,
			 struct ovl_config *config)
{}

/**
 * ovl_show_options
 * @m: the seq_file handle
 * @dentry: The dentry to query
 *
 * Prints the mount options for a given superblock.
 * Returns zero; does not fail.
 */
int ovl_show_options(struct seq_file *m, struct dentry *dentry)
{}