struct cl_io *io,
struct cl_object *obj,
pgoff_t idx, struct page *vmpage,
+ struct inode *inode,
enum cl_page_type type);
-struct cl_page *cl_page_alloc (const struct lu_env *env,
- struct cl_io *io,
- struct cl_object *o, pgoff_t ind,
- struct page *vmpage,
- enum cl_page_type type);
void cl_page_get (struct cl_page *page);
void cl_page_put (const struct lu_env *env,
struct cl_page *page);
break;
}
/* attach VM page to CL page cache */
- page = cl_page_find(env, io, obj, vmpage->index, vmpage,
+ page = cl_page_find(env, io, obj, vmpage->index, vmpage, inode,
CPT_CACHEABLE);
if (IS_ERR(page)) {
ClearPageUptodate(vmpage);
if (!PageDirty(vmpage)) {
/* associate cl_page */
- clpage = cl_page_find(env, io, clob, vmpage->index,
- vmpage, CPT_CACHEABLE);
+ clpage = cl_page_find(env, io, clob, vmpage->index, vmpage,
+ inode, CPT_CACHEABLE);
if (IS_ERR(clpage))
GOTO(pagefini, rc = PTR_ERR(clpage));
GOTO(out, rc = -EBUSY);
}
- cp = cl_page_find(env, io, clob, vmpage->index, vmpage, CPT_CACHEABLE);
+ cp = cl_page_find(env, io, clob, vmpage->index, vmpage, inode,
+ CPT_CACHEABLE);
if (IS_ERR(cp)) {
which = RA_STAT_FAILED_GRAB_PAGE;
msg = "cl_page_find failed";
io->ci_ignore_layout = 1;
result = cl_io_init(env, io, CIT_MISC, clob);
if (result == 0) {
- page = cl_page_find(env, io, clob, vmpage->index,
- vmpage, CPT_CACHEABLE);
+ page = cl_page_find(env, io, clob, vmpage->index, vmpage, inode,
+ CPT_CACHEABLE);
if (!IS_ERR(page)) {
lu_ref_add(&page->cp_reference, "writepage",
current);
}
if (io == NULL) { /* fast read */
- struct inode *inode = file_inode(file);
struct ll_file_data *fd = file->private_data;
struct ll_readahead_state *ras = &fd->fd_ras;
struct lu_env *local_env = NULL;
}
LASSERT(io->ci_state == CIS_IO_GOING);
- page = cl_page_find(env, io, clob, vmpage->index, vmpage,
+ page = cl_page_find(env, io, clob, vmpage->index, vmpage, inode,
CPT_CACHEABLE);
if (!IS_ERR(page)) {
LASSERT(page->cp_type == CPT_CACHEABLE);
size_t to = min(from + size, PAGE_SIZE);
page = cl_page_find(env, io, obj, offset >> PAGE_SHIFT,
- cdp->cdp_pages[i], CPT_TRANSIENT);
+ cdp->cdp_pages[i], inode, CPT_TRANSIENT);
if (IS_ERR(page))
GOTO(out, rc = PTR_ERR(page));
goto again;
}
- page = cl_page_find(env, io, clob, vmpage->index, vmpage,
+ page = cl_page_find(env, io, clob, vmpage->index, vmpage, inode,
CPT_CACHEABLE);
if (IS_ERR(page))
GOTO(out, result = PTR_ERR(page));
}
}
- page = cl_page_find(env, io, obj, fio->ft_index, vmpage,
+ page = cl_page_find(env, io, obj, fio->ft_index, vmpage, inode,
CPT_CACHEABLE);
if (IS_ERR(page))
GOTO(out, result = PTR_ERR(page));
return cl_page;
}
-struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_io *io,
- struct cl_object *o, pgoff_t ind,
- struct page *vmpage, enum cl_page_type type)
+static struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_io *io,
+ struct cl_object *o,
+ pgoff_t ind, struct page *vmpage,
+ struct inode *inode,
+ enum cl_page_type type)
{
struct cl_page *cl_page;
struct cl_object *head;
if (cl_page->cp_type != CPT_TRANSIENT)
cl_page->cp_state = CPS_CACHED;
cl_page->cp_type = type;
- if (type == CPT_TRANSIENT)
- /* ref to correct inode will be added
- * in ll_direct_rw_pages
- */
- cl_page->cp_inode = NULL;
- else
- cl_page->cp_inode = page2inode(vmpage);
+ cl_page->cp_inode = inode;
INIT_LIST_HEAD(&cl_page->cp_batch);
lu_ref_init(&cl_page->cp_reference);
head = o;
struct cl_page *cl_page_find(const struct lu_env *env, struct cl_io *io,
struct cl_object *o,
pgoff_t idx, struct page *vmpage,
+ struct inode *inode,
enum cl_page_type type)
{
struct cl_page *page = NULL;
}
}
- /* allocate and initialize cl_page */
- page = cl_page_alloc(env, io, o, idx, vmpage, type);
+ /* allocate and initialize cl_page */
+ page = cl_page_alloc(env, io, o, idx, vmpage, inode, type);
RETURN(page);
}
EXPORT_SYMBOL(cl_page_find);