Patch #: 173 Type: bug fix Priority: medium Affects: sites running AUFS with STAT_CACHE on some hosts Reported: Robert Viduya Reported: Dominique Marcadet Archived: munnari.OZ.AU mac/cap.patches/cap60.patch173 Application: 'cd cap60; patch -p < cap60.patches/cap60.patch173' Summary: Alpha OSF/1 & Solaris use unsigned short st_nlink File: cap60/applications/aufs/afpspd.c *** applications/aufs/afpspd.c.orig Tue Nov 23 22:39:23 1993 --- applications/aufs/afpspd.c Mon Dec 6 21:07:35 1993 *************** *** 45,50 **** --- 45,58 ---- private char CUR_STAT_STR[1024]; private int CUR_STAT_LEVEL = 0; + /* + * The following is used as a sentinel in a statobj to mark invalid + * entries. It is stored in the st_nlink field in the STAT substructure. + * + */ + + #define BAD_LINK 0x7fff + OSStatInit() { register int P; *************** *** 51,57 **** for (P = 0; P <= MAX_LEVEL; P++) { STATS[P].NAME = NULL; ! STATS[P].STAT.st_nlink = -1; STATS[P].FN = VAL_INVALID; STATS[P].RS = VAL_INVALID; } --- 59,65 ---- for (P = 0; P <= MAX_LEVEL; P++) { STATS[P].NAME = NULL; ! STATS[P].STAT.st_nlink = BAD_LINK; STATS[P].FN = VAL_INVALID; STATS[P].RS = VAL_INVALID; } *************** *** 125,131 **** printf("release_stats=%d of %d\n",K,CUR_STAT_LEVEL); for (P = K; P <= CUR_STAT_LEVEL; P++) { ! STATS[P].STAT.st_nlink = -1; STATS[P].FN = VAL_INVALID; STATS[P].RS = VAL_INVALID; STATS[P].NAME = NULL; --- 133,139 ---- printf("release_stats=%d of %d\n",K,CUR_STAT_LEVEL); for (P = K; P <= CUR_STAT_LEVEL; P++) { ! STATS[P].STAT.st_nlink = BAD_LINK; STATS[P].FN = VAL_INVALID; STATS[P].RS = VAL_INVALID; STATS[P].NAME = NULL; *************** *** 144,150 **** return; EXPIRE_REQ = 0; for (K = 0; K <= CUR_STAT_LEVEL; K++) { ! if (STATS[K].STAT.st_nlink < 0) continue; if (STATS[K].VAL_TIME <= CUR_TIME) { if (DBOSI) --- 152,158 ---- return; EXPIRE_REQ = 0; for (K = 0; K <= CUR_STAT_LEVEL; K++) { ! if (STATS[K].STAT.st_nlink == BAD_LINK) continue; if (STATS[K].VAL_TIME <= CUR_TIME) { if (DBOSI) *************** *** 151,157 **** printf("expired=%d(%s) t=%d\n", K, STATS[K].NAME, STATS[K].VAL_TIME - CUR_TIME); ! STATS[K].STAT.st_nlink = -1; STATS[K].FN = VAL_INVALID; STATS[K].RS = VAL_INVALID; STATS[K].NAME = NULL; --- 159,165 ---- printf("expired=%d(%s) t=%d\n", K, STATS[K].NAME, STATS[K].VAL_TIME - CUR_TIME); ! STATS[K].STAT.st_nlink = BAD_LINK; STATS[K].FN = VAL_INVALID; STATS[K].RS = VAL_INVALID; STATS[K].NAME = NULL; *************** *** 309,315 **** CE = locate_statobj(path); if (CE != NULL) { ! if (CE->STAT.st_nlink >= 0) { if (DBOSI) printf("OSstat=cache path\n"); bcopy(&CE->STAT,buf,sizeof(struct stat)); --- 317,323 ---- CE = locate_statobj(path); if (CE != NULL) { ! if (CE->STAT.st_nlink != BAD_LINK) { if (DBOSI) printf("OSstat=cache path\n"); bcopy(&CE->STAT,buf,sizeof(struct stat)); *** lib/cap/abversion.c.orig Wed Nov 24 23:33:33 1993 --- lib/cap/abversion.c Fri Nov 26 00:02:42 1993 *************** *** 1,7 **** /* ! * $Author: djh $ $Date: 1993/11/24 12:33:24 $ ! * $Header: /mac/src/cap60/lib/cap/RCS/abversion.c,v 2.72 1993/11/24 12:33:24 djh Rel djh $ ! * $Revision: 2.72 $ * */ --- 1,7 ---- /* ! * $Author: djh $ $Date: 1993/11/25 13:02:37 $ ! * $Header: /mac/src/cap60/lib/cap/RCS/abversion.c,v 2.73 1993/11/25 13:02:37 djh Rel djh $ ! * $Revision: 2.73 $ * */ *************** *** 32,38 **** myversion.cv_name = "CAP"; myversion.cv_version = 6; myversion.cv_subversion = 0; ! myversion.cv_patchlevel = 172; myversion.cv_rmonth = "November"; myversion.cv_ryear = "1993"; switch (lap_proto) { --- 32,38 ---- myversion.cv_name = "CAP"; myversion.cv_version = 6; myversion.cv_subversion = 0; ! myversion.cv_patchlevel = 173; myversion.cv_rmonth = "November"; myversion.cv_ryear = "1993"; switch (lap_proto) { *** README.orig Wed Nov 24 23:34:38 1993 --- README Fri Nov 26 00:04:22 1993 *************** *** 2,8 **** CAP - Columbia AppleTalk Package for UNIX o RELEASE NOTES ! o CAP Distribution 6.0, Patch Level 172, November 1993 Notice ------ --- 2,8 ---- CAP - Columbia AppleTalk Package for UNIX o RELEASE NOTES ! o CAP Distribution 6.0, Patch Level 173, November 1993 Notice ------