]> git.michaelhowe.org Git - packages/o/openafs.git/commitdiff
namei: Limit traversal when removing data dirs
authorAndrew Deason <adeason@sinenomine.net>
Thu, 2 Sep 2010 20:05:21 +0000 (15:05 -0500)
committerDerrick Brashear <shadow@dementia.org>
Tue, 8 Feb 2011 21:55:17 +0000 (13:55 -0800)
namei_RemoveDataDirectories currently calls delTree with 'tree'
pointing to the part of the path immediately following n_base (i.e.
starting at the beginning of n_voldir1). This causes delTree to
traverse all of n_voldir1, trying to delete every directory it finds.

Since we are typically only trying to remove a single volume when
calling namei_RemoveDataDirectories, instead call delTree with 'tree'
pointing to immediately after n_voldir1, and beginning at n_voldir2
and try to just rmdir n_voldir1 afterwards. This way, we do not
traverse a large fraction of the entire partition when just trying to
delete a single volume, and so can significantly speed up volume
removals.

(cherry picked from commit 1ca0a24775794ba2e645854a3bbaa656f2fc8086)
Reviewed-on: http://gerrit.openafs.org/2651
Tested-by: Andrew Deason <adeason@sinenomine.net>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
Change-Id: Iadae1e231b533695af615a231e42ad8204674fe4
Reviewed-on: http://gerrit.openafs.org/3908
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementia.org>
src/vol/namei_ops.c

index e039523a6fb0c8e4a72d10e1d5204ad2311d5381..659577612156cb759d82dc1e39d368c6f5f74687 100644 (file)
@@ -602,8 +602,8 @@ namei_RemoveDataDirectories(namei_t * name)
 
     strlcpy(path, name->n_path, sizeof(pbuf));
 
-    /* move past the prefix */
-    path = path + prefixlen + 1;       /* skip over the trailing / */
+    /* move past the prefix and n_voldir1 */
+    path = path + prefixlen + 1 + vollen + 1;  /* skip over the trailing / */
 
     /* now delete all dirs upto path */
     code = delTree(pbuf, path, &err);