Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3978732f authored by wang di's avatar wang di Committed by Greg Kroah-Hartman
Browse files

staging: lustre: llite: add md_op_data parameter to ll_get_dir_page

parent a75c0312
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -322,8 +322,8 @@ static struct page *ll_dir_page_locate(struct inode *dir, __u64 *hash,
	return page;
	return page;
}
}


struct page *ll_get_dir_page(struct inode *dir, __u64 hash,
struct page *ll_get_dir_page(struct inode *dir, struct md_op_data *op_data,
			     struct ll_dir_chain *chain)
			     __u64 hash, struct ll_dir_chain *chain)
{
{
	ldlm_policy_data_t policy = {.l_inodebits = {MDS_INODELOCK_UPDATE} };
	ldlm_policy_data_t policy = {.l_inodebits = {MDS_INODELOCK_UPDATE} };
	struct address_space *mapping = dir->i_mapping;
	struct address_space *mapping = dir->i_mapping;
@@ -503,7 +503,7 @@ int ll_dir_read(struct inode *inode, __u64 *ppos, struct md_op_data *op_data,


	ll_dir_chain_init(&chain);
	ll_dir_chain_init(&chain);


	page = ll_get_dir_page(inode, pos, &chain);
	page = ll_get_dir_page(inode, op_data, pos, &chain);


	while (rc == 0 && !done) {
	while (rc == 0 && !done) {
		struct lu_dirpage *dp;
		struct lu_dirpage *dp;
@@ -585,7 +585,7 @@ int ll_dir_read(struct inode *inode, __u64 *ppos, struct md_op_data *op_data,
					le32_to_cpu(dp->ldp_flags) &
					le32_to_cpu(dp->ldp_flags) &
					LDF_COLLIDE);
					LDF_COLLIDE);
			next = pos;
			next = pos;
			page = ll_get_dir_page(inode, pos,
			page = ll_get_dir_page(inode, op_data, pos,
					       &chain);
					       &chain);
		}
		}
	}
	}
+2 −2
Original line number Original line Diff line number Diff line
@@ -651,8 +651,8 @@ void ll_rw_stats_tally(struct ll_sb_info *sbi, pid_t pid,
void ll_release_page(struct page *page, int remove);
void ll_release_page(struct page *page, int remove);
extern const struct file_operations ll_dir_operations;
extern const struct file_operations ll_dir_operations;
extern const struct inode_operations ll_dir_inode_operations;
extern const struct inode_operations ll_dir_inode_operations;
struct page *ll_get_dir_page(struct inode *dir, __u64 hash,
struct page *ll_get_dir_page(struct inode *dir, struct md_op_data *op_data,
			     struct ll_dir_chain *chain);
			     __u64 hash, struct ll_dir_chain *chain);
int ll_dir_read(struct inode *inode, __u64 *ppos, struct md_op_data *op_data,
int ll_dir_read(struct inode *inode, __u64 *ppos, struct md_op_data *op_data,
		struct dir_context *ctx);
		struct dir_context *ctx);


+11 −4
Original line number Original line Diff line number Diff line
@@ -1067,7 +1067,7 @@ static int ll_statahead_thread(void *arg)
	wake_up(&thread->t_ctl_waitq);
	wake_up(&thread->t_ctl_waitq);


	ll_dir_chain_init(&chain);
	ll_dir_chain_init(&chain);
	page = ll_get_dir_page(dir, pos, &chain);
	page = ll_get_dir_page(dir, op_data, pos, &chain);


	while (1) {
	while (1) {
		struct lu_dirpage *dp;
		struct lu_dirpage *dp;
@@ -1232,7 +1232,7 @@ static int ll_statahead_thread(void *arg)
			ll_release_page(page, le32_to_cpu(dp->ldp_flags) &
			ll_release_page(page, le32_to_cpu(dp->ldp_flags) &
					      LDF_COLLIDE);
					      LDF_COLLIDE);
			sai->sai_in_readpage = 1;
			sai->sai_in_readpage = 1;
			page = ll_get_dir_page(dir, pos, &chain);
			page = ll_get_dir_page(dir, op_data, pos, &chain);
			sai->sai_in_readpage = 0;
			sai->sai_in_readpage = 0;
		}
		}
	}
	}
@@ -1344,13 +1344,19 @@ static int is_first_dirent(struct inode *dir, struct dentry *dentry)
{
{
	struct ll_dir_chain   chain;
	struct ll_dir_chain   chain;
	const struct qstr  *target = &dentry->d_name;
	const struct qstr  *target = &dentry->d_name;
	struct md_op_data *op_data;
	struct page	  *page;
	struct page	  *page;
	__u64		 pos    = 0;
	__u64		 pos    = 0;
	int		   dot_de;
	int		   dot_de;
	int		   rc     = LS_NONE_FIRST_DE;
	int		   rc     = LS_NONE_FIRST_DE;


	op_data = ll_prep_md_op_data(NULL, dir, dir, NULL, 0, 0,
				     LUSTRE_OPC_ANY, dir);
	if (IS_ERR(op_data))
		return PTR_ERR(op_data);

	ll_dir_chain_init(&chain);
	ll_dir_chain_init(&chain);
	page = ll_get_dir_page(dir, pos, &chain);
	page = ll_get_dir_page(dir, op_data, pos, &chain);


	while (1) {
	while (1) {
		struct lu_dirpage *dp;
		struct lu_dirpage *dp;
@@ -1438,12 +1444,13 @@ static int is_first_dirent(struct inode *dir, struct dentry *dentry)
			 */
			 */
			ll_release_page(page, le32_to_cpu(dp->ldp_flags) &
			ll_release_page(page, le32_to_cpu(dp->ldp_flags) &
					      LDF_COLLIDE);
					      LDF_COLLIDE);
			page = ll_get_dir_page(dir, pos, &chain);
			page = ll_get_dir_page(dir, op_data, pos, &chain);
		}
		}
	}
	}


out:
out:
	ll_dir_chain_fini(&chain);
	ll_dir_chain_fini(&chain);
	ll_finish_md_op_data(op_data);
	return rc;
	return rc;
}
}