struct cl_page *cl_page_find (const struct lu_env *env,
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_object *o, pgoff_t ind,
struct page *vmpage,
+ struct inode *inode,
enum cl_page_type type);
void cl_page_get (struct cl_page *page);
void cl_page_put (const struct lu_env *env,
break;
}
/* attach VM page to CL page cache */
- page = cl_page_find(env, obj, vmpage->index, vmpage,
+ page = cl_page_find(env, obj, vmpage->index, vmpage, inode,
CPT_CACHEABLE);
if (IS_ERR(page)) {
ClearPageUptodate(vmpage);
if (!PageDirty(vmpage)) {
/* associate cl_page */
clpage = cl_page_find(env, clob, vmpage->index,
- vmpage, CPT_CACHEABLE);
+ vmpage, inode, CPT_CACHEABLE);
if (IS_ERR(clpage))
GOTO(pagefini, rc = PTR_ERR(clpage));
GOTO(out, rc = -EBUSY);
}
- page = cl_page_find(env, clob, vmpage->index, vmpage, CPT_CACHEABLE);
+ page = cl_page_find(env, clob, vmpage->index, vmpage, inode,
+ CPT_CACHEABLE);
if (IS_ERR(page)) {
which = RA_STAT_FAILED_GRAB_PAGE;
msg = "cl_page_find failed";
result = cl_io_init(env, io, CIT_MISC, clob);
if (result == 0) {
page = cl_page_find(env, clob, vmpage->index,
- vmpage, CPT_CACHEABLE);
+ vmpage, inode, CPT_CACHEABLE);
if (!IS_ERR(page)) {
lu_ref_add(&page->cp_reference, "writepage",
current);
}
LASSERT(io->ci_state == CIS_IO_GOING);
- page = cl_page_find(env, clob, vmpage->index, vmpage, CPT_CACHEABLE);
+ page = cl_page_find(env, clob, vmpage->index, vmpage, inode,
+ CPT_CACHEABLE);
if (!IS_ERR(page)) {
LASSERT(page->cp_type == CPT_CACHEABLE);
if (likely(!PageUptodate(vmpage))) {
for (i = 0; i < pv->ldp_count; i++) {
LASSERT(!(offset & (PAGE_SIZE - 1)));
page = cl_page_find(env, obj, cl_index(obj, offset),
- pv->ldp_pages[i], CPT_TRANSIENT);
+ pv->ldp_pages[i], inode, CPT_TRANSIENT);
if (IS_ERR(page)) {
rc = PTR_ERR(page);
break;
goto again;
}
- page = cl_page_find(env, clob, vmpage->index, vmpage, CPT_CACHEABLE);
+ page = cl_page_find(env, clob, vmpage->index, vmpage, inode,
+ CPT_CACHEABLE);
if (IS_ERR(page))
GOTO(out, result = PTR_ERR(page));
}
}
- page = cl_page_find(env, obj, fio->ft_index, vmpage, CPT_CACHEABLE);
+ page = cl_page_find(env, obj, fio->ft_index, vmpage, inode,
+ CPT_CACHEABLE);
if (IS_ERR(page))
GOTO(out, result = PTR_ERR(page));
struct cl_page *cl_page_alloc(const struct lu_env *env, struct cl_object *o,
pgoff_t ind, struct page *vmpage,
+ struct inode *inode,
enum cl_page_type type)
{
struct cl_page *cl_page;
cl_page->cp_vmpage = vmpage;
cl_page->cp_state = CPS_CACHED;
cl_page->cp_type = type;
+ cl_page->cp_inode = inode;
if (type == CPT_TRANSIENT)
/* ref to correct inode will be added
* in ll_direct_rw_pages
struct cl_page *cl_page_find(const struct lu_env *env,
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, o, idx, vmpage, type);
+ page = cl_page_alloc(env, o, idx, vmpage, inode, type);
RETURN(page);
}
EXPORT_SYMBOL(cl_page_find);
for (i = 0; i < npages; i++) {
LASSERT(pages[i]);
+ /* TDB: need pass inode here */
clp = cl_page_find(env, obj, cl_index(obj, offset),
- pages[i], CPT_TRANSIENT);
+ pages[i], NULL, CPT_TRANSIENT);
if (IS_ERR(clp)) {
rc = PTR_ERR(clp);
break;