#ifndef FS_NFS_NFS4BLOCKLAYOUT_H
#define FS_NFS_NFS4BLOCKLAYOUT_H
#include <linux/device-mapper.h>
#include <linux/nfs_fs.h>
#include <linux/sunrpc/rpc_pipe_fs.h>
#include "../nfs4_fs.h"
#include "../pnfs.h"
#include "../netns.h"
#define PAGE_CACHE_SECTORS …
#define PAGE_CACHE_SECTOR_SHIFT …
#define SECTOR_SIZE …
struct pnfs_block_dev;
#define PNFS_BLOCK_MAX_UUIDS …
#define PNFS_BLOCK_MAX_DEVICES …
#define PNFS_BLOCK_UUID_LEN …
struct pnfs_block_volume { … };
struct pnfs_block_dev_map { … };
struct pnfs_block_dev { … };
enum { … };
struct pnfs_block_extent { … };
struct pnfs_block_layout { … };
static inline struct pnfs_block_layout *
BLK_LO2EXT(struct pnfs_layout_hdr *lo)
{ … }
static inline struct pnfs_block_layout *
BLK_LSEG2EXT(struct pnfs_layout_segment *lseg)
{ … }
struct bl_pipe_msg { … };
struct bl_msg_hdr { … };
#define BL_DEVICE_UMOUNT …
#define BL_DEVICE_MOUNT …
#define BL_DEVICE_REQUEST_INIT …
#define BL_DEVICE_REQUEST_PROC …
#define BL_DEVICE_REQUEST_ERR …
bool bl_register_dev(struct pnfs_block_dev *d);
struct nfs4_deviceid_node *bl_alloc_deviceid_node(struct nfs_server *server,
struct pnfs_device *pdev, gfp_t gfp_mask);
void bl_free_deviceid_node(struct nfs4_deviceid_node *d);
int ext_tree_insert(struct pnfs_block_layout *bl,
struct pnfs_block_extent *new);
int ext_tree_remove(struct pnfs_block_layout *bl, bool rw, sector_t start,
sector_t end);
int ext_tree_mark_written(struct pnfs_block_layout *bl, sector_t start,
sector_t len, u64 lwb);
bool ext_tree_lookup(struct pnfs_block_layout *bl, sector_t isect,
struct pnfs_block_extent *ret, bool rw);
int ext_tree_prepare_commit(struct nfs4_layoutcommit_args *arg);
void ext_tree_mark_committed(struct nfs4_layoutcommit_args *arg, int status);
dev_t bl_resolve_deviceid(struct nfs_server *server,
struct pnfs_block_volume *b, gfp_t gfp_mask);
int __init bl_init_pipefs(void);
void bl_cleanup_pipefs(void);
#endif