162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci#include <linux/fs_context.h>
462306a36Sopenharmony_ci#include <linux/fs_parser.h>
562306a36Sopenharmony_ci
662306a36Sopenharmony_cistruct ovl_fs;
762306a36Sopenharmony_cistruct ovl_config;
862306a36Sopenharmony_ci
962306a36Sopenharmony_ciextern const struct fs_parameter_spec ovl_parameter_spec[];
1062306a36Sopenharmony_ciextern const struct constant_table ovl_parameter_redirect_dir[];
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/* The set of options that user requested explicitly via mount options */
1362306a36Sopenharmony_cistruct ovl_opt_set {
1462306a36Sopenharmony_ci	bool metacopy;
1562306a36Sopenharmony_ci	bool redirect;
1662306a36Sopenharmony_ci	bool nfs_export;
1762306a36Sopenharmony_ci	bool index;
1862306a36Sopenharmony_ci};
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci#define OVL_MAX_STACK 500
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistruct ovl_fs_context_layer {
2362306a36Sopenharmony_ci	char *name;
2462306a36Sopenharmony_ci	struct path path;
2562306a36Sopenharmony_ci};
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistruct ovl_fs_context {
2862306a36Sopenharmony_ci	struct path upper;
2962306a36Sopenharmony_ci	struct path work;
3062306a36Sopenharmony_ci	size_t capacity;
3162306a36Sopenharmony_ci	size_t nr; /* includes nr_data */
3262306a36Sopenharmony_ci	size_t nr_data;
3362306a36Sopenharmony_ci	struct ovl_opt_set set;
3462306a36Sopenharmony_ci	struct ovl_fs_context_layer *lower;
3562306a36Sopenharmony_ci	char *lowerdir_all; /* user provided lowerdir string */
3662306a36Sopenharmony_ci};
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciint ovl_init_fs_context(struct fs_context *fc);
3962306a36Sopenharmony_civoid ovl_free_fs(struct ovl_fs *ofs);
4062306a36Sopenharmony_ciint ovl_fs_params_verify(const struct ovl_fs_context *ctx,
4162306a36Sopenharmony_ci			 struct ovl_config *config);
4262306a36Sopenharmony_ciint ovl_show_options(struct seq_file *m, struct dentry *dentry);
4362306a36Sopenharmony_ciconst char *ovl_xino_mode(struct ovl_config *config);
44