struct ccc_page *vpg = cl2ccc_page(slice);
cfs_page_t *vmpage = vpg->cpg_page;
- LASSERT(vmpage != NULL);
- if (nonblock) {
- if (TestSetPageLocked(vmpage))
- return -EAGAIN;
+ LASSERT(vmpage != NULL);
+ if (nonblock) {
+ if (!trylock_page(vmpage))
+ return -EAGAIN;
if (unlikely(PageWriteback(vmpage))) {
unlock_page(vmpage);
*/
static void vvp_vmpage_error(struct inode *inode, cfs_page_t *vmpage, int ioret)
{
- if (ioret == 0)
- ClearPageError(vmpage);
- else if (ioret != -EINTR) {
- SetPageError(vmpage);
- if (ioret == -ENOSPC)
- set_bit(AS_ENOSPC, &inode->i_mapping->flags);
- else
- set_bit(AS_EIO, &inode->i_mapping->flags);
- }
+ struct ccc_object *obj = cl_inode2ccc(inode);
+
+ if (ioret == 0) {
+ ClearPageError(vmpage);
+ obj->cob_discard_page_warned = 0;
+ } else {
+ SetPageError(vmpage);
+ if (ioret == -ENOSPC)
+ set_bit(AS_ENOSPC, &inode->i_mapping->flags);
+ else
+ set_bit(AS_EIO, &inode->i_mapping->flags);
+
+ if ((ioret == -ESHUTDOWN || ioret == -EINTR) &&
+ obj->cob_discard_page_warned == 0) {
+ obj->cob_discard_page_warned = 1;
+ ll_dirty_page_discard_warn(vmpage, ioret);
+ }
+ }
}
static void vvp_page_completion_read(const struct lu_env *env,
struct inode *inode = ccc_object_inode(page->cp_obj);
LASSERT(!mutex_trylock(&inode->i_mutex));
- /* LASSERT_SEM_LOCKED(&inode->i_alloc_sem); */
}
static int vvp_transient_page_own(const struct lu_env *env,