* Adds a page to a page list.
*/
void cl_page_list_add(struct cl_page_list *plist, struct cl_page *page,
- bool get_ref)
+ bool getref)
{
ENTRY;
/* it would be better to check that page is owned by "current" io, but
list_add_tail(&page->cp_batch, &plist->pl_pages);
++plist->pl_nr;
lu_ref_add_at(&page->cp_reference, &page->cp_queue_ref, "queue", plist);
- if (get_ref)
+ if (getref)
cl_page_get(page);
EXIT;
}
* Removes a page from a page list.
*/
void cl_page_list_del(const struct lu_env *env,
- struct cl_page_list *plist, struct cl_page *page)
+ struct cl_page_list *plist, struct cl_page *page,
+ bool putref)
{
LASSERT(plist->pl_nr > 0);
list_del_init(&page->cp_batch);
--plist->pl_nr;
lu_ref_del_at(&page->cp_reference, &page->cp_queue_ref, "queue", plist);
- cl_page_put(env, page);
+ if (putref)
+ cl_page_put(env, page);
EXIT;
}
EXPORT_SYMBOL(cl_page_list_del);
ENTRY;
cl_page_list_for_each_safe(page, temp, plist)
- cl_page_list_del(env, plist, page);
+ cl_page_list_del(env, plist, page, true);
LASSERT(plist->pl_nr == 0);
EXIT;
}
struct cl_page *page = cl_page_list_first(&sdio->csd_pages);
cl_page_delete(env, page);
- cl_page_list_del(env, &sdio->csd_pages, page);
+ cl_page_list_del(env, &sdio->csd_pages, page, false);
+ cl_page_put(env, page);
}
if (sdio->csd_unaligned) {