]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
afs: Throttle byte-range locks warnings per-file
authorAndrew Deason <adeason@sinenomine.net>
Fri, 31 Jan 2014 22:46:12 +0000 (16:46 -0600)
committerStephan Wiesand <stephan.wiesand@desy.de>
Fri, 14 Mar 2014 12:46:10 +0000 (05:46 -0700)
Currently, the warning messages about byte-range locks are throttled
only according to what the last PID of the locking process was. So, if
that same process performs a bunch of byte-range locks a bunch of
times, we log this warning message at most once every 2 minutes.

However, if we have even just one other process also performing
byte-range locks, the throttling can become pretty useless as
lastWarnPid ping-pongs back and forth between the two different PIDs.
This can happen if multiple unrelated byte-range-lock-using pieces of
software just happen to be running on the same machine, or if a piece
of software uses byte-range locks after forking into separate
processes.

To avoid flooding the log in situations like this, keep track of the
last warn time in the relevant vcache, so we don't get frequent
warnings for byte-range lock requests on the same file.

Reviewed-on: http://gerrit.openafs.org/10796
Reviewed-by: D Brashear <shadow@your-file-system.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
(cherry picked from commit 9f90b12e14e5511cb1c11cbc4d85cfa291be861f)

Change-Id: Ia5426e97fa431e6b9eeb1c82e03c74c959249e9a
Reviewed-on: http://gerrit.openafs.org/10839
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Andrew Deason <adeason@sinenomine.net>
Reviewed-by: D Brashear <shadow@your-file-system.com>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
src/afs/VNOPS/afs_vnop_flock.c
src/afs/afs.h

index 4d03dc1de4b99ef0753b2fb1e65799250a4b90a0..e330a0d6bad332088ed023e75b43ae4cb84902d7 100644 (file)
@@ -535,6 +535,9 @@ DoLockWarning(struct vcache *avc, afs_ucred_t * acred)
     if ((now < lastWarnTime + 120) && (lastWarnPid == pid)) {
        return;
     }
+    if (now < avc->lastBRLWarnTime + 120) {
+       return;
+    }
 
     procname = afs_osi_Alloc(256);
 
@@ -545,7 +548,7 @@ DoLockWarning(struct vcache *avc, afs_ucred_t * acred)
     osi_procname(procname, 256);
     procname[255] = '\0';
 
-    lastWarnTime = now;
+    lastWarnTime = avc->lastBRLWarnTime = now;
     lastWarnPid = pid;
 
 #ifdef AFS_LINUX26_ENV
index e77d16aa8dbb22c597905bc0c59561765826868f..88d5f776331303d0eb4785e95b2deefe2a115070 100644 (file)
@@ -895,6 +895,7 @@ struct vcache {
 #ifdef AFS_SUN5_ENV
     struct afs_q multiPage;    /* list of multiPage_range structs */
 #endif
+    afs_uint32 lastBRLWarnTime; /* last time we warned about byte-range locks */
 };
 
 #define        DONT_CHECK_MODE_BITS    0