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