#include <linux/nfs_fs.h>
#include <linux/nfs_page.h>
#include <linux/sunrpc/addr.h>
#include <linux/module.h>
#include "nfs4session.h"
#include "internal.h"
#include "pnfs.h"
#define NFSDBG_FACILITY …
void pnfs_generic_rw_release(void *data)
{ … }
EXPORT_SYMBOL_GPL(…);
void pnfs_generic_prepare_to_resend_writes(struct nfs_commit_data *data)
{ … }
EXPORT_SYMBOL_GPL(…);
void pnfs_generic_write_commit_done(struct rpc_task *task, void *data)
{ … }
EXPORT_SYMBOL_GPL(…);
void pnfs_generic_commit_release(void *calldata)
{ … }
EXPORT_SYMBOL_GPL(…);
static struct pnfs_layout_segment *
pnfs_free_bucket_lseg(struct pnfs_commit_bucket *bucket)
{ … }
void
pnfs_generic_clear_request_commit(struct nfs_page *req,
struct nfs_commit_info *cinfo)
{ … }
EXPORT_SYMBOL_GPL(…);
struct pnfs_commit_array *
pnfs_alloc_commit_array(size_t n, gfp_t gfp_flags)
{ … }
EXPORT_SYMBOL_GPL(…);
void
pnfs_free_commit_array(struct pnfs_commit_array *p)
{ … }
EXPORT_SYMBOL_GPL(…);
static struct pnfs_commit_array *
pnfs_find_commit_array_by_lseg(struct pnfs_ds_commit_info *fl_cinfo,
struct pnfs_layout_segment *lseg)
{ … }
struct pnfs_commit_array *
pnfs_add_commit_array(struct pnfs_ds_commit_info *fl_cinfo,
struct pnfs_commit_array *new,
struct pnfs_layout_segment *lseg)
{ … }
EXPORT_SYMBOL_GPL(…);
static struct pnfs_commit_array *
pnfs_lookup_commit_array(struct pnfs_ds_commit_info *fl_cinfo,
struct pnfs_layout_segment *lseg)
{ … }
static void
pnfs_release_commit_array_locked(struct pnfs_commit_array *array)
{ … }
static void
pnfs_put_commit_array_locked(struct pnfs_commit_array *array)
{ … }
static void
pnfs_put_commit_array(struct pnfs_commit_array *array, struct inode *inode)
{ … }
static struct pnfs_commit_array *
pnfs_get_commit_array(struct pnfs_commit_array *array)
{ … }
static void
pnfs_remove_and_free_commit_array(struct pnfs_commit_array *array)
{ … }
void
pnfs_generic_ds_cinfo_release_lseg(struct pnfs_ds_commit_info *fl_cinfo,
struct pnfs_layout_segment *lseg)
{ … }
EXPORT_SYMBOL_GPL(…);
void
pnfs_generic_ds_cinfo_destroy(struct pnfs_ds_commit_info *fl_cinfo)
{ … }
EXPORT_SYMBOL_GPL(…);
static int
pnfs_bucket_scan_ds_commit_list(struct pnfs_commit_bucket *bucket,
struct nfs_commit_info *cinfo,
int max)
{ … }
static int pnfs_bucket_scan_array(struct nfs_commit_info *cinfo,
struct pnfs_commit_bucket *buckets,
unsigned int nbuckets,
int max)
{ … }
int pnfs_generic_scan_commit_lists(struct nfs_commit_info *cinfo, int max)
{ … }
EXPORT_SYMBOL_GPL(…);
static unsigned int
pnfs_bucket_recover_commit_reqs(struct list_head *dst,
struct pnfs_commit_bucket *buckets,
unsigned int nbuckets,
struct nfs_commit_info *cinfo)
{ … }
void pnfs_generic_recover_commit_reqs(struct list_head *dst,
struct nfs_commit_info *cinfo)
{ … }
EXPORT_SYMBOL_GPL(…);
static struct pnfs_layout_segment *
pnfs_bucket_get_committing(struct list_head *head,
struct pnfs_commit_bucket *bucket,
struct nfs_commit_info *cinfo)
{ … }
static struct nfs_commit_data *
pnfs_bucket_fetch_commitdata(struct pnfs_commit_bucket *bucket,
struct nfs_commit_info *cinfo)
{ … }
static void pnfs_generic_retry_commit(struct pnfs_commit_bucket *buckets,
unsigned int nbuckets,
struct nfs_commit_info *cinfo,
unsigned int idx)
{ … }
static unsigned int
pnfs_bucket_alloc_ds_commits(struct list_head *list,
struct pnfs_commit_bucket *buckets,
unsigned int nbuckets,
struct nfs_commit_info *cinfo)
{ … }
static unsigned int
pnfs_alloc_ds_commits_list(struct list_head *list,
struct pnfs_ds_commit_info *fl_cinfo,
struct nfs_commit_info *cinfo)
{ … }
int
pnfs_generic_commit_pagelist(struct inode *inode, struct list_head *mds_pages,
int how, struct nfs_commit_info *cinfo,
int (*initiate_commit)(struct nfs_commit_data *data,
int how))
{ … }
EXPORT_SYMBOL_GPL(…);
static DEFINE_SPINLOCK(nfs4_ds_cache_lock);
static LIST_HEAD(nfs4_data_server_cache);
static void
print_ds(struct nfs4_pnfs_ds *ds)
{ … }
static bool
same_sockaddr(struct sockaddr *addr1, struct sockaddr *addr2)
{ … }
static bool
_same_data_server_addrs_locked(const struct list_head *dsaddrs1,
const struct list_head *dsaddrs2)
{ … }
static struct nfs4_pnfs_ds *
_data_server_lookup_locked(const struct list_head *dsaddrs)
{ … }
static struct nfs4_pnfs_ds_addr *nfs4_pnfs_ds_addr_alloc(gfp_t gfp_flags)
{ … }
static void nfs4_pnfs_ds_addr_free(struct nfs4_pnfs_ds_addr *da)
{ … }
static void destroy_ds(struct nfs4_pnfs_ds *ds)
{ … }
void nfs4_pnfs_ds_put(struct nfs4_pnfs_ds *ds)
{ … }
EXPORT_SYMBOL_GPL(…);
static char *
nfs4_pnfs_remotestr(struct list_head *dsaddrs, gfp_t gfp_flags)
{ … }
struct nfs4_pnfs_ds *
nfs4_pnfs_ds_add(struct list_head *dsaddrs, gfp_t gfp_flags)
{ … }
EXPORT_SYMBOL_GPL(…);
static int nfs4_wait_ds_connect(struct nfs4_pnfs_ds *ds)
{ … }
static void nfs4_clear_ds_conn_bit(struct nfs4_pnfs_ds *ds)
{ … }
static struct nfs_client *(*get_v3_ds_connect)(
struct nfs_server *mds_srv,
const struct sockaddr_storage *ds_addr,
int ds_addrlen,
int ds_proto,
unsigned int ds_timeo,
unsigned int ds_retrans);
static bool load_v3_ds_connect(void)
{ … }
void nfs4_pnfs_v3_ds_connect_unload(void)
{ … }
static int _nfs4_pnfs_v3_ds_connect(struct nfs_server *mds_srv,
struct nfs4_pnfs_ds *ds,
unsigned int timeo,
unsigned int retrans)
{ … }
static int _nfs4_pnfs_v4_ds_connect(struct nfs_server *mds_srv,
struct nfs4_pnfs_ds *ds,
unsigned int timeo,
unsigned int retrans,
u32 minor_version)
{ … }
int nfs4_pnfs_ds_connect(struct nfs_server *mds_srv, struct nfs4_pnfs_ds *ds,
struct nfs4_deviceid_node *devid, unsigned int timeo,
unsigned int retrans, u32 version, u32 minor_version)
{ … }
EXPORT_SYMBOL_GPL(…);
struct nfs4_pnfs_ds_addr *
nfs4_decode_mp_ds_addr(struct net *net, struct xdr_stream *xdr, gfp_t gfp_flags)
{ … }
EXPORT_SYMBOL_GPL(…);
void
pnfs_layout_mark_request_commit(struct nfs_page *req,
struct pnfs_layout_segment *lseg,
struct nfs_commit_info *cinfo,
u32 ds_commit_idx)
{ … }
EXPORT_SYMBOL_GPL(…);
int
pnfs_nfs_generic_sync(struct inode *inode, bool datasync)
{ … }
EXPORT_SYMBOL_GPL(…);