]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
Translate faultcode_t return values from vm routines into errno codes.
authorNickolai Zeldovich <kolya@mit.edu>
Mon, 22 Jul 2002 23:19:14 +0000 (23:19 +0000)
committerGarry Zacheiss <zacheiss@mit.edu>
Mon, 22 Jul 2002 23:19:14 +0000 (23:19 +0000)
(cherry picked from commit 9cd177c636c59a7369155d56582bffffb744aeb7)

src/afs/SOLARIS/osi_vnodeops.c

index d3ff01d5838541ab20eb530e768377bb526c1b7f..1a7218c1c91a6bc1283262160a869ad4bfdb3037 100644 (file)
@@ -81,6 +81,25 @@ AFS_TRYUP(lock)
 #endif
 
 
+/* Translate a faultcode_t as returned by some of the vm routines
+ * into a suitable errno value.
+ */
+static int
+afs_fc2errno(faultcode_t fc)
+{
+    switch (FC_CODE(fc)) {
+    case 0:
+       return 0;
+
+    case FC_OBJERR:
+       return FC_ERRNO(fc);
+
+    default:
+       return EIO;
+    }
+}
+
+
 extern struct as kas;  /* kernel addr space */
 extern unsigned char *afs_indexFlags;         
 extern afs_lock_t afs_xdcache;         
@@ -1070,7 +1089,8 @@ struct AFS_UCRED *acred;
        data = segmap_getmap(segkmap, AFSTOV(avc), pageBase);
 #endif
 #ifndef        AFS_SUN5_ENV
-       code = as_fault(&kas, data+pageOffset, tsize, F_SOFTLOCK, mode);
+       code = afs_fc2errno(as_fault(&kas, data+pageOffset, tsize,
+                                    F_SOFTLOCK, mode));
        if (code == 0) {
            AFS_UIOMOVE(data+pageOffset, tsize, arw, auio, code);
            as_fault(&kas, data+pageOffset, tsize, F_SOFTUNLOCK, mode);
@@ -1131,7 +1151,8 @@ struct AFS_UCRED *acred;
                AFS_GUNLOCK();
            }
            if (!created)
-               code = segmap_fault(kas.a_hat, segkmap, raddr, rsize, F_SOFTLOCK, mode);
+               code = afs_fc2errno(segmap_fault(kas.a_hat, segkmap, raddr,
+                                                rsize, F_SOFTLOCK, mode));
        }
        if (code == 0) {
            AFS_UIOMOVE(data+pageOffset, tsize, arw, auio, code);