DEVEL15-linux-warning-reduction-20090318
[openafs.git] / src / afs / afs_osi_pag.c
index 801c741..dd4112d 100644 (file)
@@ -145,6 +145,7 @@ getpag(void)
  */
 
 static int afs_pag_sleepcnt = 0;
+static int afs_pag_timewarn = 0;
 
 static int
 afs_pag_sleep(struct AFS_UCRED **acred)
@@ -155,6 +156,13 @@ afs_pag_sleep(struct AFS_UCRED **acred)
        if(osi_Time() - pag_epoch < pagCounter) {
            rv = 1;
        }
+       if (rv && (osi_Time() < pag_epoch)) {
+           if (!afs_pag_timewarn) {
+               afs_pag_timewarn = 1;
+               printf("clock went backwards, not PAG throttling");
+           }
+           rv = 0;
+       }
     }
 
     return rv;
@@ -422,12 +430,19 @@ int
 afs_InitReq(register struct vrequest *av, struct AFS_UCRED *acred)
 {
     int code;
+    int i = 0;
 
     AFS_STATCNT(afs_InitReq);
     memset(av, 0, sizeof(*av));
     if (afs_shuttingdown)
        return EIO;
 
+    av->idleError = 0;
+    av->tokenError = 0;
+    while (i < MAXHOSTS) {
+      av->skipserver[i] = 0;
+      i++;
+    }
 #ifdef AFS_LINUX26_ENV
 #if !defined(AFS_NONFSTRANS)
     if (osi_linux_nfs_initreq(av, acred, &code))
@@ -505,7 +520,9 @@ afs_get_pag_from_groups(gid_t g0a, gid_t g1a)
 void
 afs_get_groups_from_pag(afs_uint32 pag, gid_t * g0p, gid_t * g1p)
 {
+#ifndef AFS_LINUX26_ONEGROUP_ENV
     unsigned short g0, g1;
+#endif
 
 
     AFS_STATCNT(afs_get_groups_from_pag);
@@ -527,10 +544,12 @@ afs_get_groups_from_pag(afs_uint32 pag, gid_t * g0p, gid_t * g1p)
 
 
 afs_int32
-PagInCred(const struct AFS_UCRED *cred)
+PagInCred(struct AFS_UCRED *cred)
 {
     afs_int32 pag;
+#if !defined(AFS_LINUX26_ONEGROUP_ENV)
     gid_t g0, g1;
+#endif
 #if defined(AFS_SUN510_ENV)
     const gid_t *gids;
     int ngroups;
@@ -554,11 +573,7 @@ PagInCred(const struct AFS_UCRED *cred)
     g0 = cred->cr_groups[1];
     g1 = cred->cr_groups[2];
 #else
-#if defined(AFS_AIX51_ENV)
-    if (kcred_getpag(cred, PAG_AFS, &pag) < 0 || pag == 0)
-       pag = NOPAG;
-    return pag;
-#elif defined(AFS_AIX_ENV)
+#if defined(AFS_AIX_ENV)
     if (cred->cr_ngrps < 2) {
        return NOPAG;
     }
@@ -599,17 +614,18 @@ PagInCred(const struct AFS_UCRED *cred)
 #endif
 out:
 #if defined(AFS_LINUX26_ENV) && defined(LINUX_KEYRING_SUPPORT)
-    if (pag == NOPAG) {
+    if (pag == NOPAG && cred->cr_rgid != NFSXLATOR_CRED) {
        struct key *key;
-       afs_uint32 pag, newpag;
+       afs_uint32 upag, newpag;
 
        key = request_key(&key_type_afs_pag, "_pag", NULL);
        if (!IS_ERR(key)) {
            if (key_validate(key) == 0 && key->uid == 0) {      /* also verify in the session keyring? */
-
-               pag = (afs_uint32) key->payload.value;
-               if (((pag >> 24) & 0xff) == 'A')
-                   __setpag(&cred, pag, &newpag, 0);
+               upag = (afs_uint32) key->payload.value;
+               if (((upag >> 24) & 0xff) == 'A') {
+                   __setpag(&cred, upag, &newpag, 0);
+                   pag = (afs_int32) upag;
+               }
            }
            key_put(key);
        }