From: Nickolai Zeldovich Date: Mon, 22 Jul 2002 23:19:14 +0000 (+0000) Subject: Translate faultcode_t return values from vm routines into errno codes. X-Git-Tag: openafs-stable-1_2_6~31 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=8d0d02d8244329c3bbbb832a82094584755410f2;p=packages%2Fo%2Fopenafs.git Translate faultcode_t return values from vm routines into errno codes. (cherry picked from commit 9cd177c636c59a7369155d56582bffffb744aeb7) --- diff --git a/src/afs/SOLARIS/osi_vnodeops.c b/src/afs/SOLARIS/osi_vnodeops.c index d3ff01d58..1a7218c1c 100644 --- a/src/afs/SOLARIS/osi_vnodeops.c +++ b/src/afs/SOLARIS/osi_vnodeops.c @@ -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);