NFS: Create a common rw_header_alloc and rw_header_free function
I create a new struct nfs_rw_ops to decide the differences between reads and writes. This struct will be set when initializing a new nfs_pgio_descriptor, and then passed on to the nfs_rw_header when a new header is allocated. Signed-off-by: Anna Schumaker <Anna.Schumaker@Netapp.com> Signed-off-by: Trond Myklebust <trond.myklebust@primarydata.com>
This commit is contained in:
parent
00bfa30abe
commit
4a0de55c56
7 changed files with 72 additions and 45 deletions
|
@ -237,6 +237,8 @@ extern void nfs_pgheader_init(struct nfs_pageio_descriptor *desc,
|
||||||
void nfs_set_pgio_error(struct nfs_pgio_header *hdr, int error, loff_t pos);
|
void nfs_set_pgio_error(struct nfs_pgio_header *hdr, int error, loff_t pos);
|
||||||
int nfs_iocounter_wait(struct nfs_io_counter *c);
|
int nfs_iocounter_wait(struct nfs_io_counter *c);
|
||||||
|
|
||||||
|
struct nfs_rw_header *nfs_rw_header_alloc(const struct nfs_rw_ops *);
|
||||||
|
void nfs_rw_header_free(struct nfs_pgio_header *);
|
||||||
struct nfs_pgio_data *nfs_pgio_data_alloc(struct nfs_pgio_header *, unsigned int);
|
struct nfs_pgio_data *nfs_pgio_data_alloc(struct nfs_pgio_header *, unsigned int);
|
||||||
void nfs_pgio_data_release(struct nfs_pgio_data *);
|
void nfs_pgio_data_release(struct nfs_pgio_data *);
|
||||||
|
|
||||||
|
@ -397,8 +399,6 @@ extern int nfs4_get_rootfh(struct nfs_server *server, struct nfs_fh *mntfh, bool
|
||||||
|
|
||||||
struct nfs_pgio_completion_ops;
|
struct nfs_pgio_completion_ops;
|
||||||
/* read.c */
|
/* read.c */
|
||||||
extern struct nfs_rw_header *nfs_readhdr_alloc(void);
|
|
||||||
extern void nfs_readhdr_free(struct nfs_pgio_header *hdr);
|
|
||||||
extern void nfs_pageio_init_read(struct nfs_pageio_descriptor *pgio,
|
extern void nfs_pageio_init_read(struct nfs_pageio_descriptor *pgio,
|
||||||
struct inode *inode, bool force_mds,
|
struct inode *inode, bool force_mds,
|
||||||
const struct nfs_pgio_completion_ops *compl_ops);
|
const struct nfs_pgio_completion_ops *compl_ops);
|
||||||
|
@ -425,8 +425,6 @@ int nfs_remount(struct super_block *sb, int *flags, char *raw_data);
|
||||||
extern void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio,
|
extern void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio,
|
||||||
struct inode *inode, int ioflags, bool force_mds,
|
struct inode *inode, int ioflags, bool force_mds,
|
||||||
const struct nfs_pgio_completion_ops *compl_ops);
|
const struct nfs_pgio_completion_ops *compl_ops);
|
||||||
extern struct nfs_rw_header *nfs_writehdr_alloc(void);
|
|
||||||
extern void nfs_writehdr_free(struct nfs_pgio_header *hdr);
|
|
||||||
extern int nfs_generic_flush(struct nfs_pageio_descriptor *desc,
|
extern int nfs_generic_flush(struct nfs_pageio_descriptor *desc,
|
||||||
struct nfs_pgio_header *hdr);
|
struct nfs_pgio_header *hdr);
|
||||||
extern void nfs_pageio_reset_write_mds(struct nfs_pageio_descriptor *pgio);
|
extern void nfs_pageio_reset_write_mds(struct nfs_pageio_descriptor *pgio);
|
||||||
|
|
|
@ -300,6 +300,37 @@ static inline struct nfs_rw_header *NFS_RW_HEADER(struct nfs_pgio_header *hdr)
|
||||||
return container_of(hdr, struct nfs_rw_header, header);
|
return container_of(hdr, struct nfs_rw_header, header);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* nfs_rw_header_alloc - Allocate a header for a read or write
|
||||||
|
* @ops: Read or write function vector
|
||||||
|
*/
|
||||||
|
struct nfs_rw_header *nfs_rw_header_alloc(const struct nfs_rw_ops *ops)
|
||||||
|
{
|
||||||
|
struct nfs_rw_header *header = ops->rw_alloc_header();
|
||||||
|
|
||||||
|
if (header) {
|
||||||
|
struct nfs_pgio_header *hdr = &header->header;
|
||||||
|
|
||||||
|
INIT_LIST_HEAD(&hdr->pages);
|
||||||
|
INIT_LIST_HEAD(&hdr->rpc_list);
|
||||||
|
spin_lock_init(&hdr->lock);
|
||||||
|
atomic_set(&hdr->refcnt, 0);
|
||||||
|
hdr->rw_ops = ops;
|
||||||
|
}
|
||||||
|
return header;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(nfs_rw_header_alloc);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* nfs_rw_header_free - Free a read or write header
|
||||||
|
* @hdr: The header to free
|
||||||
|
*/
|
||||||
|
void nfs_rw_header_free(struct nfs_pgio_header *hdr)
|
||||||
|
{
|
||||||
|
hdr->rw_ops->rw_free_header(NFS_RW_HEADER(hdr));
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL_GPL(nfs_rw_header_free);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* nfs_pgio_data_alloc - Allocate pageio data
|
* nfs_pgio_data_alloc - Allocate pageio data
|
||||||
* @hdr: The header making a request
|
* @hdr: The header making a request
|
||||||
|
@ -367,6 +398,7 @@ void nfs_pageio_init(struct nfs_pageio_descriptor *desc,
|
||||||
struct inode *inode,
|
struct inode *inode,
|
||||||
const struct nfs_pageio_ops *pg_ops,
|
const struct nfs_pageio_ops *pg_ops,
|
||||||
const struct nfs_pgio_completion_ops *compl_ops,
|
const struct nfs_pgio_completion_ops *compl_ops,
|
||||||
|
const struct nfs_rw_ops *rw_ops,
|
||||||
size_t bsize,
|
size_t bsize,
|
||||||
int io_flags)
|
int io_flags)
|
||||||
{
|
{
|
||||||
|
@ -380,6 +412,7 @@ void nfs_pageio_init(struct nfs_pageio_descriptor *desc,
|
||||||
desc->pg_inode = inode;
|
desc->pg_inode = inode;
|
||||||
desc->pg_ops = pg_ops;
|
desc->pg_ops = pg_ops;
|
||||||
desc->pg_completion_ops = compl_ops;
|
desc->pg_completion_ops = compl_ops;
|
||||||
|
desc->pg_rw_ops = rw_ops;
|
||||||
desc->pg_ioflags = io_flags;
|
desc->pg_ioflags = io_flags;
|
||||||
desc->pg_error = 0;
|
desc->pg_error = 0;
|
||||||
desc->pg_lseg = NULL;
|
desc->pg_lseg = NULL;
|
||||||
|
|
|
@ -1585,7 +1585,7 @@ pnfs_do_multiple_writes(struct nfs_pageio_descriptor *desc, struct list_head *he
|
||||||
static void pnfs_writehdr_free(struct nfs_pgio_header *hdr)
|
static void pnfs_writehdr_free(struct nfs_pgio_header *hdr)
|
||||||
{
|
{
|
||||||
pnfs_put_lseg(hdr->lseg);
|
pnfs_put_lseg(hdr->lseg);
|
||||||
nfs_writehdr_free(hdr);
|
nfs_rw_header_free(hdr);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pnfs_writehdr_free);
|
EXPORT_SYMBOL_GPL(pnfs_writehdr_free);
|
||||||
|
|
||||||
|
@ -1596,7 +1596,7 @@ pnfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc)
|
||||||
struct nfs_pgio_header *hdr;
|
struct nfs_pgio_header *hdr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
whdr = nfs_writehdr_alloc();
|
whdr = nfs_rw_header_alloc(desc->pg_rw_ops);
|
||||||
if (!whdr) {
|
if (!whdr) {
|
||||||
desc->pg_completion_ops->error_cleanup(&desc->pg_list);
|
desc->pg_completion_ops->error_cleanup(&desc->pg_list);
|
||||||
pnfs_put_lseg(desc->pg_lseg);
|
pnfs_put_lseg(desc->pg_lseg);
|
||||||
|
@ -1743,7 +1743,7 @@ pnfs_do_multiple_reads(struct nfs_pageio_descriptor *desc, struct list_head *hea
|
||||||
static void pnfs_readhdr_free(struct nfs_pgio_header *hdr)
|
static void pnfs_readhdr_free(struct nfs_pgio_header *hdr)
|
||||||
{
|
{
|
||||||
pnfs_put_lseg(hdr->lseg);
|
pnfs_put_lseg(hdr->lseg);
|
||||||
nfs_readhdr_free(hdr);
|
nfs_rw_header_free(hdr);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(pnfs_readhdr_free);
|
EXPORT_SYMBOL_GPL(pnfs_readhdr_free);
|
||||||
|
|
||||||
|
@ -1754,7 +1754,7 @@ pnfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc)
|
||||||
struct nfs_pgio_header *hdr;
|
struct nfs_pgio_header *hdr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
rhdr = nfs_readhdr_alloc();
|
rhdr = nfs_rw_header_alloc(desc->pg_rw_ops);
|
||||||
if (!rhdr) {
|
if (!rhdr) {
|
||||||
desc->pg_completion_ops->error_cleanup(&desc->pg_list);
|
desc->pg_completion_ops->error_cleanup(&desc->pg_list);
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
|
|
|
@ -31,33 +31,19 @@
|
||||||
static const struct nfs_pageio_ops nfs_pageio_read_ops;
|
static const struct nfs_pageio_ops nfs_pageio_read_ops;
|
||||||
static const struct rpc_call_ops nfs_read_common_ops;
|
static const struct rpc_call_ops nfs_read_common_ops;
|
||||||
static const struct nfs_pgio_completion_ops nfs_async_read_completion_ops;
|
static const struct nfs_pgio_completion_ops nfs_async_read_completion_ops;
|
||||||
|
static const struct nfs_rw_ops nfs_rw_read_ops;
|
||||||
|
|
||||||
static struct kmem_cache *nfs_rdata_cachep;
|
static struct kmem_cache *nfs_rdata_cachep;
|
||||||
|
|
||||||
struct nfs_rw_header *nfs_readhdr_alloc(void)
|
static struct nfs_rw_header *nfs_readhdr_alloc(void)
|
||||||
{
|
{
|
||||||
struct nfs_rw_header *rhdr;
|
return kmem_cache_zalloc(nfs_rdata_cachep, GFP_KERNEL);
|
||||||
|
|
||||||
rhdr = kmem_cache_zalloc(nfs_rdata_cachep, GFP_KERNEL);
|
|
||||||
if (rhdr) {
|
|
||||||
struct nfs_pgio_header *hdr = &rhdr->header;
|
|
||||||
|
|
||||||
INIT_LIST_HEAD(&hdr->pages);
|
|
||||||
INIT_LIST_HEAD(&hdr->rpc_list);
|
|
||||||
spin_lock_init(&hdr->lock);
|
|
||||||
atomic_set(&hdr->refcnt, 0);
|
|
||||||
}
|
|
||||||
return rhdr;
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nfs_readhdr_alloc);
|
|
||||||
|
|
||||||
void nfs_readhdr_free(struct nfs_pgio_header *hdr)
|
static void nfs_readhdr_free(struct nfs_rw_header *rhdr)
|
||||||
{
|
{
|
||||||
struct nfs_rw_header *rhdr = container_of(hdr, struct nfs_rw_header, header);
|
|
||||||
|
|
||||||
kmem_cache_free(nfs_rdata_cachep, rhdr);
|
kmem_cache_free(nfs_rdata_cachep, rhdr);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nfs_readhdr_free);
|
|
||||||
|
|
||||||
static
|
static
|
||||||
int nfs_return_empty_page(struct page *page)
|
int nfs_return_empty_page(struct page *page)
|
||||||
|
@ -79,7 +65,8 @@ void nfs_pageio_init_read(struct nfs_pageio_descriptor *pgio,
|
||||||
if (server->pnfs_curr_ld && !force_mds)
|
if (server->pnfs_curr_ld && !force_mds)
|
||||||
pg_ops = server->pnfs_curr_ld->pg_read_ops;
|
pg_ops = server->pnfs_curr_ld->pg_read_ops;
|
||||||
#endif
|
#endif
|
||||||
nfs_pageio_init(pgio, inode, pg_ops, compl_ops, server->rsize, 0);
|
nfs_pageio_init(pgio, inode, pg_ops, compl_ops, &nfs_rw_read_ops,
|
||||||
|
server->rsize, 0);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nfs_pageio_init_read);
|
EXPORT_SYMBOL_GPL(nfs_pageio_init_read);
|
||||||
|
|
||||||
|
@ -375,13 +362,13 @@ static int nfs_generic_pg_readpages(struct nfs_pageio_descriptor *desc)
|
||||||
struct nfs_pgio_header *hdr;
|
struct nfs_pgio_header *hdr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
rhdr = nfs_readhdr_alloc();
|
rhdr = nfs_rw_header_alloc(desc->pg_rw_ops);
|
||||||
if (!rhdr) {
|
if (!rhdr) {
|
||||||
desc->pg_completion_ops->error_cleanup(&desc->pg_list);
|
desc->pg_completion_ops->error_cleanup(&desc->pg_list);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
hdr = &rhdr->header;
|
hdr = &rhdr->header;
|
||||||
nfs_pgheader_init(desc, hdr, nfs_readhdr_free);
|
nfs_pgheader_init(desc, hdr, nfs_rw_header_free);
|
||||||
atomic_inc(&hdr->refcnt);
|
atomic_inc(&hdr->refcnt);
|
||||||
ret = nfs_generic_pagein(desc, hdr);
|
ret = nfs_generic_pagein(desc, hdr);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
|
@ -647,3 +634,8 @@ void nfs_destroy_readpagecache(void)
|
||||||
{
|
{
|
||||||
kmem_cache_destroy(nfs_rdata_cachep);
|
kmem_cache_destroy(nfs_rdata_cachep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct nfs_rw_ops nfs_rw_read_ops = {
|
||||||
|
.rw_alloc_header = nfs_readhdr_alloc,
|
||||||
|
.rw_free_header = nfs_readhdr_free,
|
||||||
|
};
|
||||||
|
|
|
@ -46,6 +46,7 @@ static const struct rpc_call_ops nfs_write_common_ops;
|
||||||
static const struct rpc_call_ops nfs_commit_ops;
|
static const struct rpc_call_ops nfs_commit_ops;
|
||||||
static const struct nfs_pgio_completion_ops nfs_async_write_completion_ops;
|
static const struct nfs_pgio_completion_ops nfs_async_write_completion_ops;
|
||||||
static const struct nfs_commit_completion_ops nfs_commit_completion_ops;
|
static const struct nfs_commit_completion_ops nfs_commit_completion_ops;
|
||||||
|
static const struct nfs_rw_ops nfs_rw_write_ops;
|
||||||
|
|
||||||
static struct kmem_cache *nfs_wdata_cachep;
|
static struct kmem_cache *nfs_wdata_cachep;
|
||||||
static mempool_t *nfs_wdata_mempool;
|
static mempool_t *nfs_wdata_mempool;
|
||||||
|
@ -70,29 +71,19 @@ void nfs_commit_free(struct nfs_commit_data *p)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nfs_commit_free);
|
EXPORT_SYMBOL_GPL(nfs_commit_free);
|
||||||
|
|
||||||
struct nfs_rw_header *nfs_writehdr_alloc(void)
|
static struct nfs_rw_header *nfs_writehdr_alloc(void)
|
||||||
{
|
{
|
||||||
struct nfs_rw_header *p = mempool_alloc(nfs_wdata_mempool, GFP_NOIO);
|
struct nfs_rw_header *p = mempool_alloc(nfs_wdata_mempool, GFP_NOIO);
|
||||||
|
|
||||||
if (p) {
|
if (p)
|
||||||
struct nfs_pgio_header *hdr = &p->header;
|
|
||||||
|
|
||||||
memset(p, 0, sizeof(*p));
|
memset(p, 0, sizeof(*p));
|
||||||
INIT_LIST_HEAD(&hdr->pages);
|
|
||||||
INIT_LIST_HEAD(&hdr->rpc_list);
|
|
||||||
spin_lock_init(&hdr->lock);
|
|
||||||
atomic_set(&hdr->refcnt, 0);
|
|
||||||
}
|
|
||||||
return p;
|
return p;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nfs_writehdr_alloc);
|
|
||||||
|
|
||||||
void nfs_writehdr_free(struct nfs_pgio_header *hdr)
|
static void nfs_writehdr_free(struct nfs_rw_header *whdr)
|
||||||
{
|
{
|
||||||
struct nfs_rw_header *whdr = container_of(hdr, struct nfs_rw_header, header);
|
|
||||||
mempool_free(whdr, nfs_wdata_mempool);
|
mempool_free(whdr, nfs_wdata_mempool);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nfs_writehdr_free);
|
|
||||||
|
|
||||||
static void nfs_context_set_write_error(struct nfs_open_context *ctx, int error)
|
static void nfs_context_set_write_error(struct nfs_open_context *ctx, int error)
|
||||||
{
|
{
|
||||||
|
@ -1210,13 +1201,13 @@ static int nfs_generic_pg_writepages(struct nfs_pageio_descriptor *desc)
|
||||||
struct nfs_pgio_header *hdr;
|
struct nfs_pgio_header *hdr;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
whdr = nfs_writehdr_alloc();
|
whdr = nfs_rw_header_alloc(desc->pg_rw_ops);
|
||||||
if (!whdr) {
|
if (!whdr) {
|
||||||
desc->pg_completion_ops->error_cleanup(&desc->pg_list);
|
desc->pg_completion_ops->error_cleanup(&desc->pg_list);
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
}
|
}
|
||||||
hdr = &whdr->header;
|
hdr = &whdr->header;
|
||||||
nfs_pgheader_init(desc, hdr, nfs_writehdr_free);
|
nfs_pgheader_init(desc, hdr, nfs_rw_header_free);
|
||||||
atomic_inc(&hdr->refcnt);
|
atomic_inc(&hdr->refcnt);
|
||||||
ret = nfs_generic_flush(desc, hdr);
|
ret = nfs_generic_flush(desc, hdr);
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
|
@ -1244,7 +1235,8 @@ void nfs_pageio_init_write(struct nfs_pageio_descriptor *pgio,
|
||||||
if (server->pnfs_curr_ld && !force_mds)
|
if (server->pnfs_curr_ld && !force_mds)
|
||||||
pg_ops = server->pnfs_curr_ld->pg_write_ops;
|
pg_ops = server->pnfs_curr_ld->pg_write_ops;
|
||||||
#endif
|
#endif
|
||||||
nfs_pageio_init(pgio, inode, pg_ops, compl_ops, server->wsize, ioflags);
|
nfs_pageio_init(pgio, inode, pg_ops, compl_ops, &nfs_rw_write_ops,
|
||||||
|
server->wsize, ioflags);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(nfs_pageio_init_write);
|
EXPORT_SYMBOL_GPL(nfs_pageio_init_write);
|
||||||
|
|
||||||
|
@ -1925,3 +1917,7 @@ void nfs_destroy_writepagecache(void)
|
||||||
kmem_cache_destroy(nfs_wdata_cachep);
|
kmem_cache_destroy(nfs_wdata_cachep);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static const struct nfs_rw_ops nfs_rw_write_ops = {
|
||||||
|
.rw_alloc_header = nfs_writehdr_alloc,
|
||||||
|
.rw_free_header = nfs_writehdr_free,
|
||||||
|
};
|
||||||
|
|
|
@ -52,6 +52,11 @@ struct nfs_pageio_ops {
|
||||||
int (*pg_doio)(struct nfs_pageio_descriptor *);
|
int (*pg_doio)(struct nfs_pageio_descriptor *);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct nfs_rw_ops {
|
||||||
|
struct nfs_rw_header *(*rw_alloc_header)(void);
|
||||||
|
void (*rw_free_header)(struct nfs_rw_header *);
|
||||||
|
};
|
||||||
|
|
||||||
struct nfs_pageio_descriptor {
|
struct nfs_pageio_descriptor {
|
||||||
struct list_head pg_list;
|
struct list_head pg_list;
|
||||||
unsigned long pg_bytes_written;
|
unsigned long pg_bytes_written;
|
||||||
|
@ -63,6 +68,7 @@ struct nfs_pageio_descriptor {
|
||||||
|
|
||||||
struct inode *pg_inode;
|
struct inode *pg_inode;
|
||||||
const struct nfs_pageio_ops *pg_ops;
|
const struct nfs_pageio_ops *pg_ops;
|
||||||
|
const struct nfs_rw_ops *pg_rw_ops;
|
||||||
int pg_ioflags;
|
int pg_ioflags;
|
||||||
int pg_error;
|
int pg_error;
|
||||||
const struct rpc_call_ops *pg_rpc_callops;
|
const struct rpc_call_ops *pg_rpc_callops;
|
||||||
|
@ -86,6 +92,7 @@ extern void nfs_pageio_init(struct nfs_pageio_descriptor *desc,
|
||||||
struct inode *inode,
|
struct inode *inode,
|
||||||
const struct nfs_pageio_ops *pg_ops,
|
const struct nfs_pageio_ops *pg_ops,
|
||||||
const struct nfs_pgio_completion_ops *compl_ops,
|
const struct nfs_pgio_completion_ops *compl_ops,
|
||||||
|
const struct nfs_rw_ops *rw_ops,
|
||||||
size_t bsize,
|
size_t bsize,
|
||||||
int how);
|
int how);
|
||||||
extern int nfs_pageio_add_request(struct nfs_pageio_descriptor *,
|
extern int nfs_pageio_add_request(struct nfs_pageio_descriptor *,
|
||||||
|
|
|
@ -1269,6 +1269,7 @@ struct nfs_pgio_header {
|
||||||
const struct rpc_call_ops *mds_ops;
|
const struct rpc_call_ops *mds_ops;
|
||||||
void (*release) (struct nfs_pgio_header *hdr);
|
void (*release) (struct nfs_pgio_header *hdr);
|
||||||
const struct nfs_pgio_completion_ops *completion_ops;
|
const struct nfs_pgio_completion_ops *completion_ops;
|
||||||
|
const struct nfs_rw_ops *rw_ops;
|
||||||
struct nfs_direct_req *dreq;
|
struct nfs_direct_req *dreq;
|
||||||
void *layout_private;
|
void *layout_private;
|
||||||
spinlock_t lock;
|
spinlock_t lock;
|
||||||
|
|
Loading…
Reference in a new issue