summaryrefslogtreecommitdiff
path: root/ufs
diff options
context:
space:
mode:
Diffstat (limited to 'ufs')
-rw-r--r--ufs/pager.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/ufs/pager.c b/ufs/pager.c
index 90e5d985..fd148d8d 100644
--- a/ufs/pager.c
+++ b/ufs/pager.c
@@ -117,8 +117,10 @@ pager_read_page (struct user_pager_info *pager,
}
else
{
+#if 0
printf ("Write-locked pagein Object %#x\tOffset %#x\n", pager, page);
fflush (stdout);
+#endif
vm_allocate (mach_task_self (), buf, __vm_page_size, 1);
*writelock = 1;
}
@@ -187,8 +189,10 @@ pager_unlock_page (struct user_pager_info *pager,
/* Problem--where to get cred values for allocation here? */
+#if 0
printf ("Unlock page request, Object %#x\tOffset %#x...", pager, address);
fflush (stdout);
+#endif
if (pager->type == DISK)
return 0;
@@ -216,6 +220,13 @@ pager_unlock_page (struct user_pager_info *pager,
return EIO;
}
+ err = diskfs_catch_exception ();
+ if (err)
+ {
+ rwlock_writer_unlock (&dn->allocptrlock);
+ return EIO;
+ }
+
/* See if we need a triple indirect block; fail if we do. */
assert (indirs[0].offset == -1
|| indirs[1].offset == -1