]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
LINUX: Always hold afs_xuser for unixuser read
authorAndrew Deason <adeason@sinenomine.net>
Tue, 31 Jul 2012 18:40:41 +0000 (14:40 -0400)
committerPaul Smeddle <paul.smeddle@gmail.com>
Wed, 5 Dec 2012 09:45:01 +0000 (01:45 -0800)
We were failing to hold the afs_xuser lock when we entered our
unixuser traversal for the first time (when the given position is 0).
This means we can release the lock without acquiring it, causing all
kinds of weird behavior.

Just always grab afs_xuser on entry. We could possibly do some tricks
to avoid grabbing this lock until after we've printed the column
headers, but it does not seem worth it.

Reviewed-on: http://gerrit.openafs.org/7916
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>
(cherry picked from commit 351d3b8a19314027b30cdc499ef48c95ba7903b6)

Change-Id: I75e137e588fcbf973a5d564db3a077c4ec4f50e1
Reviewed-on: http://gerrit.openafs.org/8547
Reviewed-by: Ken Dreyer <ktdreyer@ktdreyer.com>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Stephan Wiesand <stephan.wiesand@desy.de>
Tested-by: Stephan Wiesand <stephan.wiesand@desy.de>
Reviewed-by: Paul Smeddle <paul.smeddle@gmail.com>
src/afs/LINUX/osi_proc.c

index 3f687f35b1b95f3eeee9aebdb4883d7f1f527bb2..974c0a7713975174f07eeb9233509077a4e5fb8a 100644 (file)
@@ -138,12 +138,14 @@ uu_start(struct seq_file *m, loff_t *pos)
     loff_t n = 0;
     afs_int32 i;
 
-    if (!*pos)
-       return (void *)(1);
-
     AFS_GLOCK();
     ObtainReadLock(&afs_xuser);
 
+    if (!*pos) {
+       ret = (void *)(1);
+       goto done;
+    }
+
     ret = NULL;
 
     for (i = 0; i < NUSERS; i++) {