#if defined(__KERNEL__)
struct page *vmpage = cl_page_vmpage(env, page);
- if (PageLocked(vmpage) || PageDirty(vmpage) || PageWriteback(vmpage)) {
- (*(unsigned long *)cbdata)++;
+ if (PageLocked(vmpage) || PageDirty(vmpage) || PageWriteback(vmpage))
return CLP_GANG_ABORT;
- }
#endif
+ *(pgoff_t *)cbdata = page->cp_index + 1;
return CLP_GANG_OKAY;
}
struct cl_io *io = &osc_env_info(env)->oti_io;
struct cl_lock_descr *descr = &ols->ols_cl.cls_lock->cll_descr;
struct cl_object *obj = ols->ols_cl.cls_obj;
- unsigned long npages = 0;
+ pgoff_t page_index;
int result;
ENTRY;
if (result != 0)
RETURN(result);
+ page_index = descr->cld_start;
do {
result = cl_page_gang_lookup(env, obj, io,
- descr->cld_start, descr->cld_end,
- weigh_cb, (void *)&npages);
+ page_index, descr->cld_end,
+ weigh_cb, (void *)&page_index);
if (result == CLP_GANG_ABORT)
break;
if (result == CLP_GANG_RESCHED)
} while (result != CLP_GANG_OKAY);
cl_io_fini(env, io);
- return npages;
+ return result == CLP_GANG_ABORT ? 1 : 0;
}
/**