struct ll_dir_chain chain;
struct l_wait_info lwi = { 0 };
struct lu_dirent *ent;
+ struct page *page = NULL;
ENTRY;
CDEBUG(D_READA, "statahead thread started: [pid %d] [parent %.*s]\n",
wake_up(&thread->t_ctl_waitq);
ll_dir_chain_init(&chain);
- for (ent = ll_dir_entry_start(dir, op_data);
+ for (ent = ll_dir_entry_start(dir, op_data, &page);
ent != NULL && !IS_ERR(ent);
- ent = ll_dir_entry_next(dir, op_data, ent)) {
+ ent = ll_dir_entry_next(dir, op_data, ent, &page)) {
__u64 hash;
int namelen;
char *name;
ll_statahead_one(parent, name, namelen);
}
- if (ent != NULL && !IS_ERR(ent))
- ll_dir_entry_end(dir, op_data, ent);
+ if (page != NULL) {
+ kunmap(page);
+ page_cache_release(page);
+ }
/*
* End of directory reached.
struct md_op_data *op_data;
int dot_de;
struct lu_dirent *ent;
+ struct page *page = NULL;
int rc = LS_NONE_FIRST_DE;
ENTRY;
op_data->op_max_pages =
ll_i2sbi(dir)->ll_md_brw_size >> PAGE_CACHE_SHIFT;
- for (ent = ll_dir_entry_start(dir, op_data);
+ for (ent = ll_dir_entry_start(dir, op_data, &page);
ent != NULL && !IS_ERR(ent);
- ent = ll_dir_entry_next(dir, op_data, ent)) {
+ ent = ll_dir_entry_next(dir, op_data, ent, &page)) {
__u64 hash;
int namelen;
char *name;
break;
}
EXIT;
- if (ent != NULL && !IS_ERR(ent))
- ll_dir_entry_end(dir, op_data, ent);
+
+ if (page != NULL) {
+ kunmap(page);
+ page_cache_release(page);
+ }
ll_finish_md_op_data(op_data);
out:
ll_dir_chain_fini(&chain);