/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _FS_NFSD_PNFS_H
#define _FS_NFSD_PNFS_H 1

#ifdef CONFIG_NFSD_V4
#include <linux/exportfs.h>
#include <linux/nfsd/export.h>

#include "state.h"
#include "xdr4.h"

struct xdr_stream;

struct nfsd4_deviceid_map {
	struct list_head	hash;
	u64			idx;
	int			fsid_type;
	u32			fsid[];
};

struct nfsd4_layout_ops {
	u32		notify_types;
	bool		disable_recalls;

	__be32 (*proc_getdeviceinfo)(struct super_block *sb,
			struct svc_rqst *rqstp,
			struct nfs4_client *clp,
			struct nfsd4_getdeviceinfo *gdevp);
	__be32 (*encode_getdeviceinfo)(struct xdr_stream *xdr,
			const struct nfsd4_getdeviceinfo *gdevp);

	__be32 (*proc_layoutget)(struct inode *, const struct svc_fh *fhp,
			struct nfsd4_layoutget *lgp);
	__be32 (*encode_layoutget)(struct xdr_stream *xdr,
			const struct nfsd4_layoutget *lgp);

	__be32 (*proc_layoutcommit)(struct inode *inode,
			struct nfsd4_layoutcommit *lcp);

	void (*fence_client)(struct nfs4_layout_stateid *ls,
			     struct nfsd_file *file);
};

extern const struct nfsd4_layout_ops *nfsd4_layout_ops[];
#ifdef CONFIG_NFSD_BLOCKLAYOUT
extern const struct nfsd4_layout_ops bl_layout_ops;
#endif
#ifdef CONFIG_NFSD_SCSILAYOUT
extern const struct nfsd4_layout_ops scsi_layout_ops;
#endif
#ifdef CONFIG_NFSD_FLEXFILELAYOUT
extern const struct nfsd4_layout_ops ff_layout_ops;
#endif

__be32 nfsd4_preprocess_layout_stateid(struct svc_rqst *rqstp,
		struct nfsd4_compound_state *cstate, stateid_t *stateid,
		bool create, u32 layout_type, struct nfs4_layout_stateid **lsp);
__be32 nfsd4_insert_layout(struct nfsd4_layoutget *lgp,
		struct nfs4_layout_stateid *ls);
__be32 nfsd4_return_file_layouts(struct svc_rqst *rqstp,
		struct nfsd4_compound_state *cstate,
		struct nfsd4_layoutreturn *lrp);
__be32 nfsd4_return_client_layouts(struct svc_rqst *rqstp,
		struct nfsd4_compound_state *cstate,
		struct nfsd4_layoutreturn *lrp);
int nfsd4_set_deviceid(struct nfsd4_deviceid *id, const struct svc_fh *fhp,
		u32 device_generation);
struct nfsd4_deviceid_map *nfsd4_find_devid_map(int idx);
#endif /* CONFIG_NFSD_V4 */

#ifdef CONFIG_NFSD_PNFS
void nfsd4_setup_layout_type(struct svc_export *exp);
void nfsd4_return_all_client_layouts(struct nfs4_client *);
void nfsd4_return_all_file_layouts(struct nfs4_client *clp,
		struct nfs4_file *fp);
void nfsd4_close_layout(struct nfs4_layout_stateid *ls);
int nfsd4_init_pnfs(void);
void nfsd4_exit_pnfs(void);
#else
struct nfs4_client;
struct nfs4_file;
struct nfs4_layout_stateid;

static inline void nfsd4_setup_layout_type(struct svc_export *exp)
{
}

static inline void nfsd4_return_all_client_layouts(struct nfs4_client *clp)
{
}
static inline void nfsd4_return_all_file_layouts(struct nfs4_client *clp,
		struct nfs4_file *fp)
{
}
static inline void nfsd4_close_layout(struct nfs4_layout_stateid *ls)
{
}
static inline void nfsd4_exit_pnfs(void)
{
}
static inline int nfsd4_init_pnfs(void)
{
	return 0;
}
#endif /* CONFIG_NFSD_PNFS */
#endif /* _FS_NFSD_PNFS_H */
