mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	NFS/pNFS: Clean up pNFS commit operations
Move the pNFS commit related operations into a separate structure that can be carried by the pnfs_ds_commit_info. Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
This commit is contained in:
		
							parent
							
								
									0aa647b736
								
							
						
					
					
						commit
						9c455a8c1e
					
				
					 6 changed files with 98 additions and 71 deletions
				
			
		| 
						 | 
				
			
			@ -511,10 +511,7 @@ nfs_direct_write_scan_commit_list(struct inode *inode,
 | 
			
		|||
				  struct nfs_commit_info *cinfo)
 | 
			
		||||
{
 | 
			
		||||
	mutex_lock(&NFS_I(cinfo->inode)->commit_mutex);
 | 
			
		||||
#ifdef CONFIG_NFS_V4_1
 | 
			
		||||
	if (cinfo->ds != NULL && cinfo->ds->nwritten != 0)
 | 
			
		||||
		NFS_SERVER(inode)->pnfs_curr_ld->recover_commit_reqs(list, cinfo);
 | 
			
		||||
#endif
 | 
			
		||||
	pnfs_recover_commit_reqs(list, cinfo);
 | 
			
		||||
	nfs_scan_commit_list(&cinfo->mds->list, list, cinfo, 0);
 | 
			
		||||
	mutex_unlock(&NFS_I(cinfo->inode)->commit_mutex);
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -917,6 +914,7 @@ ssize_t nfs_file_direct_write(struct kiocb *iocb, struct iov_iter *iter)
 | 
			
		|||
	dreq->l_ctx = l_ctx;
 | 
			
		||||
	if (!is_sync_kiocb(iocb))
 | 
			
		||||
		dreq->iocb = iocb;
 | 
			
		||||
	pnfs_init_ds_commit_info_ops(&dreq->ds_cinfo, inode);
 | 
			
		||||
 | 
			
		||||
	nfs_start_io_direct(inode);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -49,6 +49,7 @@ MODULE_AUTHOR("Dean Hildebrand <dhildebz@umich.edu>");
 | 
			
		|||
MODULE_DESCRIPTION("The NFSv4 file layout driver");
 | 
			
		||||
 | 
			
		||||
#define FILELAYOUT_POLL_RETRY_MAX     (15*HZ)
 | 
			
		||||
static const struct pnfs_commit_ops filelayout_commit_ops;
 | 
			
		||||
 | 
			
		||||
static loff_t
 | 
			
		||||
filelayout_get_dense_offset(struct nfs4_filelayout_segment *flseg,
 | 
			
		||||
| 
						 | 
				
			
			@ -1045,6 +1046,7 @@ filelayout_alloc_layout_hdr(struct inode *inode, gfp_t gfp_flags)
 | 
			
		|||
	if (flo == NULL)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	pnfs_init_ds_commit_info(&flo->commit_info);
 | 
			
		||||
	flo->commit_info.ops = &filelayout_commit_ops;
 | 
			
		||||
	return &flo->generic_hdr;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -1094,6 +1096,16 @@ filelayout_release_ds_info(struct pnfs_ds_commit_info *fl_cinfo,
 | 
			
		|||
	spin_unlock(&inode->i_lock);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pnfs_commit_ops filelayout_commit_ops = {
 | 
			
		||||
	.setup_ds_info		= filelayout_setup_ds_info,
 | 
			
		||||
	.release_ds_info	= filelayout_release_ds_info,
 | 
			
		||||
	.mark_request_commit	= filelayout_mark_request_commit,
 | 
			
		||||
	.clear_request_commit	= pnfs_generic_clear_request_commit,
 | 
			
		||||
	.scan_commit_lists	= pnfs_generic_scan_commit_lists,
 | 
			
		||||
	.recover_commit_reqs	= pnfs_generic_recover_commit_reqs,
 | 
			
		||||
	.search_commit_reqs	= pnfs_generic_search_commit_reqs,
 | 
			
		||||
	.commit_pagelist	= filelayout_commit_pagelist,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct pnfs_layoutdriver_type filelayout_type = {
 | 
			
		||||
	.id			= LAYOUT_NFSV4_1_FILES,
 | 
			
		||||
| 
						 | 
				
			
			@ -1108,14 +1120,6 @@ static struct pnfs_layoutdriver_type filelayout_type = {
 | 
			
		|||
	.pg_read_ops		= &filelayout_pg_read_ops,
 | 
			
		||||
	.pg_write_ops		= &filelayout_pg_write_ops,
 | 
			
		||||
	.get_ds_info		= &filelayout_get_ds_info,
 | 
			
		||||
	.setup_ds_info		= filelayout_setup_ds_info,
 | 
			
		||||
	.release_ds_info	= filelayout_release_ds_info,
 | 
			
		||||
	.mark_request_commit	= filelayout_mark_request_commit,
 | 
			
		||||
	.clear_request_commit	= pnfs_generic_clear_request_commit,
 | 
			
		||||
	.scan_commit_lists	= pnfs_generic_scan_commit_lists,
 | 
			
		||||
	.recover_commit_reqs	= pnfs_generic_recover_commit_reqs,
 | 
			
		||||
	.search_commit_reqs	= pnfs_generic_search_commit_reqs,
 | 
			
		||||
	.commit_pagelist	= filelayout_commit_pagelist,
 | 
			
		||||
	.read_pagelist		= filelayout_read_pagelist,
 | 
			
		||||
	.write_pagelist		= filelayout_write_pagelist,
 | 
			
		||||
	.alloc_deviceid_node	= filelayout_alloc_deviceid_node,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,7 @@
 | 
			
		|||
 | 
			
		||||
static unsigned short io_maxretrans;
 | 
			
		||||
 | 
			
		||||
static const struct pnfs_commit_ops ff_layout_commit_ops;
 | 
			
		||||
static void ff_layout_read_record_layoutstats_done(struct rpc_task *task,
 | 
			
		||||
		struct nfs_pgio_header *hdr);
 | 
			
		||||
static int ff_layout_mirror_prepare_stats(struct pnfs_layout_hdr *lo,
 | 
			
		||||
| 
						 | 
				
			
			@ -52,6 +53,7 @@ ff_layout_alloc_layout_hdr(struct inode *inode, gfp_t gfp_flags)
 | 
			
		|||
		INIT_LIST_HEAD(&ffl->error_list);
 | 
			
		||||
		INIT_LIST_HEAD(&ffl->mirrors);
 | 
			
		||||
		ffl->last_report_time = ktime_get();
 | 
			
		||||
		ffl->commit_info.ops = &ff_layout_commit_ops;
 | 
			
		||||
		return &ffl->generic_hdr;
 | 
			
		||||
	} else
 | 
			
		||||
		return NULL;
 | 
			
		||||
| 
						 | 
				
			
			@ -2440,6 +2442,16 @@ ff_layout_set_layoutdriver(struct nfs_server *server,
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static const struct pnfs_commit_ops ff_layout_commit_ops = {
 | 
			
		||||
	.setup_ds_info		= ff_layout_setup_ds_info,
 | 
			
		||||
	.release_ds_info	= ff_layout_release_ds_info,
 | 
			
		||||
	.mark_request_commit	= pnfs_layout_mark_request_commit,
 | 
			
		||||
	.clear_request_commit	= pnfs_generic_clear_request_commit,
 | 
			
		||||
	.scan_commit_lists	= pnfs_generic_scan_commit_lists,
 | 
			
		||||
	.recover_commit_reqs	= pnfs_generic_recover_commit_reqs,
 | 
			
		||||
	.commit_pagelist	= ff_layout_commit_pagelist,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
static struct pnfs_layoutdriver_type flexfilelayout_type = {
 | 
			
		||||
	.id			= LAYOUT_FLEX_FILES,
 | 
			
		||||
	.name			= "LAYOUT_FLEX_FILES",
 | 
			
		||||
| 
						 | 
				
			
			@ -2455,14 +2467,7 @@ static struct pnfs_layoutdriver_type flexfilelayout_type = {
 | 
			
		|||
	.pg_read_ops		= &ff_layout_pg_read_ops,
 | 
			
		||||
	.pg_write_ops		= &ff_layout_pg_write_ops,
 | 
			
		||||
	.get_ds_info		= ff_layout_get_ds_info,
 | 
			
		||||
	.setup_ds_info		= ff_layout_setup_ds_info,
 | 
			
		||||
	.release_ds_info	= ff_layout_release_ds_info,
 | 
			
		||||
	.free_deviceid_node	= ff_layout_free_deviceid_node,
 | 
			
		||||
	.mark_request_commit	= pnfs_layout_mark_request_commit,
 | 
			
		||||
	.clear_request_commit	= pnfs_generic_clear_request_commit,
 | 
			
		||||
	.scan_commit_lists	= pnfs_generic_scan_commit_lists,
 | 
			
		||||
	.recover_commit_reqs	= pnfs_generic_recover_commit_reqs,
 | 
			
		||||
	.commit_pagelist	= ff_layout_commit_pagelist,
 | 
			
		||||
	.read_pagelist		= ff_layout_read_pagelist,
 | 
			
		||||
	.write_pagelist		= ff_layout_write_pagelist,
 | 
			
		||||
	.alloc_deviceid_node    = ff_layout_alloc_deviceid_node,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										110
									
								
								fs/nfs/pnfs.h
									
									
									
									
									
								
							
							
						
						
									
										110
									
								
								fs/nfs/pnfs.h
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -150,26 +150,6 @@ struct pnfs_layoutdriver_type {
 | 
			
		|||
	const struct nfs_pageio_ops *pg_write_ops;
 | 
			
		||||
 | 
			
		||||
	struct pnfs_ds_commit_info *(*get_ds_info) (struct inode *inode);
 | 
			
		||||
	void (*setup_ds_info)(struct pnfs_ds_commit_info *,
 | 
			
		||||
			      struct pnfs_layout_segment *);
 | 
			
		||||
	void (*release_ds_info)(struct pnfs_ds_commit_info *,
 | 
			
		||||
				struct inode *inode);
 | 
			
		||||
	void (*mark_request_commit) (struct nfs_page *req,
 | 
			
		||||
				     struct pnfs_layout_segment *lseg,
 | 
			
		||||
				     struct nfs_commit_info *cinfo,
 | 
			
		||||
				     u32 ds_commit_idx);
 | 
			
		||||
	void (*clear_request_commit) (struct nfs_page *req,
 | 
			
		||||
				      struct nfs_commit_info *cinfo);
 | 
			
		||||
	int (*scan_commit_lists) (struct nfs_commit_info *cinfo,
 | 
			
		||||
				  int max);
 | 
			
		||||
	void (*recover_commit_reqs) (struct list_head *list,
 | 
			
		||||
				     struct nfs_commit_info *cinfo);
 | 
			
		||||
	struct nfs_page * (*search_commit_reqs)(struct nfs_commit_info *cinfo,
 | 
			
		||||
						struct page *page);
 | 
			
		||||
	int (*commit_pagelist)(struct inode *inode,
 | 
			
		||||
			       struct list_head *mds_pages,
 | 
			
		||||
			       int how,
 | 
			
		||||
			       struct nfs_commit_info *cinfo);
 | 
			
		||||
 | 
			
		||||
	int (*sync)(struct inode *inode, bool datasync);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -192,6 +172,29 @@ struct pnfs_layoutdriver_type {
 | 
			
		|||
	int (*prepare_layoutstats) (struct nfs42_layoutstat_args *args);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct pnfs_commit_ops {
 | 
			
		||||
	void (*setup_ds_info)(struct pnfs_ds_commit_info *,
 | 
			
		||||
			      struct pnfs_layout_segment *);
 | 
			
		||||
	void (*release_ds_info)(struct pnfs_ds_commit_info *,
 | 
			
		||||
				struct inode *inode);
 | 
			
		||||
	int (*commit_pagelist)(struct inode *inode,
 | 
			
		||||
			       struct list_head *mds_pages,
 | 
			
		||||
			       int how,
 | 
			
		||||
			       struct nfs_commit_info *cinfo);
 | 
			
		||||
	void (*mark_request_commit) (struct nfs_page *req,
 | 
			
		||||
				     struct pnfs_layout_segment *lseg,
 | 
			
		||||
				     struct nfs_commit_info *cinfo,
 | 
			
		||||
				     u32 ds_commit_idx);
 | 
			
		||||
	void (*clear_request_commit) (struct nfs_page *req,
 | 
			
		||||
				      struct nfs_commit_info *cinfo);
 | 
			
		||||
	int (*scan_commit_lists) (struct nfs_commit_info *cinfo,
 | 
			
		||||
				  int max);
 | 
			
		||||
	void (*recover_commit_reqs) (struct list_head *list,
 | 
			
		||||
				     struct nfs_commit_info *cinfo);
 | 
			
		||||
	struct nfs_page * (*search_commit_reqs)(struct nfs_commit_info *cinfo,
 | 
			
		||||
						struct page *page);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct pnfs_layout_hdr {
 | 
			
		||||
	refcount_t		plh_refcount;
 | 
			
		||||
	atomic_t		plh_outstanding; /* number of RPCs out */
 | 
			
		||||
| 
						 | 
				
			
			@ -461,9 +464,11 @@ static inline int
 | 
			
		|||
pnfs_commit_list(struct inode *inode, struct list_head *mds_pages, int how,
 | 
			
		||||
		 struct nfs_commit_info *cinfo)
 | 
			
		||||
{
 | 
			
		||||
	if (cinfo->ds == NULL || cinfo->ds->ncommitting == 0)
 | 
			
		||||
	struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds;
 | 
			
		||||
 | 
			
		||||
	if (fl_cinfo == NULL || fl_cinfo->ncommitting == 0)
 | 
			
		||||
		return PNFS_NOT_ATTEMPTED;
 | 
			
		||||
	return NFS_SERVER(inode)->pnfs_curr_ld->commit_pagelist(inode, mds_pages, how, cinfo);
 | 
			
		||||
	return fl_cinfo->ops->commit_pagelist(inode, mds_pages, how, cinfo);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline struct pnfs_ds_commit_info *
 | 
			
		||||
| 
						 | 
				
			
			@ -476,19 +481,26 @@ pnfs_get_ds_info(struct inode *inode)
 | 
			
		|||
	return ld->get_ds_info(inode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void
 | 
			
		||||
pnfs_init_ds_commit_info_ops(struct pnfs_ds_commit_info *fl_cinfo, struct inode *inode)
 | 
			
		||||
{
 | 
			
		||||
	struct pnfs_ds_commit_info *inode_cinfo = pnfs_get_ds_info(inode);
 | 
			
		||||
	if (inode_cinfo != NULL)
 | 
			
		||||
		fl_cinfo->ops = inode_cinfo->ops;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void
 | 
			
		||||
pnfs_init_ds_commit_info(struct pnfs_ds_commit_info *fl_cinfo)
 | 
			
		||||
{
 | 
			
		||||
	INIT_LIST_HEAD(&fl_cinfo->commits);
 | 
			
		||||
	fl_cinfo->ops = NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void
 | 
			
		||||
pnfs_release_ds_info(struct pnfs_ds_commit_info *fl_cinfo, struct inode *inode)
 | 
			
		||||
{
 | 
			
		||||
	struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld;
 | 
			
		||||
 | 
			
		||||
	if (ld != NULL && ld->release_ds_info != NULL)
 | 
			
		||||
		ld->release_ds_info(fl_cinfo, inode);
 | 
			
		||||
	if (fl_cinfo->ops != NULL && fl_cinfo->ops->release_ds_info != NULL)
 | 
			
		||||
		fl_cinfo->ops->release_ds_info(fl_cinfo, inode);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void
 | 
			
		||||
| 
						 | 
				
			
			@ -501,24 +513,22 @@ static inline bool
 | 
			
		|||
pnfs_mark_request_commit(struct nfs_page *req, struct pnfs_layout_segment *lseg,
 | 
			
		||||
			 struct nfs_commit_info *cinfo, u32 ds_commit_idx)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = d_inode(nfs_req_openctx(req)->dentry);
 | 
			
		||||
	struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld;
 | 
			
		||||
	struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds;
 | 
			
		||||
 | 
			
		||||
	if (lseg == NULL || ld->mark_request_commit == NULL)
 | 
			
		||||
	if (!lseg || !fl_cinfo->ops->mark_request_commit)
 | 
			
		||||
		return false;
 | 
			
		||||
	ld->mark_request_commit(req, lseg, cinfo, ds_commit_idx);
 | 
			
		||||
	fl_cinfo->ops->mark_request_commit(req, lseg, cinfo, ds_commit_idx);
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline bool
 | 
			
		||||
pnfs_clear_request_commit(struct nfs_page *req, struct nfs_commit_info *cinfo)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = d_inode(nfs_req_openctx(req)->dentry);
 | 
			
		||||
	struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld;
 | 
			
		||||
	struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds;
 | 
			
		||||
 | 
			
		||||
	if (ld == NULL || ld->clear_request_commit == NULL)
 | 
			
		||||
	if (!fl_cinfo || !fl_cinfo->ops || !fl_cinfo->ops->clear_request_commit)
 | 
			
		||||
		return false;
 | 
			
		||||
	ld->clear_request_commit(req, cinfo);
 | 
			
		||||
	fl_cinfo->ops->clear_request_commit(req, cinfo);
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -526,21 +536,31 @@ static inline int
 | 
			
		|||
pnfs_scan_commit_lists(struct inode *inode, struct nfs_commit_info *cinfo,
 | 
			
		||||
		       int max)
 | 
			
		||||
{
 | 
			
		||||
	if (cinfo->ds == NULL || cinfo->ds->nwritten == 0)
 | 
			
		||||
	struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds;
 | 
			
		||||
 | 
			
		||||
	if (!fl_cinfo || fl_cinfo->nwritten == 0)
 | 
			
		||||
		return 0;
 | 
			
		||||
	else
 | 
			
		||||
		return NFS_SERVER(inode)->pnfs_curr_ld->scan_commit_lists(cinfo, max);
 | 
			
		||||
	return fl_cinfo->ops->scan_commit_lists(cinfo, max);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void
 | 
			
		||||
pnfs_recover_commit_reqs(struct list_head *head, struct nfs_commit_info *cinfo)
 | 
			
		||||
{
 | 
			
		||||
	struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds;
 | 
			
		||||
 | 
			
		||||
	if (fl_cinfo && fl_cinfo->nwritten != 0)
 | 
			
		||||
		fl_cinfo->ops->recover_commit_reqs(head, cinfo);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline struct nfs_page *
 | 
			
		||||
pnfs_search_commit_reqs(struct inode *inode, struct nfs_commit_info *cinfo,
 | 
			
		||||
			struct page *page)
 | 
			
		||||
{
 | 
			
		||||
	struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld;
 | 
			
		||||
	struct pnfs_ds_commit_info *fl_cinfo = cinfo->ds;
 | 
			
		||||
 | 
			
		||||
	if (ld == NULL || ld->search_commit_reqs == NULL)
 | 
			
		||||
	if (!fl_cinfo->ops || !fl_cinfo->ops->search_commit_reqs)
 | 
			
		||||
		return NULL;
 | 
			
		||||
	return ld->search_commit_reqs(cinfo, page);
 | 
			
		||||
	return fl_cinfo->ops->search_commit_reqs(cinfo, page);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* Should the pNFS client commit and return the layout upon a setattr */
 | 
			
		||||
| 
						 | 
				
			
			@ -788,6 +808,11 @@ pnfs_get_ds_info(struct inode *inode)
 | 
			
		|||
	return NULL;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void
 | 
			
		||||
pnfs_init_ds_commit_info_ops(struct pnfs_ds_commit_info *fl_cinfo, struct inode *inode)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void
 | 
			
		||||
pnfs_init_ds_commit_info(struct pnfs_ds_commit_info *fl_cinfo)
 | 
			
		||||
{
 | 
			
		||||
| 
						 | 
				
			
			@ -818,6 +843,11 @@ pnfs_scan_commit_lists(struct inode *inode, struct nfs_commit_info *cinfo,
 | 
			
		|||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline void
 | 
			
		||||
pnfs_recover_commit_reqs(struct list_head *head, struct nfs_commit_info *cinfo)
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static inline struct nfs_page *
 | 
			
		||||
pnfs_search_commit_reqs(struct inode *inode, struct nfs_commit_info *cinfo,
 | 
			
		||||
			struct page *page)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -149,17 +149,6 @@ pnfs_add_commit_array(struct pnfs_ds_commit_info *fl_cinfo,
 | 
			
		|||
}
 | 
			
		||||
EXPORT_SYMBOL_GPL(pnfs_add_commit_array);
 | 
			
		||||
 | 
			
		||||
static void
 | 
			
		||||
pnfs_setup_ds_info(struct pnfs_ds_commit_info *fl_cinfo,
 | 
			
		||||
		struct pnfs_layout_segment *lseg)
 | 
			
		||||
{
 | 
			
		||||
	struct inode *inode = lseg->pls_layout->plh_inode;
 | 
			
		||||
	struct pnfs_layoutdriver_type *ld = NFS_SERVER(inode)->pnfs_curr_ld;
 | 
			
		||||
 | 
			
		||||
	if (ld->setup_ds_info != NULL)
 | 
			
		||||
		ld->setup_ds_info(fl_cinfo, lseg);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static struct pnfs_commit_array *
 | 
			
		||||
pnfs_lookup_commit_array(struct pnfs_ds_commit_info *fl_cinfo,
 | 
			
		||||
		struct pnfs_layout_segment *lseg)
 | 
			
		||||
| 
						 | 
				
			
			@ -170,7 +159,7 @@ pnfs_lookup_commit_array(struct pnfs_ds_commit_info *fl_cinfo,
 | 
			
		|||
	array = pnfs_find_commit_array_by_lseg(fl_cinfo, lseg);
 | 
			
		||||
	if (!array) {
 | 
			
		||||
		rcu_read_unlock();
 | 
			
		||||
		pnfs_setup_ds_info(fl_cinfo, lseg);
 | 
			
		||||
		fl_cinfo->ops->setup_ds_info(fl_cinfo, lseg);
 | 
			
		||||
		rcu_read_lock();
 | 
			
		||||
		array = pnfs_find_commit_array_by_lseg(fl_cinfo, lseg);
 | 
			
		||||
	}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1284,6 +1284,7 @@ struct pnfs_ds_commit_info {
 | 
			
		|||
	struct list_head commits;
 | 
			
		||||
	unsigned int nwritten;
 | 
			
		||||
	unsigned int ncommitting;
 | 
			
		||||
	const struct pnfs_commit_ops *ops;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
struct nfs41_state_protection {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue