OpenAFS Master Repository branch, master, updated. openafs-devel-1_5_76-3660-ge8faeae
Gerrit Code Review
gerrit@openafs.org
Mon, 25 Mar 2013 11:48:28 -0700 (PDT)
The following commit has been merged in the master branch:
commit e8faeae6dcae0e566de2b21d53d3f78f3cc44e3f
Author: Mark Vitale <mvitale@sinenomine.net>
Date: Fri Jan 25 18:47:49 2013 -0500
salvager: prevent assertion during -orphans attach
Improve JudgeEntry() detection of orphaned directories to
prevent unintentional deletion of their '.' and '..' entries.
This in turn prevents a later assert (opr_Verify) when we try to
delete and re-add '..' in order to attach the orphan.
In JudgeEntry(), 2 sources of information about a
directory entry are compared for consistency:
- vnodeEssence (unique) from its vnode index entry
- name, vnodeNumber and unique from its dir blob entry
A directory entry may be ignored, deleted, or repaired/replaced,
based upon the results of these and other tests (e.g. dirOprhaned).
The '.' and '..' entries are treated as special cases because
we do not want to delete them at this point if this directory
is orphaned. However, the current test for orphanhood
(vnodeEssence->unique == 0) is not sufficient; it could be
zero for other reasons. This commit now uses the dirOrphaned
flag to test for this.
However, we are still interested in doing the right thing
for '.' and '..' entries with vnodeEssence->unique == 0.
This may indicate that the dir blob entry is pointing at the
wrong vnode, and that vnode has unique==0. The current code
incorrectly ignores (returns 0) this case. This commit now
now falls through to the repair/replace code so that we can
find the correct vnode for this entry.
The current code assumes that the 'vnodeEssence == 0 &&
!dirOrphaned' case doesn't exist.
Thanks to Andrew Deason for his assistance.
Change-Id: Id7c466fcc0f031b8fccb52dc51493eeed040cf95
Reviewed-on: http://gerrit.openafs.org/9104
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@your-file-system.com>
src/vol/vol-salvage.c | 55 +++++++++++++++++++++++++++++-------------------
1 files changed, 33 insertions(+), 22 deletions(-)
--
OpenAFS Master Repository