int result;
__u16 refcheck;
sigset_t set;
- struct inode *inode;
+ struct inode *inode = NULL;
struct ll_inode_info *lli;
ENTRY;
CDEBUG(D_MMAP, "%s mkwrite with %d\n", current->comm, result);
LASSERT(ergo(result == 0, PageLocked(vmpage)));
+ /* if page has been unmapped, presumably due to lock reclaim for
+ * concurrent usage, add some delay before retrying to prevent
+ * entering live-lock situation with competitors
+ */
+ if (result == -ENODATA && inode != NULL) {
+ CDEBUG(D_MMAP, "delaying new page-fault for inode %p to "
+ "prevent live-lock\n", inode);
+ msleep(10);
+ }
+
return result;
}